浅谈云原生监控系统——Prometheus

浅谈云原生监控系统——Prometheus

什么是Prometheus

Prometheus是一个开源系统监控和警报工具包,是由Matt T. Proud和 Julius Volz私下创立的,初始开发由SoundCloud赞助的,使用Go语言编写,是Google BorgMon监控系统的开源版本。

2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。

Prometheus的特点

  • 多维度数据模型。

  • 灵活的查询语言。

  • 不依赖分布式存储,单个服务器节点是自主的。

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

  • 可以通过中间网关进行时序列数据推送。

  • 通过服务发现或者静态配置来发现目标服务对象。

  • 支持多种多样的图表和界面展示,比如Grafana等。

Prometheus与Zabbix对比

对比项 Prometheus Zabbix Prometheus优势 Zabbix优势
管理 二进制文件启动 LNMP+编译 轻量级server,便于迁移和维护
配置 配置文件 图形化 更好的支持自动化配置 学习成本低
client 丰富的client库 zabbix_agent自定义脚本 为各种中间件、应用提供专业的exporter,监控项更全面 支持自定义监控项,对监控设计者的格局要求较高
数据存储方式 Prometheus TSDB MySQL 监控数据以时间为维度统计情况较多,时序数据库更适合用于监控数据的存储,按时间引索性能更高 MsSQL比较常用,学习成本低
数据处理 PromQL MySQL PromQL计算函数丰富,统计维度广 MsSQL比较常用,学习成本低
二次开发 丰富的SDK API 提供了GO、JAVA/Scala、Python、Ruby等SDK,二次开发更便捷 api适配较为常用,学习成本低
对云环境支持 原生支持容器监控 更适合物理机监控 自动发现容器,更好的适配K8S
告警方式 可按照标签分组,收敛 在次数上收敛 告警收敛方式更多样化
监控项值 支持数字 支持数字、字符串 可做日志监控

架构图

下图说明了 Prometheus 的架构及其一些生态系统组件:

浅谈云原生监控系统——Prometheus_第1张图片

常用组件

  • Prometheus Server

    Prometheus Server是Prometheus组件中的核心部分,负责实现对
    监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。
    Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。
    Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。

  • alertmanager

    在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。

  • pushgateway

    由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。

    补充说明:Prometheus抓取数据的两种模式 (1) push 模式(2)pull模式
    push 模式 :这种模式我们可以灵活的zai被监控端使用各种语言编写数据采集脚本,通过PushGateway传输给Prometheus,传输方式为http
    pull 模式 :我们直接使用采集数据客户端xxx_exporters将数据传输给Prometheus,已经有很多xxx_exporters详见官档,同样也是http

  • Granfana

    Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:

    1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;

    2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;

    3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;

    4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;

    5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;

    6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

  • exporter

    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等。

你可能感兴趣的:(prom,运维,监控程序)