一、环境介绍
thanos 是无侵入的,只是上层套件,需要部署prometheus,可以是pod也可以是主机部署,取决于你的运行环境,本次环境是在K8S集群外。
1. IP分布
IP-主机名 | 操作系统 | 用途 |
---|---|---|
192.168.0.25-master1 | Centos 7.6 | prometheus+thanos+alertmanager+grafana |
192.168.0.26-master2 | Centos 7.6 | prometheus+thanos+alertmanager |
192.168.0.27-master3 | Centos 7.6 | prometheus+thanos+alertmanager |
2. 所需软件及版本
软件名称 | 版本 |
---|---|
prometheus | prometheus-2.26.0 |
thanos | thanos-0.19.0 |
node_exporter | node_exporter-1.1.2 |
alertmanager | alertmanager-0.21.0 |
grafana | grafana-7.5.4 |
3. 官网下载地址
prometheus官网地址:
GitHub-thanos:
[repo path="thanos-io/thanos"]
GitHub-minio:
[repo path="minio/mc"]
二、搭建步骤
1. 安装prometheus和node_exporter
# tar -zxvf prometheus-2.26.0.linux-amd64.tar.gz
# tar -zxvf node_exporter-1.1.2.linux-amd64.tar.gz
# mv prometheus-2.26.0.linux-amd64 prometheus
# mv node_exporter-1.1.2.linux-amd64/ node_exporter
2. 修改prometheus配置文件
master1:
# cd prometheus/
# vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
external_labels:
monitor: 'monitor25'
..........
static_configs:
- targets: ['192.168.0.25:19090','192.168.0.26:19090','192.168.0.27:19090']
- job_name: 'node'
static_configs:
- targets: ['192.168.0.25:9100','192.168.0.26:9100','192.168.0.27:9100']
这里需要声明external_labels
,标注你的地域。如果你是多副本运行,需要声明你的副本标识,如 0号,1,2 三个副本采集一模一样的数据,另外2个prometheus就可以同时运行,只是replica值不同而已。这里的配置和官方的 federation差不多
对 Prometheus 的要求:
- 2.2.1 版本以上
- 声明你的 external_labels
- 启用 –web.enable-admin-api
- 启用 –web.enable-lifecycle
master2,3:
master2,3服务器的prometheus.yml的配置文件monitor行修改下
external_labels:
monitor: ‘monitor26’
其他配置与msater1一样即可
3. 启动prometheus和node_exporter
- 启动
Prometheus
# nohup ./prometheus --config.file=prometheus.yml --web.listen-address=0.0.0.0:19090 --storage.tsdb.path="/data/prometheus" --storage.tsdb.retention.time=30d --storage.tsdb.min-block-duration=2h --storage.tsdb.max-block-duration=2h --log.level=info --web.enable-lifecycle --web.enable-admin-api &
premetheus -h 命令行常用参数说明:
--config.file:
指定配置文件路径。--storage.tsdb.path
:指定数据存储路径。--storage.tsdb.retention.time
:数据保留时间。 默认为15d。 如果此标志设置为默认值以外的任何值,则覆盖storage.tsdb.retention。--storage.tsdb.min-block-duration=2h
:在持久化之前数据块的最短保存期。(prometheus 默认 2 小时会生成一个 block,thanos 会把这个 block 上传到对象存储)--storage.tsdb.max-block-duration=<duration>
:在持久化之前数据块的最大保存期(默认为保存期的10%)。--log.level=info
:日志过滤级别(debug,info,warn,error,fatal)。默认为info。--web.enable-lifecycle
#开启热加载配置--web.enable-admin-api
:为管理控制操作启用API端点--storage.tsdb.retention
:不推荐使用此标志,而使用storage.tsdb.retention.time。
PS:
web.enable-lifecycle
一定要开,用于热加载时 reload 你的配置,retention 保留 2 小时
,Prometheus 默认 2 小时会生成一个 block,Thanos 会把这个 block 上传到对象存储。
重启Prometheus可以通过两种热加载方式来操作,一个是直接用kill命令发送HUP信号,一个是开启web.enable-lifecycle选项后使用curl命令
kill -HUP `pidof prometheus`
curl -X POST http://localhost:9090/-/reload
- 启动
node_exporter
# nohup ./node_exporter &
- 使用
systemd
管理Prometheus
服务
创建日志文件:
# mkdir /opt/monitor/prometheus/logs
# touch /opt/monitor/prometheus/logs/prometheus.log
vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
[Service]
ExecStart=/opt/monitor/prometheus/prometheus.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
编写启动脚本:
vim /opt/monitor/prometheus/prometheus.sh
内容如下:
#!/bin/bash
/opt/monitor/prometheus/prometheus --config.file=/opt/monitor/prometheus/prometheus.yml --web.listen-address=0.0.0.0:19090 --storage.tsdb.path="/data/prometheus" --storage.tsdb.retention.time=30d --storage.tsdb.min-block-duration=2h --storage.tsdb.max-block-duration=2h --log.level=info --web.enable-lifecycle --web.enable-admin-api &>> /opt/monitor/prometheus/logs/prometheus.log
增加可执行权限:
chmod +x /opt/monitor/prometheus/prometheus.sh
以后启动prometheus服务方式:
systemctl daemon-reload
systemctl start prometheus
systemctl status prometheus
systemctl enable prometheus
- 使用
systemd
管理node_exporter
服务
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/opt/monitor/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
以后启动node_exporter服务方式:
systemctl daemon-reload
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter
- 查看端口
# ss -anplt
- 访问Prometheus
浏览器访问:http://192.168.0.25.19090/targets
。可看到3个节点
都正常上线,状态为:UP

