本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。上一篇介绍了Google开发的容器监控工具cAdvisor,但是其提供的操作界面较为简陋,且不支持监控多Host,实用性有待提高。因此,本篇会介绍一个流行的生产级监控工具,不,准确说来应该是一个监控方案,它就是Prometheus!
实验环境:阿里云ECS主机(两台),CentOS 7.4
Prometheus是由SoundCloud开发的开源监控系统的开源版本。2016年,由Google发起的云原生基金会CNCF (Cloud Native Computing Foundation) 将其纳入为其第二大开源项目(第一大开源项目是Kubernetes)。Prometheus提供了一整套的包括监控数据搜集、存储、处理、可视化和告警的完整解决方案。
Prometheus官网地址:https://prometheus.io/
Prometheus GitHub:https://github.com/prometheus/prometheus/
Prometheus在其官方github上贴出的其架构图如下:
为了更容易理解这个架构,这里我们采用园友Cloud Man(他也是本文参考资料《每天5分钟玩转Docker》作者)总结的下图,它去掉了一些部分,只保留了最重要的组件,可以帮助我们避免注意力分散。
从上图看来,我们着重需要关注以下几个核心组件:
(1)Prometheus Server:负责从Exporter中拉取和存储监控数据,并提供一套查询语言(PromQL)供用户使用。
(2)Exporter:负责收集目标对象(如Host或Container)的性能数据,并通过HTTP接口供Prometheus Server获取。
(3)可视化组件 Grafana:获取Prometheus Server提供的监控数据并通过Web UI的方式完美展现数据。
(4)AlertManager:负责根据告警规则和预定义的告警方式发出例如Email、Webhook之类的告警。
Prometheus 中存储的数据为时间序列,是由 metric 的名字和一系列的标签(键值对)唯一标识的,不同的标签则代表不同的时间序列。
时间序列格式:
<metric name>{<label name>=<label value>, ...}