Prometheus动态发现

概述

  • 目前,我们每增加一个被监控的节点,就需要修改Prometheus的配置文件,然后重新加载Prometheus服务,这种方式比较繁琐,每次新增、 删除被监控节点都需要重新操作一遍,不适合生产环境的大规模监控架构;
  • 所以Prometheus就提供了这种问题的解决方案,方案有两种,基于文档的自动发现和基于网络的自动发现。

资源列表

操作系统配置主机名IP所需软件
CentOS 7.92C4Gprometheus192.168.93.101prometheus-2.37.8.linux-amd64.tar.gz
CentOS 7.92C4Gnode-1192.168.93.102node_exporter-1.6.1.linux-amd64.tar.gz
consul_1.16.1_linux_amd64.zip
CentOS 7.92C4Gnode-2192.168.93.103node_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
  • 再次进行查看
    在这里插入图片描述
    在这里插入图片描述
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