动态服务发现

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

1

对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

注1:这里的10是每间隔10s就会刷新一次,执行toml文件中的reload指令。


注2:我们将toml、tmpl文件中的go相关的内容去掉,很短的时间内就会立即加载生效。生效输出两行语句,错误则输出三行。


注3:放入后台作为守护进程执行。


注4:使得更改规则十分方便,无论是在consul中图形化修改规则,还是改变toml、tmpl文件,都会很快生效。


5、最终绕一圈的结果就是在指定目录下生成了指定类型的文件,这里就是告警规则的yml文件。


Rest接口

agent


1、删除服务(PUT)


http://10.4.**.***:8500/v1/agent/service/deregister/服务名

1

2、新增服务(PUT,在body中输入相应的json字符串)


http://10.4.41.165:8500/v1/agent/service/register

1

service:


1、查询指定的服务


 http://10.4.**.***:8500/v1/catalog/service/web2

1

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


————————————————

版权声明:本文为CSDN博主「八岐黑炭大蛇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_38645718/java/article/details/84773305


参考链接:

Prometheus 通过 consul 实现自动服务发现https://blog.csdn.net/aixiaoyang168/article/details/103022342

prometheus对标签的操作http://www.51niux.com/?id=254