通过 TidbMonitor 监控 TiDB 集群

    1. 已经安装了 Operator 及以上版本,并且已经更新了相关版本的 CRD 文件
    2. 已经设置了默认的 storageClass,并保证其有足够的 PV(默认情况下需要 6 个 PV)。这可以通过以下指令来验证:

    安装

    你可以在 Kubernetes 集群上通过 CR 文件快速建立起一个 TidbMonitor 监控 TiDB 集群。接下来我们可以将以下内容存为 yaml 文件,通过 kubectl apply -f 的方式部署一个 TidbMonitor 组件。

    注意:

    目前一个 TidbMonitor 只支持监控一个 TidbCluster。

    1. apiVersion: pingcap.com/v1alpha1
    2. kind: TidbMonitor
    3. metadata:
    4. name: basic
    5. spec:
    6. clusters:
    7. - name: basic
    8. prometheus:
    9. baseImage: prom/prometheus
    10. version: v2.11.1
    11. service:
    12. type: NodePort
    13. grafana:
    14. baseImage: grafana/grafana
    15. version: 6.0.1
    16. initializer:
    17. baseImage: pingcap/tidb-monitor-initializer
    18. version: v3.1.0
    19. reloader:
    20. baseImage: pingcap/tidb-monitor-reloader
    21. version: v1.0.1
    22. imagePullPolicy: IfNotPresent

    或者你可以通过以下方式快速部署 TidbMonitor:

    1. kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml -n ${namespace}
    1. $ kubectl get pod -l app.kubernetes.io/instance=basic -n ${namespace} | grep monitor
    2. basic-monitor-85fcf66bc4-cwpcn 3/3 Running 0 117s

    运行以下命令查看监控面板:

    然后访问 localhost:3000。

    删除监控

    1. kubectl delete tidbmonitor basic -n ${namespace}

    如果我们需要将 TidbMonitor 的监控数据持久化存储,我们需要在 TidbMonitor 中开启持久化选项:

    1. apiVersion: pingcap.com/v1alpha1
    2. kind: TidbMonitor
    3. metadata:
    4. name: basic
    5. spec:
    6. clusters:
    7. - name: basic
    8. storageClassName: ${storageClassName}
    9. storage: 5G
    10. prometheus:
    11. baseImage: prom/prometheus
    12. version: v2.11.1
    13. service:
    14. type: NodePort
    15. grafana:
    16. baseImage: grafana/grafana
    17. version: 6.0.1
    18. type: NodePort
    19. initializer:
    20. baseImage: pingcap/tidb-monitor-initializer
    21. version: v3.1.0
    22. reloader:
    23. baseImage: pingcap/tidb-monitor-reloader
    24. version: v1.0.1
    25. imagePullPolicy: IfNotPresent

    你可以通过以下命令来确认 PVC 情况:

    1. $ kubectl get pvc -l app.kubernetes.io/instance=basic,app.kubernetes.io/component=monitor -n ${namespace}
    2. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
    3. basic-monitor Bound pvc-6db79253-cc9e-4730-bbba-ba987c29db6f 5G RWO standard 51s

    在部分情况下,你可能需要 TidbMonitor 同时获取 Kubernetes 上的监控指标。你可以通过设置 TidbMonitor.Spec.kubePrometheusURL 来使其获取 kube-prometheus metrics,了解 kube-prometheus

    同样的,你可以通过设置 TidbMonitor 来将监控推送警报至指定的 AlertManager,了解 。

    环境准备

    更多关于 Ingress 环境准备,可以参考

    目前, TidbMonitor 提供了通过 Ingress 将 Prometheus/Grafana 服务暴露出去的方式,你可以通过 Ingress 文档了解更多关于 Ingress 的详情。

    以下是一个开启了 Prometheus 与 Grafana Ingress 的 TidbMonitor 例子:

    1. apiVersion: pingcap.com/v1alpha1
    2. kind: TidbMonitor
    3. metadata:
    4. name: ingress-demo
    5. spec:
    6. clusters:
    7. - name: demo
    8. persistent: false
    9. prometheus:
    10. baseImage: prom/prometheus
    11. version: v2.11.1
    12. ingress:
    13. hosts:
    14. - exmaple.com
    15. annotations:
    16. foo: "bar"
    17. grafana:
    18. baseImage: grafana/grafana
    19. version: 6.0.1
    20. service:
    21. type: ClusterIP
    22. ingress:
    23. hosts:
    24. - exmaple.com
    25. foo: "bar"
    26. initializer:
    27. version: v3.0.5
    28. reloader:
    29. baseImage: pingcap/tidb-monitor-reloader
    30. version: v1.0.1
    31. imagePullPolicy: IfNotPresent

    你可以通过 spec.prometheus.ingress.annotationsspec.grafana.ingress.annotations 来设置对应的 Ingress Annotations 的设置。如果你使用的是默认的 Nginx Ingress 方案,你可以在 了解更多关于 Annotations 的详情。

    TidbMonitor 的 Ingress 设置同样支持设置 TLS,以下是一个为 Ingress 设置 TLS 的例子。你可以通过 Ingress TLS 来了解更多关于 Ingress TLS 的资料。

    1. apiVersion: pingcap.com/v1alpha1
    2. kind: TidbMonitor
    3. metadata:
    4. name: ingress-demo
    5. spec:
    6. clusters:
    7. - name: demo
    8. persistent: false
    9. prometheus:
    10. baseImage: prom/prometheus
    11. version: v2.11.1
    12. ingress:
    13. hosts:
    14. - exmaple.com
    15. tls:
    16. - hosts:
    17. - exmaple.com
    18. secretName: testsecret-tls
    19. grafana:
    20. baseImage: grafana/grafana
    21. version: 6.0.1
    22. service:
    23. type: ClusterIP
    24. initializer:
    25. baseImage: pingcap/tidb-monitor-initializer
    26. version: v3.0.5
    27. reloader:
    28. baseImage: pingcap/tidb-monitor-reloader
    29. version: v1.0.1
    30. imagePullPolicy: IfNotPresent

    TLS Secret 必须包含名为 tls.crt 和 tls.key 的密钥,这些密钥包含用于 TLS 的证书和私钥,例如:

    1. apiVersion: v1
    2. kind: Secret
    3. metadata:
    4. name: testsecret-tls
    5. namespace: ${namespace}
    6. data:
    7. tls.crt: base64 encoded cert