4. 启动thanos组件
thanos主要使用到sidecar和query,如果需要数据备份至云存储,store组件也得启动。
安装thanos:
# tar -zxvf thanos-0.19.0.linux-amd64.tar.gz
# mv thanos-0.19.0.linux-amd64 thanos
# cd thanos/
启动sidecar组件:
nohup ./thanos sidecar --tsdb.path "/data/prometheus" --prometheus.url "http://localhost:19090" --http-address 0.0.0.0:19191 --grpc-address 0.0.0.0:19091 &
启动query:
nohup ./thanos query --http-address "0.0.0.0:29090" --grpc-address 0.0.0.0:29091 --query.replica-label "monitor" --store "192.168.0.25:19091" --store "192.168.0.26:19091" --store "192.168.0.27:19091" &

当nohup.out日志显示adding new store to query storeset
即表示query已经成功连上sidecar。
同样在另外两台服务器也需要安装thanos。步骤操作相同,sidecar 和query启动命令也一样。
数据验证
此时我们的配置是25、26、27三台服务器同时采集各一份数据,在query启动命令参数中,我们配置的http端口是29090,我们可以打开其中一个queryweb ui

query 页面有两个勾选框,含义是:
- deduplication:是否去重。默认勾选代表去重,同样的数据只会出现一条,否则 replica0 和 1、2 完全相同的数据会查出来 3 条。
- partial response:是否允许部分响应,默认允许,这里有一致性的折中,比如 0、1、2 三副本有一个挂掉或者超时了,查询时就会有一个没有响应,如果允许返回用户剩下的 2 份,数据就没有很强的一致性,但因为一个超时就完全不返回,就丢掉了可用性,因此默认允许部分响应。


如果去掉勾选,则不去重,

大家会发现三台服务器我都启动了query命令,没错,url都可以访问thanos web UI,并且指标数据是一致的
PS:thanos的store组件也是很实用的,备份数据至云存储,Thanos 默认支持谷歌云/AWS 等,
sidecar和store启动命令加个–objstore.config-file "bucket.yml"即可,其中bucket.yml为腾讯云连接的一些参数;
配置如图:
腾讯云:

启动store组件之后,隔一段时间,就会发现数据已经备份至腾讯云上。

谷歌云:
type: GCS
config:
bucket: ""
service_account: ""
5. Grafana
Grafana是一个开源
的度量分析
和可视化系统
,Grafana支持查询普罗米修斯。自Grafana 2.5.0(2015-10-28)以来,包含了Prometheus的Grafana数据源。
部署文档:
https://grafana.com/grafana/download访问地址:
http://IP:3000用户名/密码:
admin/admin # 第一次需要重置密码
配置为系统服务管理:
vi /usr/lib/systemd/system/grafana.service
[Unit]
Description=grafana
[Service]
ExecStart=/opt/monitor/grafana/bin/grafana-server -homepath=/opt/monitor/grafana
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start grafana
# systemctl enable grafana
Grafana只用于展示数据,但这个数据从哪里来?
需要你根据提供数据的服务选择,支持的数据源如下:

Grafana配置thanos数据源
选择Prometheus,只需要指定URL即可。

验证有数据:
