当前prometheus存在需求
解决思路
基于以上考虑,这里选择了 thanos 做为 prometheus 高可用存储的解决方案,同时整合多个grafana,解决多数据源的查询问题,不影响原有的prometheus配置、告警等。
thanos是根据 prometheus 改编的。使用thanos可以根据部署模型使用或多或少的 prometheus 功能,但 prometheus 始终是使用本地数据收集指标和警报不可或缺的基础。
Component |
Interface |
Port |
Sidecar |
gRPC |
10901 |
Sidecar |
HTTP |
10902 |
Query |
gRPC |
10903 |
Query |
HTTP |
10904 |
Store |
gRPC |
10905 |
Store |
HTTP |
10906 |
Receive |
gRPC (store API) |
10907 |
Receive |
HTTP (remote write API) |
10908 |
Receive |
HTTP |
10909 |
Rule |
gRPC |
10910 |
Rule |
HTTP |
10911 |
Compact |
HTTP |
10912 |
Query Frontend |
HTTP |
10913 |
注:Thanos有两种运行模式,分别为Sidecar和Receiver,Sidercar主动获取Prometheus数据,Receiver被动接收remote-write传送的数据。这里以sidecar为例
主机 |
用途 |
说明 |
172.16.1.100 |
thanos querier、store、compactor |
thanos queriery、store及compactor单独主机部署,每个prometheus 服务上运行sidecar 用于上传对应的数据 |
172.16.1.39 |
prometheus server、thanos sidecar |
|
172.17.1.160 |
prometheus server、thanos sidecar |
thanos各个组件,都是使用同一个二进制文件进行部署,通过不同的命令参数启用不同的功能。当前版本:v0.30.0
# 下载
wget https://github.com/thanos-io/thanos/releases/download/v0.30.0/thanos-0.30.0.linux-amd64.tar.gz
tar -xvf thanos-0.30.0.linux-amd64.tar.gz
mv thanos-0.0.30.0.linux-amd64 /usr/local/thanos-0.0.30.0
3.1.1 external labels
各个Prometheus实例需要配置外部标签识别,Thanos 的目标是跨所有实例聚合数据,因此提供一组一致的外部标签变得至关重要,每个 Prometheus 实例都必须具有一组全局唯一的标识标签,Thanos的数据去重功能依赖external_labels。参考配置如下:
# vim prometheus.yml
global:
# 增加external labels配置,参考如下,标签根据实际定义
external_labels:
region: eu-west
monitor: infrastructure
replica: A
3.1.2 修改启动命令
配置减少本地数据保存时长,减少本地存储需求,如本地设置只保存2小时数据,历史数据可通过store gateway查询。
参数说明:
/usr/local/prometheus/prometheus \
--storage.tsdb.retention.time=2h \
--storage.tsdb.max-block-duration=2h \
--storage.tsdb.min-block-duration=2h \
--web.enable-lifecycle \
--web.enable-admin-api \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus
配置s3配置,以aliyun oss为例,配置如下
# bucket.yml
type: ALIYUNOSS
config:
bucket: "thanos-oss"
endpoint: "oss-cn-shenzhen.aliyuncs.com"
access_key_id: "*** ***"
access_key_secret: "*** ***"
prefix: ""
启动命令
./thanos sidecar --grpc-address=0.0.0.0:10901 \
--http-address=0.0.0.0:10902 \
--tsdb.path=/var/lib/prometheus \
--objstore.config-file=bucket.yml \
--prometheus.url=http://localhost:9090
# 说明
--tsdb.path Prometheus 数据存储路径
--prometheus.url Prometheus地址
--objstore.config-file 设置对象存储配置
--http-address http服务端口
--grpc-address grpc服务端口
./thanos store --data-dir /usr/local/thanos-0.30.0/store \
--objstore.config-file /usr/local/thanos-0.30.0/bucket.yml \
--http-address 0.0.0.0:10905 \
--grpc-address 0.0.0.0:10906
# 说明
--data-dir 配置缓存
--objstore.config-file 设置对象存储配置
--http-address http服务端口
--grpc-address grpc服务端口
服务启动后可通过http://ip:10905查看块信息
部署thanos,需关闭prometheus压缩功能,因此通过compactor对存储中的数据进行压缩,加快查询,Compactor通过扩展标签集来区分不同的Prometheus实例,因此 ,Prometheus labels 必须是唯一。
./thanos compact --data-dir /usr/local/thanos-0.30.0/compactor \
--objstore.config-file /usr/local/thanos-0.30.0/bucket.yml \
--http-address 0.0.0.0:10912 \
--retention.resolution-raw=0d \
--retention.resolution-5m=0d \
--retention.resolution-1h=0d
# 说明
--data-dir 指定用于数据处理的临时工作空间
--objstore.config-file 设置对象存储配置
--http-address http服务端口
--retention.resolution-raw 原始数据的保留时间
--retention.resolution-5m 5m分钟降采样数据的保留时间
--retention.resolution-1h 1小时降采样数据保留时间,其中--retention.resolution-raw 不能小于其他两个时间段
Querier组件提供全局查询界面,兼容prometheus查询语法,提供与Prometheus官方一致的HTTP API,可以当成与prometheus:9090功能一致
启动命令如下
/usr/local/thanos-0.30.0/thanos query --query.replica-label prometheus_server --http-address 0.0.0.0:10903 --grpc-address 0.0.0.0:10904 --store 127.0.0.1:10906 --store 172.16.1.39:10901
# 说明
--query.replica-label 指定数据去重的标记label
--store 指定Sidercar或Store Gateway的连接地址
--http-address http服务端口
服务启动后可通过http://ip:10903查询指标,界面如下
Querier兼容Prometheus的API接口,因此Grafana可直接将其做为Prometheus数据源
到此,就完成了prometheus高可用存储,及统一查询的实现,觉得好用的点个收藏 吧~