本文记录Prometheus如何从Consul获取scrape target。
文章目录
- 集成consul
- 1. 启动prometheus,grafana,consul
- 2. 启动node-exporter
- 3. prometheus.yaml添加consul服务地址
- 4. node-exporter注册到consul
- 5. prometheus UI查看从consul获取的服务注册项
- 6. grafana查看node-exporter指标图形
- 1. 加入Datasource
- 2. 导入Dashboard
- 3. 观察dashboard
- 7. 总结
一般情况下,prometheus.yml
配置static_configs
静态配置scrape target。但是在服务动态变化的容器环境下,静态配置是不现实的。
所以需要接入注册中心,prometheus支持多种注册中心,本节只记录consul集成。
流程大概:
- 应用服务注册(以node-exporter为例)到注册中心consul
- prometheus请求注册中心获取服务注册项和metric接口地址
- prometheus周期性请求metric地址获取监控指标
集成consul
1. 启动prometheus,grafana,consul
prometheus+grafana+consul
version: "3"networks:grafana:volumes:app_data: {}services:prometheus:image: prom/prometheus:v2.21.0volumes:- ./prometheus/:/etc/prometheus/command:- "--config.file=/etc/prometheus/prometheus.yml"- "--storage.tsdb.path=/prometheus"ports:- 9090:9090networks:- grafanaloki:image: grafana/loki:1.6.1ports:- 3100:3100command: -config.file=/etc/loki/local-config.yamlnetworks:- grafanapromtail:image: grafana/promtail:1.6.1volumes:- app_data:/var/lognetworks:- grafanagrafana:image: grafana/grafana:7.3.6ports:- 3000:3000networks:- grafanaapp:build: ./appports:- 8081:80volumes:- app_data:/var/lognetworks:- grafanadb:image: grafana/tns-db:latestports:- 8082:80networks:- grafanaconsul:image: consul:latestports:- 8500:8500networks:- grafana
2. 启动node-exporter
使用容器方式启动 node-exporter
version: '3.2'services:node-exporter:image: prom/node-exporter:latestcontainer_name: node-exporterrestart: unless-stoppedports:- '9100:9100'command:- '--path.procfs=/host/proc'- '--path.sysfs=/host/sys'- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'- '--collector.textfile.directory=/node_exporter/prom'volumes:- /proc:/host/proc- /sys:/host/sys- /:/rootfs
启动命令:
docker-compose up -d
3. prometheus.yaml添加consul服务地址
consul_sd_configs
是prometheus集成consul,从consul获取target的配置命令。实际上还有很多其他的如文件,etcd等。参考:prometheus CONFIGURATION
global:scrape_interval: 15s
scrape_configs:- job_name: 'consul-prometheus'consul_sd_configs:- server: 'consul:8500' services: []
4. node-exporter注册到consul
请求consul的HTTP API将服务node-exporter
注册到consul中。
请求体
将下面文件保存exporter.json
{"ID": "node-exporter","Name": "node-exporter-192.168.10.100","Tags": ["test"],"Address": "192.168.10.100","Port": 9100,"Meta": {"app": "test-exporter-in-consul"},"EnableTagOverride": false,"Check": {"HTTP": "http://192.168.10.100:9100/metrics","Interval": "10s"},"Weights": {"Passing": 10,"Warning": 1}
}
注册命令
curl --request PUT --data @exporter.json http://${consul_host}:${consul_port}/v1/agent/service/register?replace-existing-checks=1
5. prometheus UI查看从consul获取的服务注册项
Status -> Target
6. grafana查看node-exporter指标图形
1. 加入Datasource
选择prometheus,输入prometheus的地址,点击Save & Test
docker-compose提供DNS能力,处于同一network下面的容器可以使用配置的service名字作为DNS访问
2. 导入Dashboard
点击Load,后面选择数据源prometheus
grafana labs维持了一个dashboard的库,每个dashboard模板都有一个唯一ID. 这里只要输入dashboard
ID就可以引入该模板。 此处使用 Node Exporter Full
3. 观察dashboard
HOME- >选择dashboard
点击命名的Dashboard就可以看到node-exporter的指标可视化数据了。
7. 总结
prometheus支持多种服务注册中心,获取服务中心的服务注册项和metric path,定期请求metric path获取服务的监控数据。prometheus针集成每种服务注册中心都有对应的*_sd_config
(服务发现配置,本例为consul_sd_config
).
当然服务在哪里注册,最终都是服务注册项,最终都存储在prometheus TSDB中。
grafana本身不负责存储数据,只是使用PromQL请求prometheus的HTTP API获取数据,进行可视化展示。