文档目录

聚合多个 TiDB 集群的监控数据

本文档介绍如何通过 Thanos 聚合多个 TiDB 集群的监控数据,解决多集群下监控数据的中心化问题。

Thanos 介绍

Thanos 是 Prometheus 高可用的解决方案,用于简化 Prometheus 的可用性保证。详细内容请参考 Thanos 官方文档

Thanos 提供了跨 Prometheus 的统一查询方案 Thanos Query 组件,可以利用这个功能解决 TiDB 多集群监控数据聚合的问题。

配置 Thanos Query

  1. 为每个 TidbMonitor 配置一个 Thanos Sidecar 容器。

    示例如下:

    kubectl -n ${namespace} apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/monitor-with-thanos/tidb-monitor.yaml

    注意:

    此命令中的 ${namespace} 表示 TidbMonitor 部署的命名空间,必须与部署 TidbCluster 的 namespace 相同。

  2. 部署 Thanos Query 组件。

    1. 下载 Thanos Query 的部署文件 thanos-query.yaml

      curl -sl -O https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/monitor-with-thanos/thanos-query.yaml
    2. 手动修改 thanos-query.yaml 文件中的 --store 参数,将 basic-prometheus:10901 改为 basic-prometheus.${namespace}:10901

      其中,${namespace} 表示 TidbMonitor 部署的命名空间。

    3. 执行 kubectl apply 命令部署:

      kubectl -n ${thanos_namespace} apply -f thanos-query.yaml

      其中,${thanos_namespace} 表示 Thanos Query 组件部署的命名空间。

在 Thanos Query 中,一个 Prometheus 对应一个 Store,也就对应一个 TidbMonitor。部署完 Thanos Query,就可以通过 Thanos Query 的 API 提供监控数据的统一查询接口。

访问 Thanos Query 面板

要访问 Thanos Query 面板,请执行以下命令,然后通过浏览器访问 http://127.0.0.1:9090

kubectl port-forward -n ${thanos_namespace} svc/thanos-query 9090

如果你想通过 NodePort 或 LoadBalancer 访问,请参考:

配置 Grafana

部署 Thanos Query 之后,要查询多个 TidbMonitor 的监控数据,请进行以下操作:

  1. 登陆 Grafana。
  2. 在左侧导航栏中,选择 Configuration > Data Sources
  3. 添加或修改一个 Prometheus 类型的 DataSource。
  4. 将 HTTP 下面的 URL 设置为 http://thanos-query.${thanos_namespace}:9090

增加或者减少 TidbMonitor

在 Thanos Query 中,一个 Prometheus 对应一个 Monitor Store,也就对应一个 TidbMonitor。当需要从 Thanos Query 增加、更新或者下线 Monitor Store 时,需要更新 Thanos Query 组件的命令参数 --store,滚动更新 Thanos Query 组件。

spec:
 containers:
   - args:
       - query
       - --grpc-address=0.0.0.0:10901
       - --http-address=0.0.0.0:9090
       - --log.level=debug
       - --log.format=logfmt
       - --query.replica-label=prometheus_replica
       - --query.replica-label=rule_replica
       - --store=<TidbMonitorName1>-prometheus.<TidbMonitorNs1>:10901
       - --store=<TidbMonitorName2>-prometheus.<TidbMonitorNs2>:10901

配置 Thanos Sidecar 归档存储

注意:

为确保配置成功,必须先创建 S3 bucket。如果你选择 AWS S3,请参考 AWS S3 创建 bucketAWS S3 endpoint 列表

Thanos Sidecar 支持将监控数据同步到 S3 远端存储,配置如下:

TidbMonitor CR 配置如下:

spec:
  thanos:
    baseImage: thanosio/thanos
    version: v0.17.2
    objectStorageConfig:
      key: objectstorage.yaml
      name: thanos-objectstorage

同时需要创建一个 Secret,示例如下:

apiVersion: v1
kind: Secret
metadata:
  name: thanos-objectstorage
type: Opaque
stringData:
  objectstorage.yaml: |
    type: S3
    config:
      bucket: "xxxxxx"
      endpoint: "xxxx"
      region: ""
      access_key: "xxxx"
      insecure: true
      signature_version2: true
      secret_key: "xxxx"
      put_user_metadata: {}
      http_config:
        idle_conn_timeout: 90s
        response_header_timeout: 2m
      trace:
        enable: true
      part_size: 41943040