简介

Prometheus是一个开源的监控、告警整体解决方案,最初由SoundCloud构建。从2012年开始,大量的公司开始适配Prometheus,拥有大量的开发者和非常活跃的用户社区。目前已作为独立的项目在运营,并与2016年加入CNCF,是继Kubernetes之后第二个被CNCF托管的项目。

特性

  • 通过指标名称和标签(key/value对)区分的多维度、时间序列数据模型
  • 灵活的查询语法 PromQL
  • 不需要依赖额外的存储,一个服务节点就可以工作
  • 利用http协议,通过pull模式来收集时间序列数据
  • 需要push模式的应用可以通过中间件gateway来实现
  • 监控目标支持服务发现和静态配置
  • 支持各种各样的图表和监控面板组件

核心组件

整个Prometheus生态包含多个组件,除了Prometheus server组件其余都是可选的

  • Prometheus server:主要的核心组件,用来收集和存储时间序列数据
  • client libraries:提供个客户端,主要是用来帮助应用程序更容易生成满足Prometheus格式的监控数据,支持各种各样的开发语言
  • push gateway:对于那些生存时间很短的job工作,采用Prometheus的pull模式可能来不及收集,可以部署这个组件,让job主动把监控指标push到getway,Prometheus再从getway中拉取
  • 各种各样的exports
  • alertmanager 一个告警组件

架构图

下面这张图,清晰的描绘出了Prometheus各个组件如何相互协作完成系统监控

prometheus的架构设计 prometheus工作原理_Prometheus

  • Prometheus server利用各种各样的服务发现机制获取需要监控的target
  • Prometheus server通过pull从各种各样的target处拉取指标数据
  • 数据可视化组件(Grfana)通过PromQl从Prometheus server查询数据,进行展示
  • Prometheus server根据自己定义的rule,可以提前对指标数据再次进行计算,触发报警的发送到alertmanager组件
  • alertmanager组件根据配置的告警方式发送相应的通知

适用范围

Prometheus非常适合用来获取和存储纯粹数值型时间序列数据,如cpu使用率、系统访问量、数据更新频率等,所以多被用来对宿主机和微服务架构中的指标监控。

Prometheus非常的可靠,每个Prometheus server可以作为一个独立体进行部署,不用依赖其他服务或者是网络。所以在底层基础设施出现问题时,你还可以从Prometheus server中取出历史指标来分析问题出现的原因,并且Prometheus server运行时也不会占用很多的资源

不适用场景

因为Prometheus server是周期性pull指标信息的,所以收集的数据可能是不完整的(比如拉取间隔期间,目标服务出现故障,则这个间隔期间中的数据就获取不到),所以对于要求数据100%准确的场景如交易额统计等,Prometheus就不太适合了。对于Prometheus最好的用法就是来做监控,通过Prometheus收集的指标数据对系统的健康状态进行评判和报警处理。