Prometheus和zabbix同样也有自动发现功能,不必每添加一次客户端就要重启一次服务,下面介绍一下它的自动发现功能。
1、基于文件的自动发现 修改prometheus.yml文件:
job_name: 'nginx'
file_sd_configs:
- files:
- targets/*.json
refresh_interval: 1m
这里我把之前手动添加的node节点都删掉了,使用自动发现来添加,解释一下这些参数的意义:
file_sd_configs:启用文件发现
targets/*.json监控targets目录下的.json结尾的文件
refresh_interval:检测文件变动的间隔,1m表示1分钟
接下来需要在/usr/local/prometheus/目录下创建targets目录,然后在该目录下新建一个.json文件:
[root@server1 prometheus]# pwd
/usr/local/prometheus
[root@server1 prometheus]# mkdir targets
[root@server1 prometheus]# cd targets/
[root@server1 targets]# touch node.json
[root@server1 targets]# cat node.json
[{
"targets": [
"192.168.6.99:9100"
],
"labels": {
"server": "test"
}
}]
[root@server1 targets]#
配置完成,如果不放心的可以使用promtool检测一下配置文件是否正群,我已经检测过了是没问题的,接下来热加载一下Prometheus就可以了,然后通过web界面可以看到我们配置的基于文件发现的节点:
接下来再修改json文件来添加一台服务器,在不重启prometheus的情况下看是否能自动发现它
[root@server1 targets]# cat node.json
[{
"targets": [
"192.168.6.99:9100",
"192.168.6.11:9100",
"192.168.6.12:9100",
"192.168.6.13:9100",
"192.168.6.14:9100",
"192.168.6.15:9100"
],
"labels": {
"server": "test"
}
}]
[root@server1 targets]#
实际上我是没有这么多机器的,通过web界面来看一下,我设置的检测间隔是1分钟
已经检测到了文件的变化了,虽然这些机器不存在但它仍然会添加进来。
2、基于DNS自动发现 使用这个这个功能要求你的环境中要有dns服务器,如果没有就没办法做。
首先还是修改prometheus.yml文件:
job_name: 'dns-test'
metrics_path: "/metrics"
dns_sd_configs:
- names: ['node1.test.com','node2.test.com']
type: A
port:9100
metrics_path:表示检测数据的路径,如http://192.168.6.99:9100/metrics
dns_sd_configs:使用dns自动发现
names:要检测的主机名称
type:dns记录类型,这里是检测的是A记录
port:目标服务器的端口
接下来需要在dns服务器上添加对应的主机名的A记录解析就可以了,然后热加载prometheus,然后在web界面同样可以看到dns中添加的节点了。