你能介绍一下关于Prometheus的入门级知识吗?

2026-05-05 20:041阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计810个文字,预计阅读时间需要4分钟。

你能介绍一下关于Prometheus的入门级知识吗?

Prometheus 核心组件、职责和实例、时间序列、PromQL

Prometheus 是一个开源的监控和警报系统。它包含核心组件、处理职责和实例的数据、使用时间序列存储监控数据,以及通过 PromQL 进行灵活的数据查询。以下是其整体架构概览:

  • 核心组件
  • 任务和实例
  • 时间序列
  • PromQL
核心组件

Prometheus是一个开源的监控告警系统,它支持按多个维度存储监控数据,配套的PromQL可以对数据进行灵活的查询。
下图为其整体的架构:

主要包含四部分:

  • Prometheus Server,Prometheus Server用于从Exporters拉取数据,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中(Prometheus Server本身也是一个时序数据库);并支持通过PromQL和通过API Client对数据进行查询; 它还负责通过服务发现或者静态配置的方式来识别监控目标。
  • Exporters,用于从监控目标采集数据,并先Prometheus Server提供收集数据的端口。是一个广义的概念,只要可以支持Server获取监控数据,就可以称为Exporter。具体分为两类:直接采集:此类Exporter直接内置了对Prometheus监控的支持,如cAdvisor, Kubernetes, Etcd等;间接采集:被监控目标不支持直接采集,需要集成专门的类库,比如Mysql Exporter, Consule Exporter, ASP.NET Core Exporter等。
  • PushGateway,Prometheus采用Pull模式采集数据,Server会定期调用Exporter提供的端口;但对于定期运行的Job类应用来说,并不是总能采集到数据,此外也可能受网络的限制,Server无法访问到Exporter,这些情况下,可以使用PushGateway进行数据的中转,由Exporter采用Push模式主动将数据发送到PushGateway,再由Server从PushGateway拉取数据。
  • AlertManager,Prometheus Server支持基于PromQL创建告警规则,如果规则满足,会产生一条告警,告警的后续处理流程由AlertManager来处理,它内置支持邮件、Slack等方式,也可以通过WebHook支持更多的自定义方式。
通过Docker容器启动

docker run -p 9090:9090 -v ${pwd}\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

启动完成后,可以通过localhost:9090/graph 访问Prometheus的UI界面,或者通过localhost:9090/metrics查看原始数据。

任务和实例

prometheus.yml的配置示例:

global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node' static_configs: - targets: ['localhost:9100']

这段基本的prometheus.yml进行了对任务(job_name)、实例(targets)、抓取间隔(scrape_interval)的配置。
实例:暴露监控样本数据的HTTP服务,也就是Exporter的HTTP端口地址;
任务: 一组相同采集目的的实例,或者同一个采集进程的多个副本则通过任务来管理。

时间序列

Prometheus会将所有采集到的样本数据以时间序列(time-series)的方式保存在内存数据库中,并且定时保存到硬盘上。time-series是按照时间戳和值的序列顺序存放的,称为向量(vector). 每条time-series通过指标名称(metrics name)和一组标签集(labelset)命名。可以将time-series理解为一个以时间为X轴的数字矩阵。

^ │ . . . . . . . . . . . . . . . . . . . node_cpu{cpu="cpu0",mode="idle"} │ . . . . . . . . . . . . . . . . . . . node_cpu{cpu="cpu0",mode="system"} │ . . . . . . . . . . . . . . . . . . node_load1{} │ . . . . . . . . . . . . . . . . . . v <------------------ time ----------------> Sample

矩阵的每一个点称为一个样本(sample),样本由以下三部分组成:

你能介绍一下关于Prometheus的入门级知识吗?

  • 指标(metric):metric name和描述当前样本特征的labelsets;
  • 时间戳(timestamp):一个精确到毫秒的时间戳;
  • 样本值(value):一个float64的浮点型数据,表示当前样本的值。

<--------------- metric ---------------------><-timestamp -><-value-> yunlzheng.gitbook.io/prometheus-book/

