04-prometheus服务的动态发现

一、概述

        目前,我们每增加一个被监控的节点,就需要修改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的服务发现,就学习完毕了;

###############

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心机の之蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值