最近在了解一些云原生相关的内容,其中就涉及到Prometheus这一个监控框架,下面就简要介绍一下这一个监控框架。

1. 架构图

下面是官方给出的架构图:

可以看到,普罗米修斯是基于pull-push即拉取和推送模型,(其实这样的说法太抽象了,简而言之就是获取监控指标metrics和发出告警信息alert以及进行可视化

2. 各个组件介绍

下面是对于里面主要的组件的介绍:

  • 用于采集和存取时间序列数据的 Prometheus server
  • 用于监测应用的客户端库 (client lib,在客户端这里,图中没有标出)
  • 用于支持短期的作业(Short-lived jobs)的 push gateway(下面有Short-lived jobs和push gateway的定义)
  • 诸如 HAProxy,StatsD,Graphite 等服务的专用 exporter (下面有他的定义)
  • 用于处理告警的 alertmanager
  • PromQL是Prometheus内置了一个强大的数据查询语言。
  • Grafana是可视化的工具。
  • docker镜像是有Prometheus的,所以Prometheus能够在K8s上迅速的部署
  • Exporters/Jobs:Prometheus的数据采集组件,负责收集目标对象(host, container…)的性能数据,并通过HTTP接口提供给Prometheus Server。支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等。
  • Short-lived jobs:瞬时任务的场景,无法通过pull方式拉取,需要使用push方式,与PushGateway搭配使用
  • PushGateway:应对部分push场景的组件可选组件,这部分监控数据先推送到Push Gateway上,然后再由Prometheus Server端拉取 。用于存在时间较短,可能在Prometheus来拉取之前就消失了的 jobs

由于Prometheus基于Golang编写,所以是原生支持go的。
此外还有以下特点:

  1. 定义了开放指标数据标准:支持pull和push两种方式的数据采集,以基于HTTP的Pull方式采集时序数据,只有实现了prometheus监控数据格式才可以被prometheus采集;以Push方式向中间网关(Gateway)推送时序数据,能更灵活地应对各种监控场景。
  1. 支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。prometheus目前已经支持Kubernetes、Consul等多种服务发现机制,可以减少运维人员的手动配置环节。

所以,如果你是在k8s(Kubernetes)上面部署Prometheus监控,**可以通过对外暴露服务(service的方式,利用Prometheus进行监控。**可以参考资料一最后一节的内容。

3. 官方给出的特点

下面是官方文档上说的Prometheus的特点:

  • 具有由指标名称和键/值对标识的时间序列数据的多维数据模型
  • PromQL,一种灵活的查询语言
  • 不依赖分布式存储(指的是普罗米修斯监控应用本身,不是说它不支持对分布式场景进行监控)
  • 时间序列收集通过HTTP上的拉取模型(就是前面的 pull)进行
  • 通过中间网关(就是前面的gateway)支持推送时间序列(就是前面的 push
  • 通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持模式
    也就是实际上Prometheus本身并不做直接监控,只是做了一个监控整合,把监控信息获取,数据分析,告警,前端界面等整合到一起了。

参考资料

  1. https://hulining.gitbook.io/prometheus/introduction/overview 这是一个对于Prometheus的入门的介绍,如果有时间,很推荐跟着教程完整的走一遍
  2. https://www.modb.pro/db/45956