Dokcer+Prometheus+Grafana监控

介绍
Prometheus需要多种第三方工具来收集数据,如接下来要使用的cAdvisor和node-exporter,最终Prometheus使用Grafana进行监控数据的展示
Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
Prometheus 的优点
- 非常少的外部依赖,安装使用超简单
- 已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等
- 服务自动化发现
- 直接集成到代码
- 设计思想是按照分布式、微服务架构来实现的
Prometheus 的特性
- 自定义多维度的数据模型
- 非常高效的存储 平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
- 强大的查询语句
- 轻松实现数据可视化
Prometheus的牛逼之处
Prometheus是一个非常优秀的监控工具。准确的说,应该是监控方案。Prometheus提供了监控数据搜集,存储,处理,可视化和告警一套完整的解决方案;
可以将它理解为图表显示器,或者资源整合器
下面是Prometheus的框架结构。如图。

相关组件:
- Prometheus Server
Prometheus Server负责从运行了node-exporter拉取和存储监控数据,并提供一套灵活的查询语言(promQL)供用户使用 - node-exporter
exporter负责收集目标对象(host,container。。。)的性能数据,并通过HTTP接口供prometheus server获取 - WebUI/Grafana/API clients
是一系列的可视化组件
监控数据的可视化展示对于监控方案至关重要。之前prometheus自己开发了一套工具,不过后来废弃了,因为开源社区出现了更优秀的产品:Grafana。Grafana能够与Prometheus无缝集成,提供完美的数据展示功能。 - Alertmanager
用户可以定义基于数据监控的告警规则,规则会触发告警,会通过预定义的方式发出告警通知。支持的方式包括Email,pagerduty,webhook等
Prometheus的亮点
prometheus最大的亮点和先进性是他的多维数据模型
多维可以理解为,可以从不同的角度去让用户获取到用户想要看到的监控数据,比如同样是监控内存的使用情况,可以监控容器、镜像、user等使用内存的情况。
Prometheus的优势
- 通过维度对数据进行说明,附加更多的业务信息,进而满足不同业务的需求。同时维度是可以动态添加的,比如再给数据添加一个user维度,就可以按照用户来统计内存的使用量了。
- prometheus丰富的查询语句能够灵活,充分挖掘数据的价值。比如对数据进行计算,这些只是查询语言中很小的一部分功能。Prometheus 对多维数据进行分片、聚合的强大能力。
主机信息
| hostname | IP | 服务 |
|---|---|---|
| Server1 | 172.16.1.16 | Docker |
| Server2 | 172.16.1.17 | Docker |
部署监控
node-exporter:负责采集主机的信息和操作系统的信息,以容器的方式运行在监控主机上
cAdvisor:负责采集容器的信息,以容器的方式运行在监控主机上,主要功能:展示主机和容器两个层次的监控数据、展示历史变化数据、在与Prometheus搭配使用时,可以将cAdvisor定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。
下载镜像
只需要在一台中进行下载Prometheus的镜像即可,作为Prometheus服务器
node-exporter主要用来收集主机的硬件使用数据,这样就可以使用cAdvisor和node-exporter将容器与主机的数据都进行了收集
Server1
1 | [root@Server1 ~]# docker pull prom/prometheus |
Server2
1 | [root@Server2 ~]# docker pull prom/node-exporter |
运行export容器
exporter端口为:9100
以下映射的目录大部分都在/var/lib/docker目录下
Server1
1 | docker run -d -p 9100:9100 --volume /proc/:/host/proc \ |
Server2
1 | docker run -d -p 9100:9100 --volume /proc/:/host/proc \ |
1 | [root@Server1 ~]# systemctl stop firewalld |
访问: http://172.16.1.16:9100/metrics

运行cadvisor容器
cAdvisor的端口号是8080
Server1
1 | docker run --volume /:/rootfs:ro --volume /var/run:/var/run:rw \ |
Server2
1 | docker run --volume /:/rootfs:ro --volume /var/run:/var/run:rw \ |
访问:http://172.16.1.16:8080/metrics

运行Prometheus
需要使用一个yml文件来指定需要监控的内容,将两台主机的cAdvisor与exporter监控到的数据拉取到Prometheus Server中
将这个配置文件映射到Prometheus Server的容器中
去官网找示例文件,修改为如下,我这里是使用的官网的最下面的那个示例,截止到startic_configs:
修改内容:rule_files注释掉,添加static_configs:下面的内容,用来指定exporter抓取的数据
Server1
1 | [root@Server1 ~]# vim prometheus.yml |
在以上文件中,将两台主机的5个ip:port都添加即可,9090为Prometheus Server的端口
1 | docker run -d --volume /root/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus -p 9090:9090 prom/prometheus |
访问172.16.1.16:9090
运行Grafana
使用grafana可以显示更加绚丽的图形化界面grafana的端口号是3000
1 | [root@Server1 ~]# docker run -d -i --name grafana \ |
访问http://172.16.1.16:3000
默认用户名:admin 密码:secret

连接Prometheus



点击下方Save & Test 保存
添加监控面板

这里需要导入json文件,在grafana官网即可下载;https://grafana.com/grafana/dashboards?dataSource=prometheus&search=Docker


导入之后点击Import即可!
由于之前下载了中文版面板,我这里就直接用中文版了,看起来还不错!

例:新添加监控主机
如果后期需要新加监控主机,需要在prometheus.yml文件中末尾targets中添加新主机的IP+8080/9100端口,重启cadivsor和Prometheus容器即可!
新加主机:172.16.1.18
1 | [root@Server1 ~]# vi prometheus.yml |

