前面几篇文章分别对系统服务、MySql以及Redis相关软件做了监控预警,但是大家有没有发现,在prometheus.yml里配置需要监听的服务时,我们需要按服务名手动写入,也就是说以后每增加一个服务,就得手动修改此配置,并重启promethues服务。 那么我们如何做到动态的监听服务呢?相信不少接触过分布式框架Dubbo的小伙伴们都知道它是靠zookeeper做注册监听的,最近比较流行的Spring Cloud Netflix的Eureka,consul也是比较常用的注册中心。
参考官方文档consul_sd_config,可以发现promethues已经可以借助consul实现动态监听服务的功能了。
Consul是一个服务发现和注册的工具,其具有分布式、高扩展性能特点。
Consul主要包含如下功能:
官方架构图:
下载并解压:
## 下载
wget https://releases.hashicorp.com/consul/1.0.0/consul_1.0.0_linux_amd64.zip?_ga=2.31706621.2141899075.1510636997-716462484.1510636997
## 解压
unzip consul_1.0.0_linux_amd64.zip
以UI形式后台启动:
./consul agent -server -ui -bootstrap-expect 1 -data-dir /tmp/consul &
查看启动状态:
[root@iZ2ze74 home]# ./consul members
Node Address Status Type Build Protocol DC Segment
iZ2ze74 172.17.120.102:8301 alive server 1.0.0 2 dc1 <all>
说明:
查看节点:
curl 127.0.0.1:8500/v1/catalog/nodes
Nginx代理访问:
server {
listen 80;
server_name consul.52itstyle.com;
charset utf-8;
location / {
default_type text/html;
proxy_pass http://127.0.0.1:8500;
}
}
界面:
使用http的方式,直接调用/v1/agent/service/register接口注册:
curl -X PUT -d '{"id": "MySql","name": "MySql","address": "localhost","port": 9104,"tags": ["dev"],"checks": [{"http": "http://localhost:9104/","interval": "5s"}]}' http://localhost:8500/v1/agent/service/register
使用配置文件注册服务,创建文件夹/etc/consul.d vi mysql.json内容如下:
{
"service":{
"id": "mysql",
"name": "mysql",
"address": "MySql",
"port": 9104,
"tags": ["dev"],
"checks": [
{
"http": "http://localhost:9104",
"interval": "5s"
}
]
}
}
指定文件启动:
./consul agent -server -ui -bootstrap-expect 1 -data-dir /tmp/consul -config-dir /etc/consul.d &
如果文件变更,我们可以通过以下方式重新加载配置:
consul reload
我们也可以通过curl的方式注销服务:
curl --request PUT http://localhost:8500/v1/agent/service/deregister/MySql
配置promethues.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: 'consul'
consul_sd_configs:
#consul服务地址
- server: 'localhost:8500'
#services是微服务名的数组,如果什么都不填,则默认取consul上注册的所有微服务
services: ['redis', 'mysql', 'linux']
然后我们重启promethues,这时候只要Consul有服务注册,promethues就会检测到。
常用命令command:
常用选项option:
-data-dir
-config-dir
-config-file
-dev
-bootstrap-expect
-node
-bind
-server
-client
-join
http://consul.la/intro/what-is-consul
http://kkkkkk.blog.51cto.com/468162/1914469
https://prometheus.io/docs/prometheus/latest/configuration/configuration/