你能介绍一下关于Prometheus的入门级知识吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计810个文字,预计阅读时间需要4分钟。
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 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),样本由以下三部分组成:
- 指标(metric):metric name和描述当前样本特征的labelsets;
- 时间戳(timestamp):一个精确到毫秒的时间戳;
- 样本值(value):一个float64的浮点型数据,表示当前样本的值。
<--------------- metric ---------------------><-timestamp -><-value->
yunlzheng.gitbook.io/prometheus-book/
本文共计810个文字,预计阅读时间需要4分钟。
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 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),样本由以下三部分组成:
- 指标(metric):metric name和描述当前样本特征的labelsets;
- 时间戳(timestamp):一个精确到毫秒的时间戳;
- 样本值(value):一个float64的浮点型数据,表示当前样本的值。
<--------------- metric ---------------------><-timestamp -><-value->
yunlzheng.gitbook.io/prometheus-book/

