随着 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 进行查看

prom_filesd

基于 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 自动注册效果

prom_consulsd

自动化监控思路

当有大量服务器需要进行自动化监控,首先需要使用自动化工具批量部署相关 exporter,将部署好的 exporter 所在机器的 ip 和 端口注册到 Consul,Prom 从 Consul 获取 exporter 的 ip 和端口即可

关于 k8s 的服务发现后面会提到。

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0