1 Prometheus概述
Prometheus概述
Prometheus(普罗米修斯)基于Go语言开发,是一套开源且免费的监控系统。
Prometheus于2016年加入CNCF(云原生基金会)成为继Kubernetes之后的第二个托管项目,目前主要应用在云原生与容器领域的监控解决方案。
Prometheus使用时序数据库TSDB(Time Series Database)存储指标数据,既指标信息与记录的时间戳一起存储的特点。
项目托管:https://github.com/prometheus
2 Prometheus特点
作为新一代的监控系统框架,Prometheus具备以下特点:
基于HTTP的 pull(拉取)方式采集指标数据,利用TSDB(时序数据库)存储指标数据
PromQL 作为TSDB数据库的灵活查询语言,可完成复杂的查询操作
PushGateway作为Prometheus的代理节点,可用于分布式监控
可通过配置文件与动态发现规则发现监控目标
提供web界面图形化数据展示,支持第三方数据展示(如:Grafana)
3 Prometheus架构
4 Prometheus部署
4.1 下载Prometheus镜像
[root@localhost ~]# docker search prometheus
[root@localhost ~]# docker pull prom/prometheus
4.2 创建数据卷目录
[root@localhost ~]# mkdir /prom
4.3 创建容器拷贝Prometheus配置文件
[root@localhost ~]# docker run -id --name=prom prom/prometheus
[root@localhost ~]# docker cp prom:/etc/prometheus/prometheus.yml /prom
4.4 删除容器
[root@localhost ~]# docker rm -f prom
4.5 创建Prometheus容器并挂载数据卷
[root@localhost ~]# docker run -id --name=prom -p 9090:9090 \
-v /prom/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
浏览器访问Prometheus:http://本机IP地址:9090
4..6 下载node-exporter用于获取主机指标数据
[root@localhost ~]# docker pull prom/node-exporter
创建node-exporter容器
[root@localhost ~]# docker run -id --name=node-export -p 9100:9100 prom/node-exporter
4.7 修改Prometheus.yml配置文件定义监控对象
[root@localhost ~]# vim /prom/prometheus.yml
...
- job_name: "node-exporter"
static_configs:
- targets: ["192.168.0.24:9100"]
重启Prometheus
[root@localhost ~]# docker restart prom
重启后通过Web页面查看监控对象是否加入监控。
5 Docker部署Grafana
5.1 Grafana介绍
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计 ,并带有报警功能。
5.2 Grafana特点
可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。
报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。
通知:警报更改状态时,它会发出通知。接收电子邮件通知。
动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。
混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。
注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。
过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。
5.3 Grafana部署
创建grafana容器
[root@localhost ~]# docker run -id --name=grafana -p 3000:3000 grafana/grafana
访问grafana添加数据源与监控模板:http://本机IP地址:3000
6 Docker部署Cadvisor
Cadvisor是由Google(谷歌)公司开发的一款开源的容器度量和指标数据可视化系统,专门用于获取容器内的指标数据,它被内嵌到k8s中作为k8s的监控组件。
具体部署可参考:https://github.com/google/cadvisor
下载cadvisor镜像
[root@localhost ~]# docker pull google/cadvisor
创建cadvisor容器
[root@localhost ~]# docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8888:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor
Cadvisor为prometheus提供了时序数据格式,该格式为prometheus识别的格式。
访问cadvisor:http://本地IP地址:8888
修改promethes.yml文件添加cadvisor为监控对象
[root@localhost ~]# vim /prom/prometheus.yml
...
- job_name: "docker"
static_configs:
- targets: ["192.168.0.24:8888"]
重启prometheus容器
[root@localhost ~]# docker restart prom
为grafana导入容器监控模板,具体模板可参考地址:https://grafana.com/grafana/dashboards/?search=docker
7 如何监控其它主机的数据?
和监控本机的策略一样,我们只需要在Prometheus的配置文件中添加需要监控的主机的IP地址+端口号即可,然后重启Prometheus容器。
如下图所示:
1、容器数据面板
2、节点数据面板
评论区