Prometheus 官网
https://prometheus.io/download/
Consul 介绍
Consul 是基于 GO 语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。通过 Prometheus 实现监控,当新增一个 Target 时,需要变更服务器上的配置文件,即使使用 file_sd_configs 配置,也需要登录服务器修改对应 Json 文件,会非常麻烦。不过 Prometheus 官方支持多种自动服务发现的类型,其中就支持 Consul。
Consul 特性
Consul角色
Consul 官网
https://developer.hashicorp.com/consul/downloads
Consul 安装配置
1,二进制部署Consul
wget https://releases.hashicorp.com/consul/1.14.1/consul_1.14.1_linux_amd64.zip
unzip consul_1.14.1_linux_amd64.zip
mv consul /usr/local/
2,consul版本信息
./consul version
3,启动consul
./consul agent -server -bootstrap -bind=192.168.100.221 -client=192.168.100.221 -data-dir=data -ui -node=192.168.100.221
4,consul启动参数介绍
-server :定义agent运行在server模式
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-ui:启动web界面
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
5,浏览器访问Consul Web
http://192.168.100.221:8500
Consul API 注册 node-exporter 服务到 Consul
通过 API 注册node-exporter 服务信息到 Consul 中,服务地址及端口为 node-exporter 默认提供指标数据的地址。注意:服务注册到Consul的id不能相同。
Consul API注册"id=node-exporter"服务
curl -X PUT -d '{"id": "node-exporter","name": "node-exporter-192.168.100.221","address": "192.168.100.221","port": 9100,"tags": ["node-exporter"],"Meta":{"app": "linux-node","project": "yewu"},"checks": [{"http": "http://192.168.100.221:9100/metrics", "interval": "5s"}]}' http://192.168.100.221:8500/v1/agent/service/register
Consul Web 控制台 查看注册服务
Consul API 注销"id=node-exporter" 服务
curl -X PUT http://192.168.100.221:8500/v1/agent/service/deregister/node-exporter
Prometheus 实现自动服务发现
vim /usr/local/prometheus/prometheus.yml
- job_name: 'consul-node-exporter'
consul_sd_configs:
- server: '192.168.100.221:8500'
services: []
relabel_configs:
- source_labels: [__meta_consul_tags]
regex: .*node-exporter.*
action: keep
- source_labels: ['__meta_consul_service']
regex: '(.*)'
target_label: 'job'
replacement: '$1'
- source_labels: ['__meta_consul_service_address']
regex: '(.*)'
target_label: 'instance'
replacement: '$1'
- source_labels: ['__meta_consul_service_metadata_project']
regex: '(.*)'
target_label: 'project'
replacement: '$1'
consul_sd_configs 配置使用 Consul 服务发现类型
server 指定Consul 的服务地址
relabel_configs 用来实现自定义标签及分类
检查prometheus.yml文件格式
/usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml
Prometheus的restful接口热加载配置
curl -X POST http://127.0.0.1:9090/-/reload
Prometheus Web UI Targets 查看节点已经完成主动注册
Prometheus Web UI Service Discovery
在Consul 注销服务ID后 Prometheus 也会取消对Targets的监控
Consul API 注销"id=node-exporter" 服务
curl -X PUT http://192.168.100.221:8500/v1/agent/service/deregister/node-exporter