Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是 Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus 是继 Kubernetes 之后的第二个 CNCF 项目。

Prometheus 特点

  • 多维度数据模型:由度量名称和键值对标识的时间序列数据
  • PromQL:一种灵活的查询语言,可以利用多维度数据完成复杂的查询
  • 不依赖分布式存储,自带 TSDB 数据库,单个服务器节点可直接工作
  • 基于 HTTP 的 pull 方式采集时间序列数据
  • 推送时间序列数据通过 PushGateway 组件支持
  • 通过服务发现或者静态配置发现目标
  • 多种图形模式及仪表盘支持(Grafana)

Prometheus 组件和架构

Prometheus_arch

组件

Prometheus Server:收集指标和存储时间序列数据,并提供查询接口

ClientLibrary:客户端库,支持多种语言 metrics 暴露。当微服务拆分后,每个团队都选择自己擅长的语言进行应用开发,这些应用的监控指标需要支持各种语言的 ClientLibrary 才能生产和暴露。

Push Gateway:用于网络不可直达或者短期任务存储指标数据。主要用于临时性任务

Exporters:采集已有的第三方服务监控指标并暴露 metrics

Alertmanager:告警

WebUI:Prometheus 自带的简单的 web 控制台

监控指标数据采集

Prometheus 内置了 TSDB 数据库,存储在本地的文件系统中,被监控端的监控指标都将存储在 TSDB 数据库中。

监控指标的获取有 2 种方式:

一种是 Prometheus 主动去 Pushgateway 拉取数据,主要是一些定时任务类型的短期进程暴露的指标,因为只有运行的时候才会产生指标数据,所以定期获取数据是不可行的,会将运行时产生的监控指标数据汇总到 Pushgateway,等待 Prometheus Server 拉取数据。

一种是通过 exporter 获取监控指标数据,等待 Prometheus Server 拉取数据,是永久性的长期进程,举个例子就比如常用的中间件应用,Tomcat、Nginx、Mysql、Etcd、微服务等等这样的持续性运行的程序,会通过 export 来采集数据,向 Prometheus Server 端发送监控指标数据。

监控的展现方式

Prometheus 的展现方式有 3 种:

  • Prometheus Web UI:Prometheus 自带了 Web UI 界面,但展现形式并没有很直观和舒服,可以通过一些 PromQL 来进行查看数据。
  • Grafana:最炫酷、最好的一种展现方式就是集成 Grafana通过 HTTP 接口在 TSDB 中查询数据展示到 Grafana 中。
  • API clients:Prometheus 也可以使用接口来进行查询数据集成到自己开发的监控系统中。

监控告警

Prometheus 的监控告警由 Alertmanager 组件来完成,根据运维人员在 Prometheus Server 定义的告警规则,对比指标数据是否出发告警,并将通知发送给 Alertmanager,然后将告警事件发送给告警接收人(Email/企业微信/钉钉)

服务发现

正常情况每个服务的监控,都需要将监控该服务的 exporter 配置到 Prometheus Server 的配置文件中,每一个都需要手动配置,通过服务发现即可省去手动繁琐的配置,让服务自动加入到 Prometheus Server。

Prometheus 的服务发现:

  • Kubernetes:k8s 的容器 Pod 的服务发现。
  • file_sd:基于文件的服务发现,Prometheus 会定时从文件中读取最新的 Target 信息,无论通过何种方式,将 Target 信息写入文件即可自动纳入监控。
  • consul:基于 Consul 的服务发现,通过将 exporter 注册到 Consul,Prometheus 通过指定配置即可获取 Consul 中注册的 exporter。

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0