Prometheus 提供了多种动态服务发现的功能,这里以consul为例。
客户端的一个接口,需要调用服务A-N。客户端必须要知道所有服务的网络位置的,在服务很多时配置十分麻烦。***在加入服务发现模块之后,服务发现模块定时的轮询查看这些服务能不能访问。***客户端在调用服务A-N的时候,就跑去服务发现模块查看它们的网络位置,然后再调用它们的服务。客户端完全不需要记录这些服务网络位置,实现了客户端与服务端的解耦。
在一台主机上部署node-exporter探针, 如果要通过prometheus实现监控,需要修改配置文件,新增一个target。如果每次新增target都去变更服务器上的配置文件会非常麻烦。
在prometheus的configmap.yaml
文件中进行配置:
-job_name: 'consul-prometheus'
consul_sd_configs:
- server: '10.4.**.***:8500'
services: []
relabel_configs:
- source_labels: ['__meta_consul_service']
regex: 正则规则
action: keep
其中 relabel_configs:
中内容的含义为:如果目标的__meta_consul_service
标签与regex中的内容正则匹配,则保留该目标。
__meta_consul_service
表示的是服务名,也可以是其他的参数,如__meta_consul_tags
表示的是服务的tag。
如regex: .*Node.*
保留的是所有注册服务名中包括Node的服务。如果要表示无任何限制的筛选,可以将.*Node.*
更改为(.+)
。
镜像安装(推荐):
sudo docker run --name consul -d -p 8500:8500 consul
对http://10.4.**.**:8500/v1/agent/service/register
执行PUT操作,选择Json格式。即可完成服务的注册。
{
"id":"NodeTest",
"name":"NodeTest",
"address":"10.4.**.**",
"port":9100,
"tags":[
"dev"
],
"checks":[
{
"http":"http://10.4.**.**:9100/",
"interval":"5s"
}
]
}
consul的web端的访问地址:http://ip:8500/ui/dc1/services
注1:如果因为防火墙的问题,8500端口没有打开,则执行以下命令:
firewall-cmd --zone=public --add-port=8500/tcp --permanent
systemctl stop firewalld.service
systemctl start firewalld.service
这样再启动consul,就可以访问了
注2:如果网页打不开,查看SELinux和防火墙是否关闭。
注3:在单个数据中心中,Consul分为Client和Server两种节点(所有的节点也被称为Agent),Server节点保存数据,Client负责健康检查及转发数据请求到Server。Server节点有一个Leader和多个Follower,Leader节点会将数据同步到Follower,Server的数量推荐是3个或者5个,在Leader挂掉的时候会启动选举机制产生一个新的Leader。
注4:consul常用命令
consul members
Node Address Status Type Build Protocol DC Segment
ad12c8e1beb3 127.0.0.1:8301 alive server 1.4.0 2 dc1
consul catalog nodes
Node ID Address DC
ad12c8e1beb3 b51121db 127.0.0.1 dc1
consul catalog services
NodeTest
consul
1、首先通过Postman添加键值,使用Put方法,值的格式为text/plain。
2、在/etc/confd/conf.d/myconfig.toml
目录下配置应用模板,只配置一个toml文件即可,tmpl文件同理。
myconfig.toml为:
[template]
src = "myconfig.conf.tmpl"
dest = "/etc/prometheus/rules/alertrules.yml"
keys = [
"/k1/rules/up",
"/k1/rules/go",
"/k1/rules/cpu"
]
reload_cmd = "curl -X POST http://10.4.**.**:30581/-/reload"
注1:src就是我们配置模板的名称,dest就是我们目标文件生成的名称和路径。
注2:keys就是我们需要的各种键,也是我们将所有内容都整合到一个toml文件的基础。
3、在/etc/confd/templates/myconfig.conf.tmpl
目录下配置配置模板。
myconfig.conf.tmpl为:
groups:
- name: alertUpTest
rules:{{range getvs "/k1/rules/up/*"}}
{{.}}{{end}}
- name: alertGoTest
rules:{{range getvs "/k1/rules/go/*"}}
{{.}}{{end}}
- name: alertCPUTest
rules:{{range getvs "/k1/rules/cpu/*"}}
{{.}}{{end}}
注1:每个后面都需要加 {{.}}{{end}}
注2:处理{}中的内容为变量,是根据toml给出的键得到相应的值的
注3:符合 Golang text templates的模板文件
4、执行confd
./confd -interval 10 -confdir ./ -config-file myconfig.toml -backend consul -node 10.4.**.***:8500 &
注1:这里的10是每间隔10s就会刷新一次,执行toml文件中的reload指令。
注2:我们将toml、tmpl文件中的go相关的内容去掉,很短的时间内就会立即加载生效。生效输出两行语句,错误则输出三行。
注3:放入后台作为守护进程执行。
注4:使得更改规则十分方便,无论是在consul中图形化修改规则,还是改变toml、tmpl文件,都会很快生效。
5、最终绕一圈的结果就是在指定目录下生成了指定类型的文件,这里就是告警规则的yml文件。
agent
1、删除服务(PUT)
http://10.4.**.***:8500/v1/agent/service/deregister/服务名
2、新增服务(PUT,在body中输入相应的json字符串)
http://10.4.41.165:8500/v1/agent/service/register
service:
1、查询指定的服务
http://10.4.**.***:8500/v1/catalog/service/web2
kv:
1、加键值(PUT、Test纯文本类型test/plain)
http://10.4.41.166:8500/v1/kv/k1/rules/rulesGo
注:修改与增加的命令完全一样,修改会覆盖掉之前的值
2、查看所有键值(?recurse参数来指定查看多个KV)
http://10.4.41.166:8500/v1/kv/?recurse
注:http://10.4.41.166:8500/v1/kv/rules/?recurse 则缩小了查看键值的范围,只查看某一前缀的兼职
3、删除键值(DELETE)
http://10.4.41.166:8500/v1/kv/k1/rules/rulesGo
注:也可以只删除某一前缀的键值,如http://10.4.41.166:8500/v1/kv/?recurse
其他rest接口:
https://blog.csdn.net/u010246789/article/details/51871051
1、template模板语法
https://github.com/kelseyhightower/confd/blob/master/docs/templates.md
2、consul官方文档
https://www.consul.io/docs/
翻译:https://book-consul-guide.vnzmi.com/
3、Consul使用全手册(参考文献同样重要)
http://www.liangxiansen.cn/2017/04/06/consul/#%E4%BD%BF%E7%94%A8consul
https://blog.csdn.net/xiang__liu/article/details/80878537
4、知识星球四连击
https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2018/08/30/confd-prometheus-dynamic-config.html
https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/08/22/confd-usage.html
https://www.lijiaocn.com/%E6%8A%80%E5%B7%A7/2017/09/21/linux-tool-confd.html
https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/08/17/consul-usage.html
5、confd快速入门(官方)
https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md
6、confd使用文档
https://blog.csdn.net/huwh_/article/details/82286934