所谓的服务发现指的是Prometheus server发现监控目标的一种方式。
服务发现可以分为静态配置和动态配置两种发现策略。
静态配置:
每次修改Prometheus的配置文件都需要热加载或重启Prometheus服务。
动态配置:
一次配置后,可以基于该动态配置实现自动发现监控目标,在这个过程中无需重启或热加载Prometheus服务。
1 静态发现
scrape_configs:
- job_name: 'static_targets'
static_configs:
- targets: ['host1:9090', 'host2:9090']
2 动态发现
2.1 基于文件的服务发现
参考链接:
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#file_sd_config
1.修改配置文件
[root@prometheus-server31 ~]# vim /cmy/softwares/prometheus-2.53.4.linux-amd64/prometheus.yml
...
- job_name: "cmy-file-sd"
file_sd_configs:
- files:
- /tmp/xixi.json
- /tmp/haha.yaml
2.热记载配置文件
[root@prometheus-server31 ~]# curl -X POST 10.168.10.31:9090/-/reload
[root@prometheus-server31 ~]#
3.修改json格式文件
[root@prometheus-server31 ~]# cat > /tmp/xixi.json <<EOF
[
{
"targets": [ "10.168.10.41:9100" ],
"labels": {
"school": "cmy",
"class": "linux97"
}
}
]
[root@prometheus-server31 ~]#
4.验证是否自动监控目标
http://10.168.10.31:9090/targets?search=
5.再次编写yaml文件
[root@prometheus-server31 ~]# cat > /tmp/haha.yaml <<EOF
- targets:
- '10.168.10.42:9100'
- '10.168.10.43:9100'
labels:
address: ShaHe
ClassRoom: JiaoShi05
[root@prometheus-server31 ~]#
6.验证是否自动监控目标
http://10.168.10.31:9090/targets?search=
2.2 基于consul的服务发现
2.2.1 部署consul集群
- 基于consul的服务发现案例
官方文档:
https://www.consul.io/
https://developer.hashicorp.com/consul/install#linux
1 部署consul集群
1.1 下载consul
wget https://releases.hashicorp.com/consul/1.21.0/consul_1.21.0_linux_amd64.zip
svip:
wget http://192.168.17.253/Resources/Prometheus/softwares/Consul/consul_1.21.0_linux_amd64.zip
1.2 解压consul
unzip consul_1.21.0_linux_amd64.zip -d /usr/local/bin/
1.3 运行consul 集群
服务端43:
consul agent -server -bootstrap -bind=10.168.10.43 -data-dir=/cmy/softwares/consul -client=10.168.10.43 -ui
客户端42:
consul agent -bind=10.168.10.42 -data-dir=/cmy/softwares/consul -client=10.168.10.42 -ui -retry-join=10.168.10.43
客户端41:
consul agent -server -bind=10.168.10.41 -data-dir=/cmy/softwares/consul -client=10.168.10.41 -ui -retry-join=10.168.10.43
1.4 查看各节点的监听端口
ss -ntl | grep 8500
1.5 访问console服务的WebUI
http://10.168.10.43:8500/ui/dc1/nodes
2.2.2 修改prometheus的配置文件
2.使用consul实现自动发现
2.1 修改prometheus的配置文件
[root@prometheus-server31 ~]# vim /cmy/softwares/prometheus-2.53.4.linux-amd64/prometheus.yml
...
- job_name: "cmy-consul-seriver-discovery"
# 配置基于consul的服务发现
consul_sd_configs:
# 指定consul的服务器地址,若不指定,则默认值为"localhost:8500".
- server: 10.168.10.43:8500
- server: 10.168.10.42:8500
- server: 10.168.10.41:8500
relabel_configs:
# 匹配consul的源标签字段,表示服务名称
- source_labels: [__meta_consul_service]
# 指定源标签的正则表达式,若不定义,默认值为"(.*)"
regex: consul
# 执行动作为删除,默认值为"replace",有效值有多种
# https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_action
action: drop
2.2 检查配置文件是否正确
[root@prometheus-server31 ~]# cd /cmy/softwares/prometheus-2.53.4.linux-amd64/
[root@prometheus-server31 prometheus-2.53.4.linux-amd64]#
[root@prometheus-server31 prometheus-2.53.4.linux-amd64]# ./promtool check config ./prometheus.yml
Checking ./prometheus.yml
SUCCESS: ./prometheus.yml is valid prometheus config file syntax
[root@prometheus-server31 prometheus-2.53.4.linux-amd64]#
2.3 重新加载配置
[root@prometheus-server31 ~]# curl -X POST http://10.168.10.31:9090/-/reload
[root@prometheus-server31 ~]#
2.2.3 注册服务到consul集群
2.4.被监控节点注册到console集群
2.4.1 注册节点
[root@grafana71 ~]# curl -X PUT -d '{"id":"prometheus-node42","name":"cmy-prometheus-node42","address":"10.168.10.42","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.168.10.42:9100","interval":"5m"}]}' http://10.168.10.43:8500/v1/agent/service/register
[root@grafana71 ~]#
2.4.2 注销节点
[root@grafana71 ~]# curl -X PUT http://10.168.10.43:8500/v1/agent/service/deregister/prometheus-node42
TODO---> 目前有个坑
你注册时找得哪个节点,那么注销时也要找这个节点注销,待解决...