一. 四种监控方式
1) Logging:应用程序,开发中间件,web系统等所输出的一些结构化/非结构化的日志,例如应用程序通过一个滚动的文件输出debug或error信息,并通过日志收集系统存储到Elasticsearch中。这是一种最常见的一种监控方式。
2)Tracing:比如分布式调用链CAT(Central Application Tracking),就是Tracing。Tracing有开始和结束。
3)Metrics:Metrics和Logging有点类似,Logging属于离散(不连续的)事件,Logging一半记录的是文本信息。而Metrics记录的是数值,可以聚合,是一段时间内某个度量(计数器或者直方图)的原子或者是元数据,可用于查看某段时间某个参数的指标及其趋势。例如接收的HTTP数量可以被建模为计数器,每次的HTTP请求即是我们的度量元数据,可以进行简单的加法聚合,当持续了一段时间我们又可以建模为直方图。
4)HelathCheck:用于系统健康检查,用于定期检查某个站点服务器是否存活。这种监控方式也是非常重要,常用于集群中。
Prometheus监控则覆盖HelathCheck和Metrics这两种方式。Prometheus专注于衡量系统,随着时间的推移可能会越来越多地追踪,从而成为Tracing的指标。
这四种监控方式比较如下图:
图片来源:https://peter.bourgon.org/go-for-industrial-programming/
几种监控方式适用场景
Metrics监控分层
Metrics通用监控架构模式
二. MDD理念
MDD(Metrics Driven Development)度量驱动开发。
二. 什么是Prometheus?Prometheus(普罗米修斯)是由德国SoundCloud公司开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。
Prometheus官网地址:https://prometheus.io/
Prometheus官网文档地址:https://prometheus.io/docs/introduction/overview/
Prometheus github地址:https://github.com/prometheus/prometheus
Prometheus特点:
1)多维度(标签),拉模式(Pull-based)。
2)白盒(可以深入应用内部来抓取指标数据),黑盒(把应用当成黑盒来监控)监控都支持,。DevOps友好。
三. Prometheus架构
Prometheus基本工作原理
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
Prometheus与其他监控系统对比
Prometheus对比Zabbix
1. Zabbix使用的是 C 和 PHP, Prometheus 使用 Golang, 整体而言 Prometheus 运行速度更快一点。