基于文件的服务发现是最通用的方式。这种方式不需要依赖于任何的平台或者第三方服务。对于Prometheus而言也不可能支持所有的平台或者环境。通过基于文件的服务发现方式下,Prometheus会定时从文件中读取最新的Target信息,可以通过任意的方式将监控Target的信息写入即可。

Prometheus 可以通过JSON或者YAML格式的文件,定义所有的监控目标。下面我是通过yaml的文件格式来进行配置监控。在添加实例的时候添加了一些额外的标签信息。如: env、service、group等,实例中采集到的样本信息将包含这些标签信息,从而可以通过该标签按照环境对数据进行统计。

cat prometheus.yml

  1. global:
  2. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  3. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  4. scrape_timeout: 10s
  5. # scrape_timeout is set to the global default (10s).
  6. alerting:
  7. alertmanagers:
  8. - static_configs:
  9. - targets:
  10. # - alertmanager:9093
  11. rule_files:
  12. # - "first_rules.yml"
  13. # - "second_rules.yml"
  14. scrape_configs:
  15. - job_name: 'kxl_docker'
  16. file_sd_configs:
  17. - files:
  18. - /opt/prometheus/sd_config/docker.yml
  19. refresh_interval: 5s
  20. - job_name: 'kxl_vm'
  21. file_sd_configs:
  22. - files:
  23. - /opt/prometheus/sd_config/vm.yml
  24. refresh_interval: 5s
  25. - job_name: 'kxl_mysql'
  26. file_sd_configs:
  27. - files:
  28. - /opt/prometheus/sd_config/mysql.yml
  29. refresh_interval: 5s

scrape_configs 这里我定义了三组,分别是监控docker、vm、mysql的,每一个组对应一个yml文件。
对应的服务到对应的文件进行增加即可。还可以增加(zk、es、ng、redis)等服务。

创建被扫描的文件

  1. mkdir -p /opt/prometheus/sd_config && cd /opt/prometheus/sd_config
  • docker.yml ```yaml
  • labels: service: docker env: test group: docker targets:

    • 172.21.1.30:8080 ```
  • vm.yml ```yaml

  • labels: env: test group: linux_node service: vm targets:

    • 172.21.1.30:9100
    • 172.21.1.52:9100
    • 172.21.1.52:9100 ```
  • mysql.yaml ```yaml

  • labels: service: mysql env: test group: mysql targets:

    • 172.21.1.30:9104
  • labels: service: mysql env: dev group: mysql targets:

    • 172.21.1.52:9104 ``` 在Prometheus UI的Targets下就可以看到当前定义的yml文件中动态获取到实例信息以及监控任务的采集状态,同时在Labels列下会包含用户添加的自定义标签:
      image.png

image.png

在Prometheus UI的service-discovery下可以看到我们定义的job类型
image.png