1. 首页
  2. DevOps

Prometheus+Grafana分布式监控Ⅰ

一、Prometheus概念剖析

Prometheus(普罗米修斯)是一套开源的、免费的分布式系统监控报警平台,跟Cacti、Nagios、Zabbix类似,都是企业最常使用的监控系统,但是Prometheus作为新一代的监控系统,主要是应用于云计算方面。

Prometheus自2012成立以来,许多公司和组织采用了Prometheus。现在是一个独立的开源项目,并独立于任何公司维护。从2016年起,Prometheus加入云计算基金会作为Kubernetes之后的第二托管项目。

二、Prometheus监控优点

Prometheus相比传统监控监控系统(Cacti、Nagios、Zabbix),如下优点:

  • 易管理性

Prometheus: Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。

  • 业务数据相关性

Prometheus:监控服务的运行状态,基于Prometheus丰富的Client库,用户可以轻松的在应用程序中添加对Prometheus的支持,从而让用户可以获取服务和应用内部真正的运行状态。

  • 性能高效性

单一Prometheus可以处理数以百万的监控指标,每秒处理数十万的数据点。

  • 易于伸缩性

通过使用功能分区(sharing)+集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群。

  • 良好的可视化

Prometheus除了自带有Prometheus UI,Prometheus还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash。另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于Prometheus提供的API还可以实现自己的监控可视化UI。

三、Prometheus监控特点

  • 由度量名和键值对标识的时间序列数据的多维数据模型;
  • 灵活的查询语言;
  • 不依赖于分布式存储,单服务器节点是自治的;
  • 通过HTTP上的拉模型实现时间序列收集;
  • 通过中间网关支持推送时间序列;
  • 通过服务发现或静态配置发现目标;
  • 图形和仪表板支持的多种模式。

四、Prometheus组件实战

Prometheus生态由多个组件组成,并且这些组件大部分是可选的:

  • Prometheus Server服务端

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

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

其次Prometheus Sever需要对采集到的数据进行存储,Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server对外提供了自定义的PromQL,实现对数据的查询以及分析。另外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等。

  • AlertManager报警模块

在Prometheus Server中支持基于Prom QL创建告警规则,如果满足Prom QL定义的规则,则会产生一条告警。在AlertManager从 Prometheus server 端接收到 alerts后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,webhook 等。

  • PushGateway网关

Prometheus数据采集基于Prometheus Server从Exporter pull数据,因此当网络环境不允许Prometheus Server和Exporter进行通信时,可以使用PushGateway来进行中转。通过PushGateway将内部网络的监控数据主动Push到Gateway中,Prometheus Server采用针对Exporter同样的方式,将监控数据从PushGateway pull到Prometheus Server。

  • Web UI平台

Prometheus的web接口,可用于简单可视化,及语句执行或者服务状态监控。

五、Prometheus体系结构

Prometheus从jobs获取度量数据,也可以直接或通过推送网关获取临时jobs的度量数据。它在本地存储所有被获取的样本,并在这些数据运行规则,对现有数据进行聚合和记录新的时间序列,或生成警报。通过Grafana或其他API消费者,可以可视化的查看收集到的数据。

Pometheus的整体架构和生态组件,如图所示:

Prometheus+Grafana分布式监控Ⅰ

Prometheus工作流程:

1)Prometheus 服务器定期从配置好的 jobs 或者 exporters 中获取度量数据,或者接收来自推送网关发送过来的度量数据。

2)Prometheus 服务器在本地存储收集到的度量数据,并对这些数据进行聚合;

3)运行已定义好的 alert.rules,记录新的时间序列或者向告警管理器推送警报。

4)告警管理器根据配置文件,对接收到的警报进行处理,并通过Email、微信、钉钉等途径发出告警。

5)Grafana等图形工具获取到监控数据,并以图形化的方式进行展示。

原创文章,作者:wz,如若转载,请注明出处:https://www.wzstyle.cn/367.html

发表评论

邮箱地址不会被公开。 必填项已用*标注