跳到主要内容

Prometheus与Grafana集成

介绍

在现代分布式系统中,监控和可视化是确保系统可靠性的关键。Prometheus 是一个开源的监控和告警工具,专注于时间序列数据的收集与存储。Grafana 则是一个强大的可视化平台,支持多种数据源(包括 Prometheus),能够将监控数据转化为直观的图表和仪表盘。

通过将 Prometheus 与 Grafana 集成,您可以:

  • 实时监控系统指标(如 CPU、内存、请求延迟等)。
  • 创建动态仪表盘,直观展示数据趋势。
  • 设置告警规则,及时发现异常。

前置条件

在开始之前,请确保:

  1. 已安装并运行 Prometheus
  2. 已安装并运行 Grafana
  3. Prometheus 已配置监控目标(例如通过 scrape_configs 收集指标)。
提示

使用 Docker 快速启动 Prometheus 和 Grafana:

bash
docker run -d --name=prometheus -p 9090:9090 prom/prometheus
docker run -d --name=grafana -p 3000:3000 grafana/grafana

步骤 1:配置 Prometheus 数据源

  1. 登录 Grafana(默认地址为 http://localhost:3000,初始用户名/密码为 admin/admin)。
  2. 导航到 Configuration > Data Sources,点击 Add data source
  3. 选择 Prometheus,填写以下信息:
    • URL: Prometheus 的服务地址(例如 http://localhost:9090)。
    • Access: 选择 Server(默认)。

保存后,Grafana 会测试连接。如果显示 "Data source is working",说明配置成功。

备注

如果 Prometheus 需要认证,需在 Auth 部分配置凭据。


步骤 2:创建第一个仪表盘

示例:监控 HTTP 请求速率

假设 Prometheus 正在监控一个 Web 服务,并收集了 http_requests_total 指标。

  1. 在 Grafana 中,点击 Create > Dashboard
  2. 添加一个新的 Panel,选择 Time series 图表类型。
  3. 在查询编辑器中选择 Prometheus 数据源,输入 PromQL 查询:
    promql
    rate(http_requests_total[5m])
  4. 设置图表标题(如 "HTTP 请求速率")和坐标轴单位(如 "requests/s")。

保存仪表盘后,您将看到类似下图的可视化结果:


实际案例:微服务监控

场景描述

一个微服务架构包含以下组件:

  • 服务A:处理用户请求,暴露 service_a_requests_total 指标。
  • 服务B:调用数据库,暴露 service_b_db_latency_seconds 指标。

实现步骤

  1. 在 Prometheus 中配置服务发现(如 Kubernetes 或静态配置):
    yaml
    scrape_configs:
    - job_name: 'services'
    static_configs:
    - targets: ['service_a:8080', 'service_b:8080']
  2. 在 Grafana 中创建仪表盘,添加以下面板:
    • 请求总量:sum(rate(service_a_requests_total[5m])) by (status_code)
    • 数据库延迟:histogram_quantile(0.95, sum(rate(service_b_db_latency_seconds_bucket[5m])) by (le))

高级功能

告警规则

在 Grafana 中设置告警(例如当请求错误率 > 5% 时触发):

  1. 编辑面板,点击 Alert 选项卡。
  2. 设置条件:sum(rate(service_a_requests_total{status_code=~"5.."}[5m])) / sum(rate(service_a_requests_total[5m])) > 0.05
  3. 配置通知渠道(如 Slack 或 Email)。

变量与模板

使用变量动态过滤数据:

  1. 在仪表盘设置中定义变量(如 $service)。
  2. 在查询中使用变量:
    promql
    rate(${service}_requests_total[$__interval])

总结

通过集成 Prometheus 和 Grafana,您可以:

  • 将原始指标转化为直观的可视化图表。
  • 快速定位性能瓶颈或异常。
  • 通过告警机制主动发现问题。

延伸学习

  1. 官方文档
  2. 练习建议
    • 尝试监控一个简单的 Python Flask 应用的请求延迟。
    • 使用 node_exporter 监控主机资源(CPU/内存)。
警告

避免在生产环境使用默认密码!务必配置 Grafana 的认证和权限控制。