转载自Rainbowhhy并感谢

1. Prometheus简介

Prometheus又称之为普罗米修斯,是一个最初在SoundCloud上构建的开源系统监视和警报工具包。 自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有一个非常活跃的开发人员和用户社区 。 它现在是一个独立的开源项目,可以独立于任何公司进行维护。 Prometheus于2016年加入CNCF(云原生计算基金会),作为继kubernetes之后的第二个托管项目。

Prometheus具有如下特点:

  • 1 具有由metric和key/value标识的时间序列数据的多维数据模型;

  • 2 使用PromQL,在多维度上灵活的查询语言;

  • 3 不依赖分布式存储,单主节点工作;

  • 4 通过基于HTTP的pull方式采集时序数据;

  • 5 可以通过push gateway进行时序列数据推送(pushing);

  • 6 通过服务发现或者静态配置去获取要采集的目标服务器;

  • 7 支持多种可视化图表及仪表盘

Prometheus具有如下优点

  • 1 易于管理,核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等);

  • 2 强大的数据模型,所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB);

  • 3 高效,对于监控系统而言大量的监控任务必然有大量的数据产生,而Prometheus可以高效地处理这些数据,单一Prometheus Server实例可以处理数以百万的监控指标,每秒处理数十万的数据点;

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

  • 5 可扩展,每个数据中心、每个团队可以运行独立Prometheus Sevrer,同时Prometheus支持联邦集群,可以让多个Prometheus实例产生一个逻辑集群,当单实例Prometheus Server处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展;

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

2. Prometheus架构

以下是来自官方的一幅架构图
在这里插入图片描述

  • 1 Prometheus Server:Prometheus的核心,根据配置完成数据采集,服务发现以及数据存储

  • 2 Service discovery:支持根据配置file_sd监控本地配置文件的方式实现服务发现(需配合其他工具修改本地配置文件),同时支持配置监听kubernetes的API来动态发现服务

  • 3 Prometheus targets:探针(exporter)提供采集接口,或应用本身提供的支持prometheus数据模型的采集接口

  • 4 Pushgateway:为应对部分push场景提供的插件,监控数据先推送到pushgateway上,然后再由server端采集pull(若server采集间隔期间,pushgateway上的数据没有变化,server将采集2次相同数据,仅时间戳不同)

  • 5 Alertmanager:告警插件,支持发送告警到邮件,Pagerduty,HipChat,Wechat等

  • 6 Prometheus web UI:可视化的图形界面,图形展示采集的数据

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