Prometheus挺好用的,但是想用好,得把配置文件的细节都摸清楚。它的规则文件(Rules)和 PromQL 查询语言让我能灵活定义告警逻辑,监控系统健康。写这篇博客,我想分享 Prometheus 规则文件的层级结构、PromQL 的写法和常见函数、监控的核心参数,以及如何从零搭建一套监控体系,最后再聊聊怎么集成飞书和邮箱告警。

一、Prometheus 规则文件的层级结构

Prometheus 的规则文件(通常是 rules.yml)定义了告警和预计算逻辑,结构清晰,分层明确。我一般通过 prometheus.yml 加载规则文件:

rule_files:
  - "rules.yml"

rules.yml 的层级结构主要包含以下部分:

一个典型的 rules.yml 示例:

groups:
- name: api-metrics
  rules:
  - alert: HighTPS
    expr: rate(http_server_requests_seconds_count[5m]) > 100
    for: 5m
    labels:
      severity: warning
    annotations:
      summary: "接口 TPS 过高"
      description: "{{ $labels.instance }} 的 TPS 超过 100,当前值为 {{ $value }}"
- name: system-metrics
  rules:
  - alert: HighCPUUsage
    expr: system_cpu_usage > 0.8
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "CPU 使用率过高"
      description: "{{ $labels.instance }} 的 CPU 使用率超过 80%,当前值为 {{ $value }}"

这个结构让我可以按模块管理规则,比如把接口相关的放一个组,系统资源相关的放另一个组,维护起来特别清晰。

二、PromQL 怎么写:常见函数与技巧

PromQL 是 Prometheus 的查询语言,灵活得像 SQL 一样好用。我用它来写告警规则、查指标趋势。以下是我常用的函数和写法:

1. 常见 PromQL 函数

2. 写 PromQL 的小技巧

我通常先在 Prometheus 的 Web UI 里试写 PromQL,确认结果正确后再加到规则文件里,省得反复改。

三、常见监控参数

在 Spring Boot 项目中,我结合 Actuator 和 Micrometer,重点监控以下指标,基本能覆盖大部分问题场景:

这些指标我都会在 Grafana 里建仪表盘,配上曲线图和表格,问题一目了然。

四、从零搭建 Prometheus 监控体系:配置项详解

要建一套完整的 Prometheus 监控体系,我一般从上往下配置以下部分,层层递进:

1. Prometheus 主配置文件(prometheus.yml)

这是监控体系的入口,定义了抓取目标和规则文件:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - "rules.yml"

scrape_configs:
  - job_name: 'spring-boot-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['localhost:8080']

2. 规则文件(rules.yml)

定义告警和预计算逻辑,前面已经展示过示例。我会按服务或模块分组,比如 api-metricsjvm-metrics,每组里写具体的告警规则。

3. Alertmanager 配置(alertmanager.yml)

Alertmanager 负责处理告警,发送到飞书或邮箱。我的配置如下:

global:
  resolve_timeout: 5m

route:
  receiver: 'feishu'
  repeat_interval: 1h

receivers:
  - name: 'feishu'
    webhook_configs:
      - url: 'https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxxxx'
        send_resolved: true
  - name: 'email'
    email_configs:
      - to: 'team@example.com'
        from: 'prometheus@example.com'
        smarthost: 'smtp.example.com:587'
        auth_username: 'prometheus@example.com'
        auth_password: 'your_password'

4. Grafana 仪表盘

我用 Grafana 可视化指标,创建仪表盘展示 TPS、内存、CPU 等。数据源配置指向 Prometheus,PromQL 查询直接复用规则里的表达式。

5. Spring Boot 应用配置

在 Spring Boot 的 application.yml 里启用 Actuator 和 Prometheus:

management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    tags:
      application: my-app

这一套体系从数据采集(Spring Boot)、存储查询(Prometheus)、告警(Alertmanager)到可视化(Grafana),层次分明,覆盖了监控全流程。

五、集成飞书和邮箱告警的细节

1. 飞书告警

飞书告警靠 webhook 实现,配置简单:

我喜欢飞书告警是因为实时性强,团队能第一时间看到问题。

2. 邮箱告警

邮箱告警适合正式通知,比如发送给管理层。我用公司 SMTP 服务器配置:

- name: 'email'
  email_configs:
    - to: 'team@example.com'
      from: 'prometheus@example.com'
      smarthost: 'smtp.example.com:587'
      auth_username: 'prometheus@example.com'
      auth_password: 'your_password'
      require_tls: true

邮箱告警的格式可以通过模板自定义,比如加公司 logo 或详细描述。我一般会让飞书处理紧急告警,邮箱用来归档。

六、总结

通过 Prometheus 的规则文件和 PromQL,我能灵活监控 TPS、内存、CPU 等关键指标。规则文件的层级结构(groups → rules → alert/expr)基本上让我们能很好的监控数据的变化,PromQL 的函数(rate、sum、histogram_quantile)帮我分析数据,挖掘问题。搭建监控体系时,我从 prometheus.ymlrules.yml 再到 Alertmanager,层层配置,最后用 Grafana 做可视化,飞书和邮箱告警确保问题不漏网。

总而言之,言而总之。想充分理解配置的细节,一方面是看Prometheus.yml,另一方面是rules.yml,最后就是alertmanager.yml。这三个yml文件学明白了,基本问题不大。其次就是具体监控的expression,常用的基本是rate(),余下几个留个印象即可。