本文共计810个文字,预计阅读时间需要4分钟。

你能介绍一下关于Prometheus的入门级知识吗?

Prometheus 核心组件、职责和实例、时间序列、PromQL

Prometheus 是一个开源的监控和警报系统。它包含核心组件、处理职责和实例的数据、使用时间序列存储监控数据,以及通过 PromQL 进行灵活的数据查询。以下是其整体架构概览:

  • 核心组件
  • 任务和实例
  • 时间序列
  • PromQL
核心组件

Prometheus是一个开源的监控告警系统,它支持按多个维度存储监控数据,配套的PromQL可以对数据进行灵活的查询。
下图为其整体的架构:

主要包含四部分:

  • Prometheus Server,Prometheus Server用于从Exporters拉取数据,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中(Prometheus Server本身也是一个时序数据库);并支持通过PromQL和通过API Client对数据进行查询; 它还负责通过服务发现或者静态配置的方式来识别监控目标。
  • Exporters,用于从监控目标采集数据,并先Prometheus Server提供收集数据的端口。是一个广义的概念,只要可以支持Server获取监控数据,就可以称为Exporter。具体分为两类:直接采集:此类Exporter直接内置了对Prometheus监控的支持,如cAdvisor, Kubernetes, Etcd等;间接采集:被监控目标不支持直接采集,需要集成专门的类库,比如Mysql Exporter, Consule Exporter, ASP.NET Core Exporter等。
  • PushGateway,Prometheus采用Pull模式采集数据,Server会定期调用Exporter提供的端口;但对于定期运行的Job类应用来说,并不是总能采集到数据,此外也可能受网络的限制,Server无法访问到Exporter,这些情况下,可以使用PushGateway进行数据的中转,由Exporter采用Push模式主动将数据发送到PushGateway,再由Server从PushGateway拉取数据。
  • AlertManager,Prometheus Server支持基于PromQL创建告警规则,如果规则满足,会产生一条告警,告警的后续处理流程由AlertManager来处理,它内置支持邮件、Slack等方式,也可以通过WebHook支持更多的自定义方式。
通过Docker容器启动

docker run -p 9090:9090 -v ${pwd}\prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

启动完成后,可以通过localhost:9090/graph 访问Prometheus的UI界面,或者通过localhost:9090/metrics查看原始数据。

任务和实例

prometheus.yml的配置示例:

global: scrape_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node' static_configs: - targets: ['localhost:9100']

这段基本的prometheus.yml进行了对任务(job_name)、实例(targets)、抓取间隔(scrape_interval)的配置。
实例:暴露监控样本数据的HTTP服务,也就是Exporter的HTTP端口地址;
任务: 一组相同采集目的的实例,或者同一个采集进程的多个副本则通过任务来管理。

时间序列

Prometheus会将所有采集到的样本数据以时间序列(time-series)的方式保存在内存数据库中,并且定时保存到硬盘上。time-series是按照时间戳和值的序列顺序存放的,称为向量(vector). 每条time-series通过指标名称(metrics name)和一组标签集(labelset)命名。可以将time-series理解为一个以时间为X轴的数字矩阵。

^ │ . . . . . . . . . . . . . . . . . . . node_cpu{cpu="cpu0",mode="idle"} │ . . . . . . . . . . . . . . . . . . . node_cpu{cpu="cpu0",mode="system"} │ . . . . . . . . . . . . . . . . . . node_load1{} │ . . . . . . . . . . . . . . . . . . v <------------------ time ----------------> Sample

矩阵的每一个点称为一个样本(sample),样本由以下三部分组成:

你能介绍一下关于Prometheus的入门级知识吗?

  • 指标(metric):metric name和描述当前样本特征的labelsets;
  • 时间戳(timestamp):一个精确到毫秒的时间戳;
  • 样本值(value):一个float64的浮点型数据,表示当前样本的值。

<--------------- metric ---------------------><-timestamp -><-value-> yunlzheng.gitbook.io/prometheus-book/