Prometheus
外观
Prometheus 是一个开源的系统监控和警报工具包,最初由SoundCloud开发,现已成为云原生计算基金会(CNCF)的毕业项目。它采用时间序列数据模型,专为可靠性设计,能够在服务中断时快速诊断问题。
概述[编辑 | 编辑源代码]
Prometheus 的核心特性包括:
- 多维数据模型(由指标名称和键/值对定义的时间序列)
- 灵活的查询语言(PromQL)
- 不依赖分布式存储,单个服务器节点自治
- 通过HTTP拉取方式收集时间序列数据
- 支持通过中间网关推送时间序列
- 通过服务发现或静态配置发现目标
- 多种图形和仪表板支持(特别是与Grafana集成)
架构[编辑 | 编辑源代码]
主要组件包括:
- Prometheus Server:核心组件,负责抓取和存储时间序列数据
- Client Libraries:用于检测应用程序代码的客户端库
- Push Gateway:支持短生命周期任务的指标推送
- Exporters:为现有服务暴露Prometheus格式的指标
- Alertmanager:处理警报通知
- 各种支持工具
数据模型[编辑 | 编辑源代码]
Prometheus 将所有数据存储为时间序列,每个时间序列由:
- 指标名称(metric name)
- 一组标签(labels,键值对)
- 时间戳
- 浮点数值
示例指标格式: ``` http_requests_total{method="POST",handler="/messages",status="200"} 1027 1395066363000 ```
安装与配置[编辑 | 编辑源代码]
二进制安装[编辑 | 编辑源代码]
# 下载最新版本
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvfz prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64
# 启动Prometheus
./prometheus --config.file=prometheus.yml
Docker安装[编辑 | 编辑源代码]
docker run -d -p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
配置示例[编辑 | 编辑源代码]
基本的prometheus.yml配置:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
PromQL查询语言[编辑 | 编辑源代码]
PromQL是Prometheus的查询语言,示例查询:
- 过去5分钟HTTP请求率:
rate(http_requests_total[5m])
- 按状态分组的HTTP请求:
sum by (status) (http_requests_total)
- CPU使用率超过80%的实例:
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100 > 80
警报规则[编辑 | 编辑源代码]
警报规则示例(alert.rules):
groups:
- name: example
rules:
- alert: HighErrorRate
expr: job:request_error_rate:avg5m{job="myjob"} > 0.5
for: 10m
labels:
severity: critical
annotations:
summary: "High error rate on {{ $labels.instance }}"
description: "Error rate is {{ $value }}"
与其他工具集成[编辑 | 编辑源代码]
- Grafana:可视化Prometheus指标
- Alertmanager:处理警报通知
- 各种Exporters:
* node_exporter:机器指标 * blackbox_exporter:探测HTTP/HTTPS等 * mysqld_exporter:MySQL指标
- Kubernetes:原生支持Prometheus监控
实际应用案例[编辑 | 编辑源代码]
微服务监控[编辑 | 编辑源代码]
Prometheus常用于监控微服务架构,通过服务发现自动找到新实例并开始收集指标。
业务指标监控[编辑 | 编辑源代码]
除了系统指标,Prometheus还可用于监控业务指标,如:
- 网站访问量
- 订单处理速率
- API调用成功率
优缺点[编辑 | 编辑源代码]
优点[编辑 | 编辑源代码]
- 强大的查询语言PromQL
- 不依赖分布式存储
- 活跃的社区和生态系统
- 与Kubernetes深度集成
局限性[编辑 | 编辑源代码]
- 不是事件或日志记录系统
- 对水平扩展的支持有限
- 长期存储需要额外组件