简介
于2012年由SoundCloud创建,目前已经发展为最热门的分布式监控系统
完全开源,被很多云厂商内置,在这些厂商中,可以简单部署Prometheus,用来监控整合云基础架构
它是一个时间序列数据库,涵盖了可以绑定的整个生态系统工具及机器功能
主要用于对基础设施的监控,包括服务器、数据库、VPS,几乎所有东西都可以通过它进行监控
主要优点
提供多维度数据模型和灵活的查询方式。通过将监控指标关联多个tag,来将监控数据进行任意维度的组合,并且提供简单的PromQL,还提供查询接口,可以很方便地结合GUI组件展示数据
在不依赖外部存储的情况下,支持服务器节点的本地存储。通过自带的时序数据库,可以完成每秒千万级的数据存储
定义了开发指标数据标准,以基于HTTP的pull方式采集时序数据。只有实现了Prometheus监控数据格式的监控数据才可以被它采集、汇总
支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus目前已经支持Kubernetes、etcd、consul等多种服务发现机制,可以减少运维人员的手动配置环节
易于维护,可以通过二进制文件直接启动,并且提供容器化部署镜像
支持数据的分区采集和联合部署,支持大规模集群监控
生态系统
Alertmanager
Prometheus通过配置文件定义规则将告警信息推送到Alertmanager
Alertmanager可以将其导出到多个端点,如Pagerduty或Email
数据可视化
在WebUI中可视化时间序列数据,轻松过滤查询监控目标的信息,与Grafana、Kibana类似
服务发现
Prometheus可以动态发现监控目标,并根据需要自动废弃目标
这在云架构中使用动态变更地址的容器时,非常方便
实现原理
数据存储
Prometheus指标数据支持本地存储和远程存储
指标数据
Prometheus使用键值对存储监控数据,键描述了测量值时将实际测量值存储为数字的值
Prometheus并不会存储原始信息,如日志文本,它存储的是随时间汇总的指标
Prometheus有标签的概念,标签旨在通过向键添加其他字段来为指标提供更详细信息
指标类型
Counter
计数器是我们使用的最简单的度量标准形式
计数器的值只能增加或重置为0,如要计算服务器上的Http错误数或网站上的访问次数,这时候就是用计数器
Gauge
用于处理随时间减少或增加的值,如温度、内存变化等
Gauges类型的值可以上升和下降,可以是正值/负值
Histogram
直方图是一种更复杂的度量标准类型,它为指标提供了额外信息,如观察值的总和及其数量,常用于跟踪事件发生的规模
其值在具有可配置上限的存储对象中聚合,如为了监控性能指标,我们希望得到在有20%的服务器请求响应时间超过300毫秒发送警告
对于涉及比例的指标就可以考虑使用直方图
Summary
摘要是对直方图的扩展,除了提供观察的总和和计数之外,它们还提供滑动窗口上的分位数度量
分位数是将概率密度分为相等概率范围的方法,直方图随时间汇总值,给出总和和计数函数,使得易于查看给定度量的变化趋势,而摘要则给出了滑动窗口上的分位数(即随时间不断变化)
PromQL
对于Prometheus数据,可以通过HTTP来查询,如果是复杂的数据查询,则还可以使用PromQL进行
和关系型数据库实现SQL解析一样,Prometheus实现了一套自己的数据库语言解析器,最大的区别是支持查询
使用PromQL,会处理两种向量
时间范围向量
用于查看度量随时间的演变,可以使用自定义时间范围查询Prometheus
PromQL_API公开了一组方便查询数据操作的函数,用它可以实现排序,数据函数计算,统计预测计算等
Instrumentation仪表化
仪表化是Prometheus的一个重要组成部分,在从应用程序检索数据之前,必须要仪表化它们
Prometheus术语中的仪表化表示将客户端类库添加到应用程序,以便它们向Prometheus吐出指标
可以对大多数主流的编程语言进行仪表化
在仪表化操作时,需要创建内存对象,然后选择指标公开的位置
Prometheus将从该位置获取并存储到时间序列数据库
Exporters模板
它是一个采集监控数据样本的组件,除了官方实现的Exporter,还是很多第三方实现如Redis_Exporter和Rabbit_Exporter等
这些Exporter通过Https/Http方式、TCP方式、本地文件方式或标准协议方式访问
常见的Exporter模板有
数据库模板
用于MongoDB数据库,MySQL服务器的配置
HTTP模板
用于HAProxy、Apache或Nginx等Web服务器和代理的配置
Unix模板
用来使用构建的节点导出程序监控系统性能,可以实现完整的系统指标的监控
Alertmanager告警
在处理事件序列数据库时,我们希望对数据进行处理,并对结果给出反馈,这部分工作由告警来实现
Prometheus通过Alertmanager实现完成的告警系统
它是一个独立的工具,可以绑定到Prometheus并运行自定义Alertmanager
告警通过配置文件定义,定义由一组指标规则组成,如果数据命中这些规则,则会触发告警并将信息发送到预定义的目标
Prometheus告警,可以通过Email、Slack_Webhooks、PagerDuty和自定义HTTP目标等