2.2 Prometheus的主要特点
Prometheus官网上的自述是:“From metrics to insight.Power your metrics and alerting with a leading open-source monitoring solution.”翻译过来就是:从指标到洞察力,Prometheus通过领先的开源监控解决方案为用户的指标和告警提供强大的支持。
在第1章中我们介绍了很多监控系统,和它们相比Prometheus最主要的特色有4个:
·通过PromQL实现多维度数据模型的灵活查询。
·定义了开放指标数据的标准,自定义探针(如Exporter等),编写简单方便。
·PushGateway组件让这款监控系统可以接收监控数据。
·提供了VM和容器化的版本。
尤其是第一点,这是很多监控系统望尘莫及的。多维度的数据模型和灵活的查询方式,使监控指标可以关联到多个标签,并对时间序列进行切片和切块,以支持各种图形、表格和告警场景。
除了上述4种特色之外,Prometheus还有如下特点。
·Go语言编写,拥抱云原生。
·采用拉模式为主、推模式为辅的方式采集数据。
·二进制文件直接启动,也支持容器化部署镜像。
·支持多种语言的客户端,如Java、JMX、Python、Go、Ruby、.NET、Node.js等语言。
·支持本地和第三方远程存储,单机性能强劲,可以处理上千target及每秒百万级时间序列。
·高效的存储。平均一个采样数据占3.5B左右,共320万个时间序列,每30秒采样一次,如此持续运行60天,占用磁盘空间大约为228GB(有一定富余量,部分要占磁盘空间的项目未在这里列出)。
·可扩展。可以在每个数据中心或由每个团队运行独立Prometheus Server。也可以使用联邦集群让多个Prometheus实例产生一个逻辑集群,当单实例Prometheus Server处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)对其进行扩展。
·出色的可视化功能。Prometheus拥有多种可视化的模式,比如内置表达式浏览器、Grafana集成和控制台模板语言。它还提供了HTTP查询接口,方便结合其他GUI组件或者脚本展示数据。
·精确告警。Prometheus基于灵活的PromQL语句可以进行告警设置、预测等,另外它还提供了分组、抑制、静默等功能防止告警风暴。
·支持静态文件配置和动态发现等自动发现机制,目前已经支持了Kubernetes、etcd、Consul等多种服务发现机制,这样可以大大减少容器发布过程中手动配置的工作量。
·开放性。Prometheus的client library的输出格式不仅支持Prometheus的格式化数据,还可以在不使用Prometheus的情况下输出支持其他监控系统(比如Graphite)的格式化数据。
Prometheus也存在一些局限性,主要包括如下方面。
·Prometheus主要针对性能和可用性监控,不适用于针对日志(Log)、事件(Event)、调用链(Tracing)等的监控。
·Prometheus关注的是近期发生的事情,而不是跟踪数周或数月的数据。因为大多数监控查询及告警都针对的是最近(通常不到一天)的数据。Prometheus认为最有用的数据是最近的数据,监控数据默认保留15天。
·本地存储有限,存储大量的历史数据需要对接第三方远程存储。
·采用联邦集群的方式,并没有提供统一的全局视图。
·Prometheus的监控数据并没有对单位进行定义。
·Prometheus对数据的统计无法做到100%准确,如订单、支付、计量计费等精确数据监控场景。
·Prometheus默认是拉模型,建议合理规划网络,尽量不要转发。