前言

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

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

环境准备

组件 版本
操作系统 Ubuntu 22.04.4 LTS
docker 24.0.7
thanos 0.36.1

thanos概述

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 实例的写入请求

1. 部署thanos receive

 mkdir -p data && chmod 777 data
docker run -d --net=host \
--name thanos-receive \
-v "./data:/data" \
registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
receive \
--grpc-address 0.0.0.0:10907 \
--http-address 0.0.0.0:10909 \
--receive.replication-factor 1 \
--label "receive_cluster=\"wilson-test\"" \
--remote-write.address 0.0.0.0:10908

2. 改造prometheus

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

  • 负责采集k8s监控数据
...
scrape_configs:
...
remote_write:
- url: "http://10.22.11.156:10908/api/v1/receive"
write_relabel_configs:
- action: replace
source_labels: []
target_label: from
replacement: "prometheus-k8s"
  • 负责采集node监控数据
...
scrape_configs:
...
remote_write:
- url: "http://10.22.11.156:10908/api/v1/receive"
write_relabel_configs:
- action: replace
source_labels: []
target_label: from
replacement: "prometheus-node"
  • 负责采集pushgateway监控数据
...
scrape_configs:
...
remote_write:
- url: "http://10.22.11.156:10908/api/v1/receive"
write_relabel_configs:
- action: replace
source_labels: []
target_label: from
replacement: "prometheus-pushgateway"

3. 部署thanos query

docker run -d --net=host \
--name thanos-query \
registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
query \
--http-address "0.0.0.0:39090" \
--grpc-address "0.0.0.0:39091" \
--store "127.0.0.1:10907"

登录thanos-query提供的web界面http://127.0.0.1:39090/,可以看到3个prometheus节点的数据都已汇聚,并且已经标注了来源,from标签

4. 部署对象存储 minio

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

创建minio

docker run -d --name minio --net host \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-v ./data:/data \
-v ./config:/root/.minio \
registry.cn-beijing.aliyuncs.com/wilsonchai/minio:RELEASE.2024-10-13T13-34-11Z \
server /data --console-address ":9000" -address ":9090"

通过用户名密码登录web页面http://127.0.0.1:9000/,然后创建bucket,再创建access key

回到thanos,创建bucket.yml文件

type: S3
config:
bucket: "wilson-test"
endpoint: "127.0.0.1:9090"
access_key: "zzUrkBzyqcCDXySsMLlS"
secret_key: "nWCcztESnxnUZIKSKsELGEFdg6l6fjzhtqkARJB8"
insecure: true

最后重建thanos receive

docker run -d --net=host \
--name thanos-receive \
-v ./bucket.yml:/etc/thanos/bucket.yml \
-v "./data:/data" \
registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
receive \
--grpc-address 0.0.0.0:10907 \
--http-address 0.0.0.0:10909 \
--objstore.config-file=/etc/thanos/bucket.yml \
--tsdb.retention=2d \
--label "receive_cluster=\"wilson-test\"" \
--remote-write.address 0.0.0.0:10908

默认情况下每个2小时,thanos就会往对象存储当中推送数据,这个时间可以调整,只需要调整以下参数即可

    --tsdb.min-block-duration=10m \
--tsdb.max-block-duration=10m \

检查minio的控制台,检查是否成功上传

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

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

部署store

docker run -d --net=host \
--name thanos-store \
-v "./data-store:/data" \
-v ./bucket.yml:/etc/thanos/bucket.yml \
registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
store \
--objstore.config-file "/etc/thanos/bucket.yml"

这里的bucket.yaml,还是沿用了上面的bucket.yaml,指向同样的对象存储

调整thanos-query的配置,新增thanos-store的地址

docker run -d --net=host \
--name thanos-query \
registry.cn-beijing.aliyuncs.com/wilsonchai/thanos:0.36.1 \
query \
--http-address "0.0.0.0:39090" \
--grpc-address "0.0.0.0:39091" \
--store "127.0.0.1:10907" \
--store "127.0.0.1:10901"

127.0.0.1:10901就是新增的store的grpc地址,添加完毕后,检查thanos-query的web页面

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

6. 小结

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

联系我

  • 联系我,做深入的交流


至此,本文结束

在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

