MENU

Prometheus+Grafana(三)Prometheus+thanos集群搭建部署

July 22, 2021 • Read: 619 • 默认分类

一、环境介绍

thanos 是无侵入的,只是上层套件,需要部署prometheus,可以是pod也可以是主机部署,取决于你的运行环境,本次环境是在K8S集群外。

1. IP分布

IP-主机名操作系统用途
192.168.0.25-master1Centos 7.6prometheus+thanos+alertmanager+grafana
192.168.0.26-master2Centos 7.6prometheus+thanos+alertmanager
192.168.0.27-master3Centos 7.6prometheus+thanos+alertmanager

2. 所需软件及版本

软件名称版本
prometheusprometheus-2.26.0
thanosthanos-0.19.0
node_exporternode_exporter-1.1.2
alertmanageralertmanager-0.21.0
grafanagrafana-7.5.4

3. 官网下载地址

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

  1. 启动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

  1. 启动node_exporter

# nohup ./node_exporter &

  1. 使用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

  1. 使用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

  1. 查看端口

# ss -anplt 

  1. 访问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即可。

验证有数据:

- - - The END - - -
  • 文章作者:谭先生
  • 版权所有:文章转载时,注明出处即可!
  • 本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!
  • Last Modified: July 27, 2021
    Archives QR Code Tip
    QR Code for this page
    Tipping QR Code
    阅读:619