Prometheus自动发现
在上篇文章,我们部署并使用了Prometheus与Grafana,那时候的节点监控,是我们手动添加的,我们可以将其理解为静态配置,因为配置好之后需要重启 有时候,我们可能需要下线配置比较低或者比较旧的节点,同时也会添加新的节点,新添加的节点如果需要监控,这个时候我们就需要在配置文件当中定义 定义完成之后可能还需要重启,重启的时候因为先前添加过很多节点,所以这里就会非常的麻烦,那这个时候,我们就可以使用Prometheus的自动发现来解决这个问题 Prometheus支持的自动发现有很多种: 有基于公有云或者私有云的,有基于文件的,基于文件的又分为json文件与yaml文件,也有基于DNS的,而基于DNS的又分为A记录解析与SRV解析 这篇文章,主要就是向大家介绍并配置基于文件来发现节点的,对目前环境而言,基于文件的发现已经够用了,如果不适用当前环境,还可以研究其它类型的自动发现
1)配置客户端
========================================================================================================= #node2的状态 [root@node2 ~]# hostname -I 10.2.3.12 [root@node2 ~]# systemctl status node_exporter | head -7 ● node_exporter.service - node_exporter Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled) Active: active (running) since 五 2020-03-27 14:49:30 CST; 1min 13s ago Main PID: 1075 (node_exporter) CGroup: /system.slice/node_exporter.service └─1075 /usr/local/node_exporter/node_exporter [root@node2 ~]# netstat -anput | grep 9100 tcp6 0 0 :::9100 :::* LISTEN 1075/node_exporter ========================================================================================================= #node3的状态 [root@node3 ~]# hostname -I 10.2.3.13 [root@node3 ~]# systemctl status node_exporter | head -7 ● node_exporter.service - node_exporter Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; enabled; vendor preset: disabled) Active: active (running) since 五 2020-03-27 14:49:30 CST; 1min 13s ago Main PID: 1070 (node_exporter) CGroup: /system.slice/node_exporter.service └─1070 /usr/local/node_exporter/node_exporter [root@node3 ~]# netstat -anput | grep 9100 tcp6 0 0 :::9100 :::* LISTEN 1070/node_exporter =========================================================================================================
2)创建对应的存储目录
[root@prometheus ~]# mkdir /usr/local/prometheus/target [root@prometheus ~]# mkdir /usr/local/prometheus/target/{node,docker}
3)创建json文件并添加节点
提示:这次的环境是基于上次的,而上次的10.2.3.11属于静态配置,所以这里我就不添加它了,只添加10.2.3.12与10.2.3.13这两台节点
[root@prometheus ~]# vim /usr/local/prometheus/target/node/host_status.json [ { "targets": [ "10.2.3.12:9100" ], "labels": { "job": "node2-host-status", "service": "node2" } }, { "targets": [ "10.2.3.13:9100" ], "labels": { "job": "node3-host-status", "service": "node3" } } ]
4)修改Prometheus的配置文件
提示:下面为我定义好之后的内容,因为是第一次引用,所以定义完成之后,需要重启一下,如果后续再添加节点,则直接写入json文件即可,无需重启Prometheus服务
[root@prometheus ~]# vim /usr/local/prometheus/conf/prometheus.yml global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: rule_files: scrape_configs: - job_name: 'prometheus-server' static_configs: - targets: ['10.2.3.11:9090'] labels: instance: 10.2.3.11:9090 service: prometheus - job_name: 'host-status' file_sd_configs: - files: - "/usr/local/prometheus/target/node/host_status.json" refresh_interval: 6s [root@prometheus ~]# systemctl restart prometheus
下面为新参数的注解:
第一项: 指定任务名称,这里我们可以做一个统一,因为在json文件当中的job,可以将其覆盖 比如说,将监控主机状态的任务,任务名字定义为host-status,现在假设后期要上线一批MySQL服务器,这个时候我们可以再创建一个任务,任务名字定义为mysql_db,就这样以此类推即可 第二项: 在上篇文章的配置文件定义,我们一直是基于static_configs来做的,也就是静态配置,这个静态配置定义好之后,需要重启,所以就非常麻烦 而这个file_sd_configs是基于文件来发现节点的,我们也可以将其理解为动态的,下面接的是json文件的存储路径,这个文件我们需要提前将其定义好 第三项: 在使用基于文件来发现节点的时候,Prometheus默认每5m重新读取一次文件内容,这个时间可能有点长,所以refresh_interval这个参数就可以很好的为我们定义刷新间隔,比如我这里为6秒
5)验证Prometheus的自动发现
提示:这里不用做任何操作,只需等待即可,等待的时间由Prometheus配置文件当中的refresh_interval参数来决定,时间到了,刷新Web界面,即可看到新添加的节点
【只是为了打发时间】