在一台主机上部署node-exporter探针, 如果要通过prometheus实现监控,需要修改配置文件,新增一个target。如果每次新增target都去变更服务器上的配置文件会非常麻烦。Prometheus 提供了多种动态服务发现的功能,这里以consul为例。consul是一个服务发现和注册的工具。
客户端的一个接口,需要调用服务A-N。客户端必须要知道所有服务的网络位置的,在服务很多时配置十分麻烦。***在加入服务发现模块之后,服务发现模块定时的轮询查看这些服务能不能访问。***客户端在调用服务A-N的时候,就跑去服务发现模块问下它们的网络位置,然后再调用它们的服务。客户端完全不需要记录这些服务网络位置,实现了客户端与服务端的解耦。
在prometheus的configmap.yaml
文件中进行配置:
-job_name: 'consul-prometheus'
consul_sd_configs:
- server: '10.4.41.161:8500'
services: []
relabel_configs:
- source_labels: ['__meta_consul_service']
regex: .*Node.*
action: keep
regex
是正则表达式,这里表示的是动态发现consul中所有注册的服务中,名中带有Node的服务(__meta_consul_service
表示的是服务名,也可以是其他的参数,如__meta_consul_tags
表示的是服务的tag)。如果要表示无筛选条件的发现,可以将.*Node.*
更改为(.+)
。
二进制安装:
./consul agent -dev -ui -node=consul-dev -client=10.4.54.31
镜像安装(推荐):
sudo docker run --name consul -d -p 8500:8500 consul
在consul所在的主机执行如下代码,可以进行注册(HTTP API 方式):
curl -X PUT -d '{"id": "NodeTest","name": "NodeTest","address": "10.4.**.**","port": 9100,"tags": ["dev"],"checks": [{"http": "http://10.4.**.**:9100/","interval": "5s"}]}' http://10.4.**.**:8500/v1/agent/service/register
consul的web端的访问地址:http://ip:8500/ui/dc1/services
也可以将注册的内容写成一个json文件,参考文档:https://blog.csdn.net/poorcoder_/article/details/79120218
==================================================
待研究:
1、如果是虚拟机运行,要想在主机上打开网页,需要关闭SELinux和防火墙。
2、如果因为防火墙的问题,8500端口没有打开,则执行以下命令:
firewall-cmd --zone=public --add-port=8500/tcp --permanent
systemctl stop firewalld.service
systemctl start firewalld.service
这样再启动consul,就可以访问了
3、健康检查