找回密码
 立即注册
首页 业界区 业界 深入浅出--从零开始建设k8s监控之thanos(六) ...

深入浅出--从零开始建设k8s监控之thanos(六)

蟠鲤 2025-9-26 11:33:58
前言

书接上文,目前环境已经做好了水平拆分,是这个样子的
1.png

本文使用thanos对这些prometheus进行数据汇聚,并且详细讨论一下thanos
环境准备

组件版本操作系统Ubuntu 22.04.4 LTSdocker24.0.7thanos0.36.1thanos概述

thanos主要有4个组件

  • receive:独立部署,提供了数据写入的api,prometheus通过这个api把数据推送到receive的对象存储
  • sidecar:与prometheus部署在一起,成为prometheus的sidecar,负责把prometheus本地的数据上传至对象存储当中
  • query:独立部署,是一个兼容了prometheus的查询组件,汇总了来自不同来源的查询结果,并且可以从Sidecar和Store中读取数据
  • store:独立部署,提供了对象数据存储功能,并且提供相关的api,query通过该api查询历史数据
thanos有两种工作模式,receive与sidecar
receive模式

Receive 是一个可以接收来自 Prometheus 远程写入的数据的组件,主要用于高可用的集群环境中。它能够处理来自多个 Prometheus 实例的写入请求
2.png

1. 部署thanos receive
  1. ▶ mkdir -p data && chmod 777 data
  2. ▶ docker run -d --net=host \
  3.   --name thanos-receive \
  4.   -v "./data:/data" \
  5.   registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
  6.   receive \
  7.     --grpc-address 0.0.0.0:10907 \
  8.     --http-address 0.0.0.0:10909 \
  9.     --receive.replication-factor 1 \
  10.     --label "receive_cluster="wilson-test"" \
  11.     --remote-write.address 0.0.0.0:10908
复制代码
2. 改造prometheus

分别对3个prometheus进行改造,分别修改其configmap

  • 负责采集k8s监控数据
  1. ...
  2.     scrape_configs:
  3. ...
  4.     remote_write:
  5.       - url: "http://10.22.11.156:10908/api/v1/receive"
  6.         write_relabel_configs:
  7.           - action: replace
  8.             source_labels: []
  9.             target_label: from
  10.             replacement: "prometheus-k8s"
复制代码

  • 负责采集node监控数据
  1. ...
  2.     scrape_configs:
  3. ...
  4.     remote_write:
  5.       - url: "http://10.22.11.156:10908/api/v1/receive"
  6.         write_relabel_configs:
  7.           - action: replace
  8.             source_labels: []
  9.             target_label: from
  10.             replacement: "prometheus-node"
复制代码

  • 负责采集pushgateway监控数据
  1. ...
  2.     scrape_configs:
  3. ...
  4.     remote_write:
  5.       - url: "http://10.22.11.156:10908/api/v1/receive"
  6.         write_relabel_configs:
  7.           - action: replace
  8.             source_labels: []
  9.             target_label: from
  10.             replacement: "prometheus-pushgateway"
复制代码
3. 部署thanos query
  1. docker run -d --net=host \
  2.   --name thanos-query \
  3.   registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
  4.   query \
  5.     --http-address "0.0.0.0:39090" \
  6.     --grpc-address "0.0.0.0:39091" \
  7.     --store "127.0.0.1:10907"
复制代码
登录thanos-query提供的web界面http://127.0.0.1:39090/,可以看到3个prometheus节点的数据都已汇聚,并且已经标注了来源,from标签
4. 部署对象存储 minio

目前我们的数据还是存储在receive的本地磁盘上的,为了长期保留数据,将其推送至自建的对象存储当中
3.png

创建minio
  1. docker run -d --name minio --net host \
  2.   -e "MINIO_ACCESS_KEY=minioadmin" \
  3.   -e "MINIO_SECRET_KEY=minioadmin" \
  4.   -v ./data:/data \
  5.   -v ./config:/root/.minio \
  6.   registry.cn-beijing.aliyuncs.com/wilsonchai/minio:RELEASE.2024-10-13T13-34-11Z \
  7.   server /data --console-address ":9000" -address ":9090"
复制代码
通过用户名密码登录web页面http://127.0.0.1:9000/,然后创建bucket,再创建access key
回到thanos,创建bucket.yml文件
  1. type: S3
  2. config:
  3.   bucket: "wilson-test"
  4.   endpoint: "127.0.0.1:9090"
  5.   access_key: "zzUrkBzyqcCDXySsMLlS"
  6.   secret_key: "nWCcztESnxnUZIKSKsELGEFdg6l6fjzhtqkARJB8"
  7.   insecure: true
复制代码
最后重建thanos receive
  1. docker run -d --net=host \
  2.   --name thanos-receive \
  3.   -v ./bucket.yml:/etc/thanos/bucket.yml \
  4.   -v "./data:/data" \
  5.   registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
  6.   receive \
  7.     --grpc-address 0.0.0.0:10907 \
  8.     --http-address 0.0.0.0:10909 \
  9.     --objstore.config-file=/etc/thanos/bucket.yml \
  10.     --tsdb.retention=2d \
  11.     --label "receive_cluster="wilson-test"" \
  12.     --remote-write.address 0.0.0.0:10908
复制代码
默认情况下每个2小时,thanos就会往对象存储当中推送数据,这个时间可以调整,只需要调整以下参数即可
  1.     --tsdb.min-block-duration=10m \
  2.     --tsdb.max-block-duration=10m \
复制代码
检查minio的控制台,检查是否成功上传
4.png

5. 部署thanos-store,直接读取对象存储

store gateway就是简单的去读取对象存储当中的数据,通过 api暴露给thanos-query,thanos-query调用store api然后获取数据,这样就可以直接读取对象存储的数据了
5.png

部署store
  1. docker run -d --net=host \
  2.   --name thanos-store \
  3.   -v "./data-store:/data" \
  4.   -v ./bucket.yml:/etc/thanos/bucket.yml \
  5.   registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
  6.   store \
  7.     --objstore.config-file "/etc/thanos/bucket.yml"
复制代码
这里的bucket.yaml,还是沿用了上面的bucket.yaml,指向同样的对象存储
调整thanos-query的配置,新增thanos-store的地址
  1. docker run -d --net=host \
  2.   --name thanos-query \
  3.   registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
  4.   query \
  5.     --http-address "0.0.0.0:39090" \
  6.     --grpc-address "0.0.0.0:39091" \
  7.     --store "127.0.0.1:10907" \    --store "127.0.0.1:10901"
复制代码
127.0.0.1:10901就是新增的store的grpc地址,添加完毕后,检查thanos-query的web页面
6.png

thanos-query的数据源来自两个地方,一个是receive,一个是store,并且thanos-query有自动去重的功能,真牛皮!
6. 小结


  • 以上就是receive模式的基本使用方法,在receive模式中,使用了receive、query、store等组件,并且展示了它们之间如何协调合作
  • 上述演示的对象存储,是自建的minio,在实际工作中,可以使用云厂商的对象存储相互配合,易于管理
联系我


  • 联系我,做深入的交流
    7.bmp

至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册