随着 Prom 监控的体量越来越大,每次加入新的监控指标接口,都要手动的在 prometheus.yml
文件中添加内容,每次还要重新加载,维护管理起来也是鸡肋的存在,Prom 有原生支持的监控服务发现
Prom 常见的服务发现分为以下 3 种:
基于文件的服务发现
基于 Consul 的服务发现
基于 Kubernetes 的服务发现
基于文件的服务发现
在 Prom 的配置文件中添加 file_sd_configs
字段配置
$ vim /opt/monitoring/prometheus/prometheus.yml
# 在 scrape_configs: 下添加
- job_name: "file_sd" # 名字可以写一个比较有规则性的
file_sd_configs: # 文件服务发现的配置
- files: ['/opt/monitoring/prometheus/file_sd/*.yml'] # 指定通过哪个文件进行服务发现
refresh_interval: 15s # 每隔多长时间检测一遍文件,自动服务发现全靠这个配置
$ systemctl reload prometheus
编写文件服务发现的内容
$ mkdir /opt/monitoring/prometheus/file_sd
$ cat > /opt/monitoring/prometheus/file_sd/node.yml << EOF
- targets: ['192.168.1.11:9100', '192.168.1.12:9100', '192.168.1.13:9100']
EOF
这种模式我感觉像 ansible 的 playbook 的 task 一样,写一个 main.yml ,剩下的使用 include 的形式。
等待检测文件时长后,进入 prom 的 url 进行查看
基于 Consul 的服务发现
通过使用文件的服务发现可以感觉到,其实只是省去了加载文件的繁琐,手动录入并没有减少多少工作量。
Consul 是个分布式的服务发现和 key/value
存储系统
Prometheus 是通过 Consul 来获取被监控端的 Exporter 的监控数据的,每新起一个服务就会通过配置自动注册到 Consul 中供 Prom 使用
Consul 我不太熟,自己悄悄拿 helm 部署了一个。二进制的部署方式可以参考:Consul 微服务注册
配置 Consul API 到 Exporter 中,自动注册到 Consul
curl -X PUT -d '{"id": "k8s-01","name": "k8s","address": "192.168.1.11","port": 9100,"tags": ["service"],"checks": [{"http": "http://192.168.1.11:9100","interval": "5s"}]}' http://192.168.1.11:32427/v1/agent/service/register
# "name": "k8s" 分组
# "id": "k8s-01" 组内主机名
curl -X PUT -d '{"id": "k8s-02","name": "k8s","address": "192.168.1.12","port": 9100,"tags": ["service"],"checks": [{"http": "http://192.168.1.12:9100","interval": "5s"}]}' http://192.168.1.11:32427/v1/agent/service/register
curl -X PUT -d '{"id": "k8s-03","name": "k8s","address": "192.168.1.13","port": 9100,"tags": ["service"],"checks": [{"http": "http://192.168.1.13:9100","interval": "5s"}]}' http://192.168.1.11:32427/v1/agent/service/register
在 Prom 的配置文件中添加 consul_sd_configs
字段配置
$ vim /opt/monitoring/prometheus/prometheus.yml
# 在 scrape_configs: 下添加
- job_name: "consul_sd"
consul_sd_configs:
- server: 192.168.1.11:32427 # Consul地址
services: ['k8s'] # Consul 服务组
$ systemctl reload prometheus
查看 Prom 界面的 Consul 自动注册效果
自动化监控思路
当有大量服务器需要进行自动化监控,首先需要使用自动化工具批量部署相关 exporter,将部署好的 exporter 所在机器的 ip 和 端口注册到 Consul,Prom 从 Consul 获取 exporter 的 ip 和端口即可
关于 k8s 的服务发现后面会提到。