本站文章(技术文章和tank手记)均为社长矢量比特工作.实践.学习中的心得原创,请勿转载!

基于etcd+confd对监控prometheus的服务注册发现

docker容器 矢量比特

Prometheus是对容器监控的一个开源解决方案,可以对宿主机和容器内的信息进行详细监控,通过grafna展示出来,Prometheus是根据node节点上的cadvisor来获取每个容器的监控状态,相对zabbix而言

Prometheus是对容器监控的一个开源解决方案,可以对宿主机和容器内的信息进行详细监控,通过grafna展示出来,Prometheus是根据node节点上的cadvisor来获取每个容器的监控状态,相对zabbix而言,prometheus相当于server,cadvisor相当于agent,默认情况走的是类似zabbix的被动模式,cadvisor在收到prometheus要数据的请求后,将采集后的数据发送给prometheus。     

Prometheus是通过读取配置文件去采集指定cadvisor的信息,也就是说配置文件里维护了一个所有监控节点的ip等信息的列表,当新增或者修改一个cadvisor时,只需修改prometheus的核心配置prometheus.yml,然后重启prometheus后node节点就加上了。被监控的机器是随着docker swarm mod集群机器的调整而变化的,这种场景非常适合通过etcd与confd的结合来进行服务注册,编排工具在将node节点注册到nginx的同时,将监控注册到Prometheus,而cadvisor可以通过swarm mod的gloable方式在每台node节点上安装启动,现在介绍一下实现过程,在此感谢李备同学的交流和测试,对应的服务注册的流程图如下:

confd和etcd.png

首先在conf.d下创建prometheus.toml配置文件

cat /etc/confd/conf.d/prometheus.conf.toml 
[template]
prefix = "/prometheus"
src = "prometheus.conf.tmpl"
dest = "/etc/prometheus/prometheus.yml"
mode = "0644"
keys = [
 "/job",
]
#check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = " curl -XPOST "http://10.211.103.112:9090/-/reload""

然后在templates下创建prometheus.conf.tmpl的模板文件

cat /etc/confd/templates/prometheus.conf.tmpl
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'codelab-monitor'
scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090','10.211.103.112:9100']
  - job_name: 'container'
    scrape_interval: 5s
    static_configs:
      - targets: ['10.211.103.112:9104']
        labels:
             instance: container
{{range $label := ls "/job" }}
  - job_name: '{{base $label}}'
    scrape_interval: 5s
    static_configs:
{{$job_name := printf "/job/%s/*" $label}}{{range gets $job_name}}
      - targets: ['{{.Value}}:8080']
        labels:
             instance: '{{base .Key}}'
{{end}}
{{end}}

本地模拟服务注册发现测试如下,规则和原理可以查看前一篇博文:基于etcd+confd对监控prometheus的服务注册发现

etcdctl  set /prometheus/job/cadvisor/cadvisor 10.211.103.112

其中第一个cadvisor指产品线的名称,第二个cadvisor指node的主机名,使用主机名作为本机上cadvisor的标签,效果如下:

图片1.png

如果是添加同一产品下的不同node,只需要修改第二个cadvisor值和后面的IP地址

etcdctl  set /prometheus/job/cadvisor/cadvisor-1 10.83.0.168

效果如下:

图片2.png

针对不同的产品线:

etcdctl  set /prometheus/job/mail/cadvisor-2 1.1.1.1

效果如下:

图片3.png

运维网咖社”原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://www.net-add.com


©本站文章(技术文章和tank手记)均为社长"矢量比特"工作.实践.学习中的心得原创或手记,请勿转载!

喜欢 (16) or 分享 (0)
欢迎扫描关注微信公众号【运维网咖社
社长"矢量比特",曾就职中软、新浪,现任职小米,致力于DevOps运维体系的探索和运维技术的研究实践.