Prometheus简介

Prometheus简介及其发展历程

Prometheus是一套基于Go语言开发的开源系统监控和报警框架。

它启发于Google的borgmon监控系统,从2012年开始由前Google工程师在Soundcloud以开源软件的形式进行研发。

2016年5月继Kubernetes之后成为第二个正式加入CNCF基金会的项目,同年6月正式发布1.0版本。

2017年底发布了基于全新存储层的2.0版本,能更好地与容器平台、云平台配合。

Prometheus作为新一代的云原生监控系统,目前已经有超过650+位贡献者参与到Prometheus的研发工作上,并且超过120+项的第三方集成。

Prometheus系统的特点

易于管理

Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖,唯一需要的就是本地磁盘。

高效运行

Prometheus基于Pull模型的架构方式采集时间序列数据,有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。平均每个采样点仅占3.5bytes,一个Prometheus server可以处理数百万的指标数据。

强大的多维度数据模型

Prometheus所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库(TSDB)当中。时间序列数据通过metric名和键值对来区分,所有的metrics都可以设置任意的多维标签。基于这些标签我们可以方便地对监控数据进行聚合,过滤,裁剪。

灵活而强大的查询语句

Prometheus内置了一个强大的数据查询语言PromQL。 通过PromQL可以实现对监控数据的查询、聚合。同时PromQL也被应用于数据可视化(如Grafana)以及告警当中。

可扩展性强

Prometheus对于联邦集群的支持,可以让多个Prometheus实例产生一个逻辑集群,当单实例Prometheus Server处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展。

易于集成

使用Prometheus可以快速搭建监控服务,并且可以非常方便地在应用程序中进行集成。支持:Java,JMX,Python,Go,Ruby,.Net,Node.js等等语言的客户端SDK,基于这些SDK可以快速让应用程序纳入到Prometheus的监控当中,或者开发自己的监控数据收集程序。

同时这些客户端收集的监控数据,不仅仅支持Prometheus,同时还支持与其他的监控系统进行集成,如:Graphite, Statsd, Collected, Scollector, muini, Nagios等。

Prometheus社区还提供了大量第三方实现的监控数据采集支持:JMX,CloudWatch,EC2,MySQL,PostgresSQL, Consul,Django,Memcached,RabbitMQ,Redis,Rsyslog等等。

可视化支持

Prometheus Server中自带了一个Prometheus UI,通过这个UI可以方便地直接对数据进行查询,并且支持直接以图形化的形式展示数据。

最新的Grafana可视化工具也已经提供了完整的Prometheus支持,基于Grafana可以创建更加精美的监控图表。

Prometheus架构及其核心组件

Prometheus架构

Prometheus Server

Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

Prometheus Server可以通过静态配置管理监控目标,也可以配合使用服务发现的方式动态管理监控目标,并从这些监控目标中获取数据。

Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。

Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。

Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。

Exporters

Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。

一般来说可以将Exporter分为2类:

  • 直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。

  • 间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。

PushGateway

PushGateway主要用于短期的jobs。由于这类jobs存在时间较短,可能在Prometheus来pull之前就消失了。这类jobs就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。

而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据,也可以直接向Prometheus server端推送它们的metrics。

AlertManager

在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。

AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。

参考资料

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)