动态服务发现

Prometheus 提供了多种动态服务发现的功能,这里以consul为例。

客户端的一个接口,需要调用服务A-N。客户端必须要知道所有服务的网络位置的,在服务很多时配置十分麻烦。***在加入服务发现模块之后,服务发现模块定时的轮询查看这些服务能不能访问。***客户端在调用服务A-N的时候,就跑去服务发现模块查看它们的网络位置,然后再调用它们的服务。客户端完全不需要记录这些服务网络位置,实现了客户端与服务端的解耦。

prometheus的Counter如何清零 prometheus告警恢复_键值

prometheus的Counter如何清零 prometheus告警恢复_consul_02


在一台主机上部署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  <all>

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文件。

Rest接口

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