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