Prometheus概览

作者: spraysss | 来源:发表于2018-12-29 15:48 被阅读0次

什么是Prometheus

Prometheus是一个开源系统监控和报警工具包,最初是在SoundCloud上构建的。自2012年启动以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并澄清项目的治理结构,普罗米修斯于2016年加入 Cloud Native Computing Foundation,成为继Kubernetes之后的第二个托管项目。
它支持多种客户端语言,包括Go, Java/JVM, C#/.Net, Python, Ruby,Node.js, Haskell, Erlang,Rust KubernetesDocker的监控也支持
有丰富的第三方集成(exporters),比如HAProxy,MySQL, PostgreSQL, Redis, JMX, SNMP, Consul,Kafka exporters

特点

Prometheus有如下特点:

  • 多维数据模型,Prometheus 将所有的数据都存储为time series,time series由Metric名称和键/值对标识
  • PromQL,Prometheus特有的查询语言,可以充分利用多维数据模型
  • 不依赖分布式存储;单个服务器节点是自治的
  • 时间序列收集通过HTTP上的pull模型进行
  • 通过中间网关支持pushing time series
  • 目标是通过服务发现或静态配置发现的
  • 图形和仪表板支持的多种模式
    Prometheus旨在追踪整个系统的健康状况、行为和表现,而不是单个事件

Prometheus架构

service discovery用于发现需要监控的对象,Scraping将抓取的监控数据存储起来,以便 PromQL在仪表盘上展示或者通过Alertmanager发送报警

Prometheus架构图

Client Libraries

可以通过在Application中加入少量的代码来完成生成Metrics(监控数据指标)的工作
Prometheus 提供的官方客户端支持Go, Python, Java/JVM和 Ruby语言,C#/.Net, Node.js, Haskell, Erlang, Rust 这些第三方语言也被支持

Client Libraries负责所有的细节,例如线程安全、bookkeeping和响应HTTP请求生成普罗米修斯文本表示格式。

由于基于Metrics的监控不跟踪单个事件,所以Client Libraries内存使用不会随着事件的增多而增加。内存与您拥有的Metrics的数量相关。

如果您的应用程序的某个库依赖项具有普罗米修斯指令,它将自动拾取

Exporters

Exporters是一个软件,它接收来自普罗米修斯的请求,从应用程序收集所需的数据,将它们转换为正确的格式,最后将它们作为对普罗米修斯的响应返回。

可以将Exporters程序看作是一个小型的一对一代理,在应用程序的metrics接口和Prometheus公开格式之间转换数据

不同于上面client libraries 的直接指令方式,exporters使用的指令风格称之为custom collectors或者ConstMetrics

Service Discovery

Service Discovery用于动态发现需要被监控的对象。有时候静态配置监控对象还不够,比如需要监控集群节点,而集群节点可能会扩容新的机器或者下线机器,这种情况下服务发现就发挥作用了

普罗米修斯集成了许多常见的服务发现机制,例如Kubernetes、EC2和Consul

Service Discovery支持重新标记的功能,比如对EC2 标签的重新映射

Scraping

Prometheus is a pull-based system

Service Discovery和重新标记为我们提供了要监视的目标列表。现在普罗米修斯需要获取Metrics。普罗米修斯通过发送一个名为scratch的HTTP请求来做到这一点。响应会被存储在Storage

Storage

普罗米修斯将数据存储在本地的自定义数据库中。普罗米修斯不支持集群分布式存储

多年来,存储经历了多次重新设计,普罗米修斯2.0中的存储系统是第三次迭代。该存储系统每秒可接收数百万个样本,使得使用一台普罗米修斯服务器监控数千台机器成为可能。使用的压缩算法可以在真实数据上实现每个sample 1.3字节

建议使用SSD,但不是严格要求

Dashboards

展示推荐使用Grafana,虽然普罗米修斯自带了一个表达式查询的web界面
Grafana支持与多个普罗米修斯服务器通信,甚至在一个仪表板面板中也可以

Recording Rules and Alerts

虽然PromQL和存储引擎功能强大且高效,但是每次呈现图形时,动态聚合来自数千台机器的指标可能会有点滞后
记录规则允许定期计算PromQL表达式,并将其结果输入存储引擎

警报规则是记录规则的另一种形式。它们还定期评估PromQL表达式,这些表达式的任何结果都会变成警报。
警报被发送到Alertmanager

Alert Management

Alertmanager接收来自Prometheus服务器的警报,并将其转换为通知。通知可以包括电子邮件、聊天应用程序(如Slack)和服务(如PagerDuty)

Alert Management不仅仅是在一对一的基础上盲目地将警报转换为通知。相关的警报可以聚合到一个通知中,并进行调整以减少网络开销

可以为每个不同的团队配置不同的路由和通知输出。警报也可以是静音的,可能是在知道维护计划的时候,让您提前意识到的问题暂停

警报及其阈值是在Prometheus中配置的,而不是在Alertmanager中配置的

相关文章

网友评论

    本文标题:Prometheus概览

    本文链接:https://www.haomeiwen.com/subject/juoulqtx.html