Prometheus 是一个开源的系统监控和报警工具包,由 SoundCloud 开发并于 2012 年发布。现已成为云原生计算基金会(CNCF)的一部分。Prometheus 通过抓取(scraping)指标(metrics)来收集和存储数据,以实现高效的监控和报警。以下是对 Prometheus 的详细介绍:
核心概念
1. 指标(Metrics)
Prometheus 主要收集四种类型的指标:
- Counter:单调递增的计数器,只增不减,用于统计请求数、错误数等。
- Gauge:可以增减的指标,反映当前状态,例如温度、内存使用等。
- Histogram:直方图,用于统计请求的分布,例如请求延迟。
- Summary:汇总,用于统计请求的分布和百分位数。
2. 抓取(Scraping)
Prometheus 通过 HTTP 请求定期抓取目标(target)上的指标数据,目标通常暴露在特定的 URL(即 /metrics 端点)上。
3. 时间序列(Time Series)
Prometheus 将每个指标存储为一个时间序列数据,包含时间戳、指标名称、标签和值。
4. 标签(Labels)
每个时间序列都可以有多个标签(键值对),用于区分相同指标的不同维度,例如 instance、job 等。
5. PromQL
Prometheus 提供了一种强大的查询语言 PromQL,用于对时间序列数据进行查询和聚合。
6. Alertmanager
Prometheus 集成了 Alertmanager,用于处理由 Prometheus 发送的报警,支持报警分组、路由、抑制和通知。
7. Exporter
Prometheus 通过 Exporter 从不同的系统和服务中收集指标数据,常见的 Exporter 有 Node Exporter、MySQL Exporter、Kafka Exporter 等。
架构
Prometheus 由多个组件组成,包括:
- Prometheus Server:核心组件,负责抓取和存储时间序列数据,处理查询。
- Alertmanager:处理报警通知。
- Pushgateway:用于临时任务将指标推送到 Prometheus。
- Exporters:用于暴露指标数据的代理。
- Prometheus Web UI:用于查看指标和查询结果。
- Prometheus Console Templates:自定义的仪表盘和图表模板。
主要功能
1. 数据抓取
Prometheus 定期从配置的目标抓取指标数据。目标可以是静态配置的,也可以通过服务发现动态发现。
2. 数据存储
Prometheus 使用基于时间序列的存储引擎,以高效地存储和压缩指标数据,支持高写入和读取性能。
3. 查询与聚合
通过 PromQL,用户可以对存储的时间序列数据进行复杂的查询和聚合,生成图表和报警条件。
4. 报警
Prometheus 支持定义报警规则,并将报警发送到 Alertmanager,Alertmanager 进一步处理报警通知和路由。
5. 可视化
Prometheus 自带的 Web UI 和第三方工具(如 Grafana)可以用来可视化指标数据,创建丰富的仪表盘和图表。
使用示例
安装 Prometheus
首先,下载并解压 Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.41.0/prometheus-2.41.0.linux-amd64.tar.gz
tar xvfz prometheus-2.41.0.linux-amd64.tar.gz
cd prometheus-2.41.0.linux-amd64
配置 Prometheus
编辑 prometheus.yml 配置文件,添加监控目标:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
启动 Prometheus
./prometheus --config.file=prometheus.yml
查看指标
访问 Prometheus Web UI(默认端口 9090),在浏览器中输入 http://localhost:9090。
添加 Exporter
以 Node Exporter 为例,用于监控主机系统指标:
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.5.0.linux-amd64.tar.gz
cd node_exporter-1.5.0.linux-amd64
./node_exporter
在 prometheus.yml 中添加 Node Exporter 的配置:
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
创建报警规则
在 prometheus.yml 中添加报警规则文件:
rule_files:
- "alert.rules"
编辑 alert.rules 文件,添加报警规则:
groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: 'critical'
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute."
配置 Alertmanager
编辑 alertmanager.yml 配置文件:
global:
resolve_timeout: 5m
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'you@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'yourusername'
auth_password: 'yourpassword'
启动 Alertmanager:
./alertmanager --config.file=alertmanager.yml
在 prometheus.yml 中添加 Alertmanager 配置:
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
总结
Prometheus 是一个强大的监控和报警工具,具有高效的指标收集、存储和查询能力。它的灵活性和可扩展性使其成为现代云原生环境中广泛使用的监控解决方案。通过结合 PromQL、Alertmanager 和各种 Exporter,用户可以实现全面的系统监控和报警通知。

1246

被折叠的 条评论
为什么被折叠?