深入浅出--从零开始建设k8s监控之thanos(六)的更多相关文章

  1. [转帖]从零开始入门 K8s:应用编排与管理:Job & DaemonSet

    从零开始入门 K8s:应用编排与管理:Job & DaemonSet https://www.infoq.cn/article/KceOuuS7somCYbfuykRG 陈显鹭 阅读数:193 ...

  2. 从零开始入门 K8s | Kubernetes 存储架构及插件使用

    本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 导读:容器存储是 Kubernetes 系统中提供数据持久化的基础组件,是实现有状态服务的重要保证.Kubern ...

  3. 【高德地图API】从零开始学高德JS API(六)——坐标转换

    原文:[高德地图API]从零开始学高德JS API(六)——坐标转换 摘要:如何从GPS转到谷歌?如何从百度转到高德?这些都是小case.我们还提供,如何将基站cell_id转换为GPS坐标? --- ...

  4. k8s监控api调用

    k8s监控api调用 curl -s --cacert /etc/kubernetes/ssl/ca.pem -basic -u fengjian:fengjian --insecure -X GET ...

  5. 从零开始搭建前端监控系统(三)——实现控制iframe前进后退

    前言 本系列文章旨在讲解如何从零开始搭建前端监控系统. 项目已经开源 项目地址: https://github.com/bombayjs/bombayjs (web sdk) https://gith ...

  6. [转帖]从零开始入门 K8s | 手把手带你理解 etcd

    从零开始入门 K8s | 手把手带你理解 etcd https://zhuanlan.zhihu.com/p/96721097 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 KV 存储系 ...

  7. Kubernetes_从零开始搭建k8s集群(亲测可用)

    一.前言 本文讲述从零开始搭建k8s集群,均使用国内镜像,版本均统一,使用两个虚拟机,一个主节点,一个从节点,保证k8s一次搭建成功. 注意:Kubernetes,简称K8s,是用8代替名字中间的8个 ...

  8. 详细教程丨使用Prometheus和Thanos进行高可用K8S监控

    本文转自Rancher Labs 介 绍 Prometheus高可用的必要性 在过去的几年里,Kubernetes的采用量增长了数倍.很明显,Kubernetes是容器编排的不二选择.与此同时,Pro ...

  9. 从零开始入门 K8s | 可观测性:监控与日志

    作者 | 莫源  阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志 ...

  10. prometheus和metrucs-server (k8s监控)

    资源指标:metrucs-server 自定义指标:prometheus, k8s-prometheus-adapter(转换prometheus数据的格式) 新一代架构: 核心指标流水线:由kube ...

随机推荐

  1. vue3 基础-全局组件和局部组件

    组件和页面的关系可以理解为, 组件是页面的一部分. 形象地理解组件 就和盖房子一样的, 可以将房子粗略拆分3个组件(组成部分) 房顶, 房身, 地基. 同时房顶又可以拆分 ..... 这样在极限的情况 ...

  2. 【FAQ】HarmonyOS SDK 闭源开放能力 —Live View Kit (3)

    1.问题描述: 通过Push Kit创建实况窗之后,再更新实况窗失败,平台查询提示"实况窗端更新失败,通知未创建或已经过期". 解决方案: 通过Push Kit更新实况窗内容的过程 ...

  3. css样式修改-悬浮数字

    代码实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  4. HashMap get和resize源码解析|Java 17

    直奔主题,奉上HashMap中get 函数源码解析: public V get(Object key) { Node<K,V> e; return (e = getNode(hash(ke ...

  5. 【Spring Boot】ActiveMQ 设置访问密码

    Apache ActiveMQ是Apache出品,是最流行的,能力很强的开源消息总线.默认情况下,程序连接ActiveMQ是不需要密码的,为了安装起见,需要设置密码,提高安全性.本文分享如何设置访问A ...

  6. 鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程

    Rainbond V6 国产化部署教程,针对鲲鹏 CPU + 麒麟 V10 的离线环境,手把手教你从环境准备到应用上线,所有依赖包提前打包好,步骤写成傻瓜式操作指南.别说技术团队了,照着文档一步步来, ...

  7. MVVM - Model和ViewModel的创建和配置

    MVVM-Model和ViewModel的创建和配置 本文同时为b站WPF课程的笔记,相关示例代码 简介 MVVM:Model-View-ViewModel,是一种软件架构的模式.通过引入一个中间层V ...

  8. SwanLab入门深度学习:Qwen3大模型指令微调

    一.概述 Qwen3是通义千问团队的开源大语言模型,由阿里云通义实验室研发.以Qwen2作为基座大模型,通过指令微调的方式实现高准确率的文本分类,是学习大语言模型微调的入门任务. 指令微调是一种通过在 ...

  9. android input

    通常,从EditText中获取字符串很简单:    EditText text = findViewById(R.id.textName);    String name = text.getText ...

  10. prometheus表达式常用公式

    1. _over_time() 下面的函数列表允许传入一个区间向量,它们会聚合每个时间序列的范围,并返回一个瞬时向量 avg_over_time(range-vector) : 区间向量内每个度量指标 ...