跳转到内容

Prometheus

Prometheus 是一个开源的系统监控和警报工具包,最初由SoundCloud开发,现已成为云原生计算基金会(CNCF)的毕业项目。它采用时间序列数据模型,专为可靠性设计,能够在服务中断时快速诊断问题。

概述[编辑 | 编辑源代码]

Prometheus 的核心特性包括:

  • 多维数据模型(由指标名称和键/值对定义的时间序列)
  • 灵活的查询语言(PromQL)
  • 不依赖分布式存储,单个服务器节点自治
  • 通过HTTP拉取方式收集时间序列数据
  • 支持通过中间网关推送时间序列
  • 通过服务发现或静态配置发现目标
  • 多种图形和仪表板支持(特别是与Grafana集成)

架构[编辑 | 编辑源代码]

graph TD P[Prometheus Server] -->|拉取指标| T[Targets] P -->|规则评估| R[Recording Rules] P -->|触发警报| A[Alertmanager] A -->|通知| N[Email/Slack/PagerDuty] P -->|查询| G[Grafana] T -->|暴露指标| E[Exporters] E -->|监控| M[Applications]

主要组件包括:

  • 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 }}"

与其他工具集成[编辑 | 编辑源代码]

 * node_exporter:机器指标
 * blackbox_exporter:探测HTTP/HTTPS等
 * mysqld_exporter:MySQL指标

实际应用案例[编辑 | 编辑源代码]

微服务监控[编辑 | 编辑源代码]

Prometheus常用于监控微服务架构,通过服务发现自动找到新实例并开始收集指标。

业务指标监控[编辑 | 编辑源代码]

除了系统指标,Prometheus还可用于监控业务指标,如:

  • 网站访问量
  • 订单处理速率
  • API调用成功率

优缺点[编辑 | 编辑源代码]

优点[编辑 | 编辑源代码]

  • 强大的查询语言PromQL
  • 不依赖分布式存储
  • 活跃的社区和生态系统
  • 与Kubernetes深度集成

局限性[编辑 | 编辑源代码]

  • 不是事件或日志记录系统
  • 对水平扩展的支持有限
  • 长期存储需要额外组件

参见[编辑 | 编辑源代码]

参考资料[编辑 | 编辑源代码]

外部链接[编辑 | 编辑源代码]