【云原生监控】Prometheus动态发现
目前,我们每增加一个被监控的节点,就需要修改Prometheus的配置文件,然后重新加载Prometheus服务,这种方式比较繁琐,每次新增、 删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构;所以Prometheus就提供了这种问题的解决方案,方案有两种,基于文档的自动发现和基于网络的自动发现。
·
Prometheus动态发现
文章目录
概述
- 目前,我们每增加一个被监控的节点,就需要修改Prometheus的配置文件,然后重新加载Prometheus服务,这种方式比较繁琐,每次新增、 删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构;
- 所以Prometheus就提供了这种问题的解决方案,方案有两种,基于文档的自动发现和基于网络的自动发现。
资源列表
操作系统 | 配置 | 主机名 | IP | 所需软件 |
---|---|---|---|---|
CentOS 7.9 | 2C4G | prometheus | 192.168.93.101 | prometheus-2.37.8.linux-amd64.tar.gz |
CentOS 7.9 | 2C4G | node-1 | 192.168.93.102 | node_exporter-1.6.1.linux-amd64.tar.gz consul_1.16.1_linux_amd64.zip |
CentOS 7.9 | 2C4G | node-2 | 192.168.93.103 | node_exporter-1.6.1.linux-amd64.tar.gz consul_1.16.1_linux_amd64.zip |
基础环境
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
- 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
- 修改主机名
hostnamectl set-hostname prometheus
hostnamectl set-hostname node-1
hostnamectl set-hostname node-2
一、基于文档的自动发现
- 提前部署每个服务即可,无需进行任何配置
1.1、修改Prometheus的配置文件
# 整体配置文件如下
[root@prometheus ~]# grep -v "#" /usr/local/prometheus/prometheus.yml
global:
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
####################################################
scrape_configs:
file_sd_configs:
- files:
- /usr/local/prometheus/file-sd.yaml # 监控文件地址(里面将会记录要监控的节点IP地址)
####################################################
1.2、重新加载Prometheus服务
[root@prometheus ~]# curl -X POST http://192.168.93.101:9090/-/reload
1.3、编辑自动发现文档
- 自动发现文档文件为热加载文件,保存退出立即生效(秒级),
- 以后就不需要编辑Prometheus文件,和编辑文件后重启服务
[root@prometheus ~]# cat /usr/local/prometheus/file-sd.yaml
- targets: # 要监控的节点(一共监控两个节点)
- "192.168.93.102:9100"
- "192.168.93.103:9100"
labels: # 对监控的节点进行打标签(可随意设置)
wzh01: prometheus-01
wzh02: prometheus-02
1.4、浏览器查看是否监控
二、基于Consul网络集群自动发现
- 搭建一个Consul的网络集群,让被监控节点全部加入到网络集群中,然后配置Prometheus监控地址为这个网络集群,日后,只要有被监控节点加入到这个网络集群中,Prometheus就可以自动的发现这些节点,刷新被监控列表
2.1、搭建Consul网络集群
- 随便准备3台机器,用来搭建Consul网络集群,本次学习,由于环境限制,我们就从使用虚拟机上选择就行,日后胜场环境,需要单独拿出来节点服务器进行单独的配置更好
# 下载Consul工具
wget https://releases.hashicorp.com/consul/1.15.4/consul_1.15.4_linux_amd64.zip
- 解压软件包
# 三台主机都要执行如下操作
yum -y install unzip
unzip consul_1.16.1_linux_amd64.zip -d /usr/local/bin/
2.2、运行Consul服务
- 使用
93.101
服务器节点当作Consul集群的服务端
# 此命令是前台启动
[root@prometheus ~]# consul agent -server -bootstrap -bind=192.168.93.101 -data-dir=/consul -client=192.168.93.101 -ui
2.3、监听端口访问Web页面
-
Consul默认监听
8500
端口 -
访问地址:http://192.168.93.101:8500
[root@prometheus ~]# netstat -anpt | grep 8500
tcp 0 0 192.168.93.101:8500 0.0.0.0:* LISTEN 8549/consul
-
访问Web页面
-
此时集群服务端已经启动
2.4、Consul客户端加入集群
# node1节点加入
[root@node-1 ~]# consul agent -bind=192.168.93.102 -data-dir=/consul -client=192.168.93.102 -ui -retry-join=192.168.93.101
# node2节点加入
[root@node-2 ~]# consul agent -bind=192.168.93.103 -data-dir=/consul -client=192.168.93.103 -ui -retry-join=192.168.93.101
2.5、查看浏览器Consul
- 此时Consul集群搭建完成
三、配置Prometheus配置文件
- 目的是让Prometheus去Consul网络中抓取被监控的节点
[root@prometheus ~]# cat /usr/local/prometheus/prometheus.yml
# 通用设置
global:
scrape_interval: 3s # 抓取监控的间隔时间,多长时间获取依次数据(生产环境,建议15-30s)
evaluation_interval: 15s # 多久读一次规则
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
####################################################
scrape_configs:
- job_name: "prometheus-consul" # job名称,被监控的主体自定义名称
# 基于Consul服务自动发现
consul_sd_configs: # 指定Consul的服务器地址,若不指定,默认"localhost:8500"
- server: 192.168.93.101:8500
- server: 192.168.93.102:8500
- server: 192.168.93.103:8500
relabel_configs:
# 匹配Consul的源标签字段,表示服务的名称
- source_labels: [__meta_consul_service]
# 指定源标签的正则表达式,若不定义,默认值为"(.*)"
regex: consul
action: drop # 指定工作为删除,默认值为"replace",有效值:replace,keep,and drop
####################################################
# 重载Prometheus服务
[root@prometheus ~]# curl -X POST http://192.168.93.101:9090/-/reload
四、被监控节点加入Consul服务
- 被监控节点102加入
[root@node-1 ~]# curl -X PUT -d '{"id":"prometheus-node102","name":"prometheus-node102","address":"192.168.93.102","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://192.168.93.102:9100","interval":"5m"}]}' http://192.168.93.101:8500/v1/agent/service/register
- 被监控节点103加入
[root@node-2 ~]# curl -X PUT -d '{"id":"prometheus-node103","name":"prometheus-node103","address":"192.168.93.103","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://192.168.93.103:9100","interval":"5m"}]}' http://192.168.93.101:8500/v1/agent/service/register
五、Web页面查看
-
Consul集群页面查看
-
查看是否监控到102和103
六、节点下线Consul服务
- 节点102下线,不让Prometheus监控了
- 注意:我们Consul集群中有3台集群分别为101、102、103,当被监控节点加入Consul时选择哪个集群节点加入的,那么退出集群时也需要指定加入时的节点
- 加入指定102退出也必须指定102
[root@node-1 ~]# curl -X PUT http://192.168.93.101:8500/v1/agent/service/deregister/prometheus-node102
- 再次进行查看
更多推荐
已为社区贡献7条内容
所有评论(0)