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节点上安装启动,现在介绍一下实现过程,在此感谢李备同学的交流和测试,对应的服务注册的流程图如下:
首先在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的标签,效果如下:
如果是添加同一产品下的不同node,只需要修改第二个cadvisor值和后面的IP地址
etcdctl set /prometheus/job/cadvisor/cadvisor-1 10.83.0.168
效果如下:
针对不同的产品线:
etcdctl set /prometheus/job/mail/cadvisor-2 1.1.1.1
效果如下:
“运维网咖社”原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://www.net-add.com
社长"矢量比特",曾就职中软、新浪,现任职小米,致力于DevOps运维体系的探索和运维技术的研究实践. |