1 thanos集群信息
1.1 集群架构
我们在上面的两个Prometheus的节点服务器中部署Sidercar,用于获取监控数据。同时,配置历史数据写入到对象存储中进行持久化保存。部署一个Store Gateway对接对象存储,而Compactor组件会定时对存储中数据进行压缩索引及降采样操作。
Querier做为面向用户的组件,对接Sidercar和Store Gateway获取数据并进行展示。
1.2 thanos常用端口
1.3 环境规划
主机 | 组件 |
192.168.137.128 | sidecar、store |
192.168.137.130 | store、query、compactor、rule |
192.168.137.131 | sidecar、store |
2 组件部署
2.1 环境准备
1、软件包下载
Thanos虽然有多个功能组件,但都是使用同一个二进制文件进行部署,通过不同的启动命令启用不同的功能,非常方便
#下载地址
https:///thanos-io/thanos/releases
wget https:///thanos-io/thanos/releases/download/v0.36.1/thanos-0.36.1.linux-amd64.tar.gz
2 thanos解压安装
tar -xf thanos-0.36.1.linux-amd64.tar.gz -C /app/module/
mv thanos-0.36.1.linux-amd64 thanos
3 创建对象存储配置文件
vim /app/module/thanos/bucket_config.yaml
type: s3
config:
bucket: jinan
endpoint: 192.168.137.130:19000
access_key: yf3AAGALecQWeP5Hg0wm
secret_key: MmWva9Lg1wrK8MESFTn259OyeozYr4he6YsCUafd
insecure: true
2.2 thanos sidecar部署
Sidercar为Thanos的关键组件,通过Sidercar实现了与Prometheus的无缝集成。Sidercar对Prometheus的实例几乎没有任何影响,Prometheus依然做为一个独立的实例运行,你不需要对其配置进行修改。
Sidercar提供了一个数据API,用于我们查询Prometheus中的指标数据,同时默认会将超过两个小时的数据上传到对象存储 ,进行备份保存。
Sidercar组件必须与Prometheus运行在同一台机器或同一个Kubernetes Pod中,启动命令如下所示:
1、创建配置文件
#所有安装了Prometheus的服务器都需要进行部署
vim /usr/lib/systemd/system/thanos_sidecar.service
[Unit]
Description=Thanos-Sidecar
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/app/module/thanos/thanos sidecar \
--tsdb.path=/app/module/prometheus/data \
--grpc-address=0.0.0.0:10901 \
--http-address=0.0.0.0:10902 \
--reloader.config-file=/app/module/prometheus/prometheus.yml \
--prometheus.url=http://localhost:9090 \
--objstore.config-file=/app/module/thanos/bucket_config.yaml \
--log.level=info \
--log.format=json
[Install]
WantedBy=multi-user.target
--tsdb.path 用于指定Prometheus 数据存储路径;
--prometheus.url 指定Prometheus访问地址;
--objstore.config-file 设置上传数据的对象存储信息;
--http-address 配置http端口,用于提供Sidercar的metrics信息;
--grpc-address 配置grpc端口,用于与其他Thanos组件通信;
2、启动服务
systemctl daemon-reload
systemctl start thanos_sidecar
systemctl status -l thanos_sidecar
2.3 thanos store部署
当Sidercar把监控数据备份到对象存储后,我们只需要在Prometheus中保留短期的数据,如数个小时。这样可以减少Prometheus的压力,也可用于应付大部分的查询 。当需要查询历史数据时,我们可以通过Store Gateway来查询对象存储中保存的数据。
Store Gateway 主要与对象存储交互,从对象存储获取已经保存的数据。Store Gateway实现与Sidecar一样的数据api,Querier组件可以从Store Gateway 查询历史数据。Store Gateway支持横向扩展,可配置多个Store Gateway拉取多个对象存储数据。
1、创建数据目录
mkdir /app/module/thanos/thanos_store
#--data-dir=/app/module/thanos/thanos_store
本地数据目录,用于缓存目的(index-header、in-mem缓存项和meta.json)。如果删除,没有数据将会丢失,只是存储将不得不重建缓存。
2、创建配置文件
vim /usr/lib/systemd/system/thanos_store.service
[Unit]
Description=Thanos-Store
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
Type=simple
LimitNOFILE=262144
Restart=on-failure
RestartSec=5s
ExecStart=/app/module/thanos/thanos store \
--grpc-address=0.0.0.0:10905 \
--http-address=0.0.0.0:10906 \
--data-dir=/app/module/thanos/thanos_store \
--objstore.config-file=/app/module/thanos/bucket_config.yaml \
--log.level=info \
--log.format=json
[Install]
WantedBy=multi-user.target
--data-dir 配置缓存目录地址,Store Gateway会在本地磁盘上保留有关所有远程块的少量信息,并使其与存储桶保持同步;
--objstore.config-file 设置对象存储信息,与Sidercar的配置一致;
--http-address 配置http端口,用于提供访问界面和metrics信息;
--grpc-address 配置grpc端口,用于与其他Thanos组件通信。
3、启动服务
systemctl daemon-reload
systemctl start thanos_store
systemctl status -l thanos_store
登录浏览器查看
http://192.168.137.128:10906/loaded
2.4 thanos rule部署
1、创建数据目录
mkdir /app/module/thanos/thanos_rule
2、创建rule目录
mkdir /app/module/thanos/rules
3、创建rule告警规则
vim /app/module/thanos/rules/node_rules.yaml
groups:
- name: "节点宕机"
rules:
- alert: 节点处于Down状态
expr: up{job="node_exporter"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "节点处于Down状态,实例:{{ $labels.instance }}"
description: "{{ $labels.job }} 节点已关闭"
4、创建启动文件
vim /usr/lib/systemd/system/thanos_rule.service
[Unit]
Description=Thanos-rule
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/app/module/thanos/thanos rule \
--data-dir=/app/module/thanos/thanos_rule \
--grpc-address=0.0.0.0:10910 \
--http-address=0.0.0.0:10911 \
--eval-interval=30s \
--rule-file=/app/module/thanos/rules/*rules.yaml \
--alert.query-url=http://0.0.0.0:9090 \
--alertmanagers.url=http://192.168.137.131:9093 \
--query=192.168.137.130:10904 \
--objstore.config-file=/app/module/thanos/bucket_config.yaml \
--label 'rule_replica="A"' \
--log.format=json \
--log.level=info
[Install]
WantedBy=multi-user.target
--alert.query-url设置为Prometheus服务url
--alertmanagers.url设置为alertmanager服务端口,可以设置多个--alertmanagers.url
--query设置为query模块的http服务端口,可以设置多个--alert.query-url
--label对于不同的rule实例打标签
5、启动服务
systemctl daemon-reload
systemctl start thanos_rule
systemctl status -l thanos_rule
触发报警
Alertmanager告警消息
2.5 thanos query部署
前面我们已经配置好Sidercar和Store Gateway组件,接下来我们为Thanos配置一个全局查询界面,即Querier组件。Querier连接Sidercar后,会根据给定的PromQL查询自动检测需要联系哪些Prometheus服务器,当要查询历史数据时,则是通过Store Gateway查询对象存储内容。
Querier还提供与Prometheus官方一致的HTTP API,可以接入Grafana进行监控展示,并支持PromQL语法。
1、创建配置文件
vim /usr/lib/systemd/system/thanos_query.service
[Unit]
Description=Thanos-Qurey
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/app/module/thanos/thanos query \
--grpc-address=0.0.0.0:10903 \
--http-address=0.0.0.0:10904 \
--query.replica-label "replica" \
--query.replica-label "region" \
--query.auto-downsampling \
--endpoint=192.168.137.128:10901 \
--endpoint=192.168.137.131:10901 \
--endpoint=192.168.137.128:10905 \
--endpoint=192.168.137.130:10905 \
--endpoint=192.168.137.131:10905 \
--endpoint=192.168.137.130:10910 \
--log.level=info \
--log.format=json
[Install]
WantedBy=multi-user.target
--query.replica-label 指定重复数据删除的标记label,query在查询数据时,将根据此label评估是否重复数据;
--http-address 指定Querier的UI界面访问地址;
--endpoint 用于指定Sidercar、Store Gateway、rule、Receiver的连接地址
2、启动服务
systemctl daemon-reload
systemctl start thanos_query
systemctl status -l thanos_query
endpoint可以配置那些gRPC
官网信息由于Querier的“后端”是任何实现gRPC StoreAPI的东西,我们可以从任意数量的不同存储中聚合数据,例如:Sidecar、Store、Ruler、Receiver等等
页面访问
“Use Deduplication”项默认已勾选,Querier会根据指定的扩展标签进行数据去重,这保证了在用户层面不会因为高可用模式而出现重复数据的问题。
去掉勾选,显示增加了region和replica标签
“Use Partial Response”选项用于允许部分响应的情况,这要求用户在一致性与可用性之间做选择。当某个store出现故障而无法响应时,此时是否还需要返回其他正常store的数据。如果对可用性要求更高的场景,可以勾选此项。
2.6 thanos compactor部署
在默认情况下,Prometheus会定期压缩旧数据以提升查询效率
Compactor会为以下数据进行降采样操作,降采样有利于对大时间范围的查询提供快速获取结果的能力:
为大于 40 小时 (2d, 2w) 的块创建 5m 降采样;
为大于 10 天 (2w) 的块创建 1 小时降采样。
同时,Compactor也将对索引进行压缩,包括将来自同个Prometheus实例的多个块压缩为一个,这有利于对提升数据的查询效率。Compactor通过扩展标签集来区分不同的Prometheus实例,所以,在Thanos集群中不同实例的Prometheus 扩展标签集必须是唯一的,否则会导致Compactor出现错误。
#因为使用的minio存储数据,所以只启动一个实例即可,如果使用本地磁盘存储数据,需要每个store节点都部署一个compactor
1、创建数据目录
mkdir -p /app/module/thanos/thanos_compact
2、创建配置文件
vim /usr/lib/systemd/system/thanos_compact.service
[Unit]
Description=Thanos-Compact
Wants=network-online.target
After=network-online.target prometheus.service
[Service]
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/app/module/thanos/thanos compact \
--wait \
--http-address=0.0.0.0:10912 \
--debug.accept-malformed-index \
--data-dir=/app/module/thanos/thanos_compact \
--objstore.config-file=/app/module/thanos/bucket_config.yaml \
--retention.resolution-raw=90d \
--retention.resolution-5m=180d \
--retention.resolution-1h=360d
[Install]
WantedBy=multi-user.target
--data-dir 指定用于数据处理的临时工作空间,为保证Compactor正常工作,建议提供100-300G的容量;
--objstore.config-file 指定对象存储的信息,Thanos的其他组件如Sdiercar、Store Gateway只需要提供对象存储的读写权限即可,但Compactor还需要提供删除权限,因为它会对数据进行操作;
--http-address compact的http地址,用于提供metrics指标。
3、启动服务
systemctl daemon-reload
systemctl start thanos_compact
systemctl status -l thanos_compact
目前,Thanos还不支持多个Compactor对单个存储对象存储并发进行操作的功能,必须以单实例的方式运行compact。在任务完成后,Compactor的程序会退出,我们可将其做为定时任务的方式来运行。如果需要程序保持运行,可使用--wait和--wait-interval 参数实现。
由于对象存储本身对于数据是永久保留,如果希望只保留指定时间内的数据,可以通过配置Compactor的--retention.resolution-raw 、--retention.resolution-5m 和 --retention.resolution-1h 三个参数来实现,分别为原始数据的保留时间、5m分钟降采样数据的保留时间和1小时降采样数据保留时间,其中--retention.resolution-raw 不能小于其他两个时间段,否则会影响compact的降采样操作。
2.7 thanos receiver附录
3 thanos配置grafana
Querier兼容Prometheus的API接口,因此,Grafana可直接添加Querier组件地址做为Prometheus数据源。