一、概述
目前,我们每增加一个被监控的节点,就需要修改prometheus的配置文件,然后重新加载prometheus服务,这种方式比较繁琐,每次新增、删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构;
所以prometheus就提供了这种问题的解决方案,方案有两种,基于文档的自动发现和基于网络的自动发现。
二、基于文档的自动发现
1,修改prometheus的配置文件
[root@prometheus-server31 ~]# cat /prometheus/soft/prometheus/prometheus.yml
#通用设置
global:
#抓取监控的间隔时间,多长时间获取一次数据(生产环境,建议15-30s);
scrape_interval: 3s
#多久读一次规则
evaluation_interval: 15s#先不解释,之后会讲
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093#先不讲,之后会讲
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"#被监控的配置
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
#另起一个job名称,被监控的主体自定义名称
- job_name: "node-exporter01"
#基于文档自动发现
file_sd_configs:
#文档的地址路径
- files:
#- /prometheus/soft/prometheus/file-sd.json
- /prometheus/soft/prometheus/file-sd.yaml
2,重新加载prometheus服务
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
3,编辑自动发现文档
[root@prometheus-server31 ~]# vim /prometheus/soft/prometheus/file-sd.yaml
- targets:
- '10.0.0.41:9100'
labels:
xinjizhiwa: prometheus-learn
office: www.xinjizhiwa.com
浏览器刷新查看
4,重新编辑自动发现文档,验证是否自动更新
· yaml文件写法
[root@prometheus-server31 ~]# vim /prometheus/soft/prometheus/file-sd.yaml
- targets:
- '10.0.0.41:9100'
- '10.0.0.42:9100'
labels:
xinjizhiwa: prometheus-learn
office: www.xinjizhiwa.com
· json文件写法
[root@prometheus-server31 ~]# vim /prometheus/soft/prometheus/file-sd.yaml
[
{
"targets":["10.0.0.41:9100","10.0.0.42:9100"],
"lables":{
"xinjizhiwa":"prometheus-learn","office":"wwwxinjizhiwa.com"
}
}
]
浏览器刷新,看是否监控到修改后的自动发现列表
5,小结
有了文档的自动发现,那么我们以后就不需要再修改prometheus的配置文件了,更不需要重新加载prometheus服务了,是不是方便了很多呀!
那么有没有更方便的方式呐?那么接下来,我们学习下基于网络的自动发现。
三、基于consul网络集群自动发现
搭建一个consul的网络集群,让被监控节点全部加入到网络集群中,然后配置prometheus监控地址为这个网络集群,日后,只要有被监控节点加入到这个网络集群中,prometheus就可以自动的发现这些节点,刷新被监控列表;
1,搭建consul网络集群
随便准备3台机器,用来搭建consul网络集群,本次学习,由于环境限制,我们就从使用虚拟机上选择就行,日后生产环境,需要单独拿出来节点服务器进行单独的配置更好;
官网地址参考链接:Consul by HashiCorp
· 下载consul工具
下载方式:
wget https://releases.hashicorp.com/consul/1.15.4/consul_1.15.4_linux_amd64.zip
本次学习,同样给大家准备了安装包,在百度云盘;
链接:https://pan.baidu.com/s/1qaIutR6qzmJbz72yWy3t_A?pwd=bppk
提取码:bppk
· 上传解压软件包
本次使用31、71、41作为consul集群的搭建节点;
rz -E
ll
-rw-r--r-- 1 root root 60030076 Nov 8 01:42 consul_1.16.1_linux_amd64.zip
解压到全局命令下;
unzip consul_1.16.1_linux_amd64.zip -d /usr/local/bin
· 运行consul服务
1,服务端创建集群
本次学习,我们拿31服务器节点当做consul集群的服务端;
[root@prometheus-server31 consul]# consul agent -server -bootstrap -bind=10.0.0.31 -data-dir=/consul -client=10.0.0.31 -ui
也可以查看下端口8500有没有开启~
浏览器访问,可以看到,只有31一个节点;
10.0.0.31:8500
此时集群服务端已经启动。
2,consul客户端加入集群
[root@grafana71 consul]# consul agent -bind=10.0.0.71 -data-dir=/consul -client=10.0.0.71 -ui -retry-join=10.0.0.31
[root@prometheus-node41 consul]# consul agent -bind=10.0.0.41 -data-dir=/consul -client=10.0.0.41 -ui -retry-join=10.0.0.31
3,查看浏览器consul地址
此时,consul集群搭建完成;
至此,consul网络集群服务搭建成功!~
2,配置prometheus配置文件
目的是让prometheus去consul网络中抓取被监控的节点;
[root@prometheus-server31 ~]# cat /prometheus/soft/prometheus/prometheus.yml
#通用设置
global:
#抓取监控的间隔时间,多长时间获取一次数据(生产环境,建议15-30s);
scrape_interval: 3s
#多久读一次规则
evaluation_interval: 15s#先不解释,之后会讲
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093#先不讲,之后会讲
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"#被监控的配置
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
#另起一个job名称,被监控的主体自定义名称
- job_name: "node-exporter01"
#基于consul服务自动发现
consul_sd_configs:
#指定consul的服务器地址,若不指定,默认“localhost:8500”
- server: 10.0.0.31:8500
- server: 10.0.0.71:8500
- server: 10.0.0.41:8500
relabel_configs:
#匹配consul的源标签字段,表示服务的名称
- source_labels: [__meta_consul_service]
# 指定源标签的正则表达式,若不定义,默认值为"(.*)"
regex: consul
# 执行动作为删除,默认值为"replace",有效值: replace, keep, and drop
action: drop
[root@prometheus-server31 ~]# curl -X POST http://10.0.0.31:9090/-/reload
3,被监控节点加入consul服务
· 被监控节点41加入
[root@prometheus-node41 ~]# curl -X PUT -d '{"id":"prometheus-node41","name":"prometheus-node41","address":"10.0.0.41","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.41:9100","interval":"5m"}]}' http://10.0.0.31:8500/v1/agent/service/register
· consul集群页面查看
41加入成功;
· 被监控节点42加入
[root@prometheus-node42 node_exporter]# curl -X PUT -d '{"id":"prometheus-node42","name":"prometheus-node42","address":"10.0.0.42","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.42:9100","interval":"5m"}]}' http://10.0.0.31:8500/v1/agent/service/register
· consul集群页面查看
42加入成功
4,prometheus页面查看
查看是否监控到41和42节点
5,拓展:节点下线consul服务
举个花生/栗子:节点41下线,不让prometheus监控了;
注意:
我们consul集群中有3台集群,31、41、71,当被监控节点加入consul时选择哪个集群节点加入的,那么退出集群时也需要指定加入时的节点;
加入指定的31退出也必须指定31.
curl -X PUT http://10.0.0.31:8500/v1/agent/service/deregister/prometheus-node41
四、总结
构建prometheus基于consul局域网络监控自动发现节点的步骤;
1,构建consul局域网络集群;
2,被监控节点“加入”consul集群;
3,修改prometheus配置文件,指定consul服务进行监控;
就此,成功了;
###############
至此,prometheus的服务发现,就学习完毕了;
###############