聚合多个 TiDB 集群的监控数据
本文档介绍如何通过 Thanos 聚合多个 TiDB 集群的监控数据,解决多集群下监控数据的中心化问题。
Thanos 介绍
Thanos 是 Prometheus 高可用的解决方案,用于简化 Prometheus 的可用性保证。详细内容请参考 Thanos 官方文档。
Thanos 提供了跨 Prometheus 的统一查询方案 Thanos Query 组件,可以利用这个功能解决 TiDB 多集群监控数据聚合的问题。
配置 Thanos Query
为每个 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 相同。部署 Thanos Query 组件。
下载 Thanos Query 的部署文件
thanos-query.yaml
:curl -sl -O https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/monitor-with-thanos/thanos-query.yaml
手动修改
thanos-query.yaml
文件中的--store
参数,将basic-prometheus:10901
改为basic-prometheus.${namespace}:10901
。其中,
${namespace}
表示 TidbMonitor 部署的命名空间。执行
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 的监控数据,请进行以下操作:
- 登陆 Grafana。
- 在左侧导航栏中,选择
Configuration
>Data Sources
。 - 添加或修改一个 Prometheus 类型的 DataSource。
- 将 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 创建 bucket 和 AWS 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