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