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界面,即可看到新添加的节点

【只是为了打发时间】  

猜你喜欢

转载自www.cnblogs.com/lvthinks/p/12582331.html