FastAPI 教程

17.3 指标收集:Prometheus + Grafana

FastAPI监控教程:使用Prometheus和Grafana实现指标收集和可视化

FastAPI 教程

通过本教程,学习如何在FastAPI应用中集成Prometheus和Grafana,实现高效指标收集和可视化监控。从安装到配置,适合初学者快速掌握监控实践。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

FastAPI指标收集与监控:使用Prometheus和Grafana

引言

在现代Web开发中,应用的性能和可靠性至关重要。指标收集和监控可以帮助我们实时了解应用状态,快速定位问题。本教程将详细指导您如何在FastAPI应用中集成Prometheus和Grafana,实现强大的指标收集和可视化监控。适合初学者,从基础概念到实际操作,一步步带您上手。

第一部分:指标收集和监控简介

什么是指标收集?

  • 指标:指应用的性能数据,如请求数量、响应时间、内存使用等。
  • 收集:通过工具自动抓取这些数据,用于分析和监控。

为什么在FastAPI中使用Prometheus和Grafana?

  • Prometheus:一个开源的监控和警报工具,擅长收集时间序列数据。
  • Grafana:一个可视化平台,可以将Prometheus的数据以图表形式展示。
  • 结合FastAPI,可以构建一个完整的监控解决方案,提升应用的可观察性。

第二部分:安装和设置

前置条件

  • Python 3.7或更高版本。
  • 基础FastAPI知识(建议先学习FastAPI官方文档)。

安装所需库

打开终端,使用pip安装必要的库:

pip install fastapi uvicorn prometheus-client
  • prometheus-client:Python的Prometheus客户端库,用于在FastAPI中暴露指标。

安装Prometheus和Grafana

由于Prometheus和Grafana通常是独立服务,您可以选择以下方式之一:

  1. 使用Docker(推荐,简单快捷):
    • 安装Docker和Docker Compose。
    • 创建docker-compose.yml文件配置Prometheus和Grafana。
  2. 手动安装
    • 从官方网站下载Prometheus和Grafana,并按照指南安装。

为简化教程,我们将使用Docker方式。创建一个docker-compose.yml文件:

version: '3'
services:
  prometheus:
    image: prom/prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin  # 设置Grafana管理员密码
    volumes:
      - ./grafana:/var/lib/grafana

创建一个Prometheus配置文件prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'fastapi'
    static_configs:
      - targets: ['localhost:8000']  # FastAPI应用运行的地址

启动服务

在项目目录下运行:

docker-compose up -d

这将在后台启动Prometheus(端口9090)和Grafana(端口3000)。

第三部分:集成Prometheus到FastAPI

在FastAPI应用中添加Prometheus客户端

创建一个新的FastAPI应用文件,例如main.py

from fastapi import FastAPI
from prometheus_client import make_wsgi_app, Counter, Histogram
from prometheus_client.core import REGISTRY
import time

app = FastAPI()

# 定义一些指标
REQUEST_COUNT = Counter('fastapi_requests_total', 'Total number of requests')
REQUEST_LATENCY = Histogram('fastapi_request_latency_seconds', 'Request latency in seconds')

# 添加Prometheus WSGI中间件以暴露指标端点
app.mount("/metrics", make_wsgi_app())

@app.get("/")
def read_root():
    REQUEST_COUNT.inc()  # 递增请求计数器
    with REQUEST_LATENCY.time():  # 测量请求延迟
        # 模拟一些处理
        time.sleep(0.1)
    return {"message": "Hello, World!"}

@app.get("/health")
def health_check():
    return {"status": "healthy"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

代码解释

  • 导入库prometheus_client用于创建和暴露指标。
  • 定义指标Counter用于计数请求,Histogram用于测量延迟。
  • 暴露端点:使用app.mount("/metrics", make_wsgi_app())将指标暴露在/metrics路径,供Prometheus抓取。

运行FastAPI应用

在终端运行:

python main.py

访问 http://localhost:8000/metrics 应该能看到Prometheus格式的指标数据。

第四部分:配置Grafana可视化

访问Grafana

  1. 打开浏览器,访问 http://localhost:3000
  2. 使用默认用户名admin和密码admin登录(基于docker-compose.yml设置)。

添加Prometheus数据源

  1. 在Grafana左侧菜单,点击 Configuration > Data Sources
  2. 点击 Add data source,选择 Prometheus
  3. 设置URL为 http://prometheus:9090(或http://localhost:9090)。
  4. 点击 Save & Test,确认连接成功。

创建仪表板

  1. 在左侧菜单,点击 Dashboards > New Dashboard
  2. 点击 Add new panel
  3. 在查询编辑器输入PromQL查询,例如:
    • rate(fastapi_requests_total[5m]):显示5分钟内请求率。
    • fastapi_request_latency_seconds_sum:显示总延迟。
  4. 自定义图表类型和样式,然后保存。

示例仪表板

您可以创建多个面板,监控不同指标,如请求数、延迟、错误率等。

第五部分:完整示例和测试

测试监控流程

  1. 确保所有服务运行:
    • FastAPI应用(python main.py)。
    • Prometheus和Grafana(通过Docker Compose)。
  2. 访问FastAPI端点(如 http://localhost:8000/)生成一些请求。
  3. 在Prometheus UI(http://localhost:9090)查看抓取的数据。
  4. 在Grafana仪表板查看可视化图表。

扩展指标

您可以根据需要添加更多指标,例如:

  • 错误计数:使用Counter跟踪HTTP错误。
  • 内存使用:集成系统指标库如psutil

第六部分:总结和最佳实践

总结

本教程演示了如何在FastAPI应用中集成Prometheus和Grafana,实现指标收集和监控。关键步骤包括:安装工具、暴露指标端点、配置可视化。

最佳实践

  • 安全性:在生产中,保护/metrics端点,避免公开敏感数据。
  • 指标设计:定义清晰的指标名称和标签,便于查询和分析。
  • 持续监控:设置警报,基于指标触发通知。
  • 优化性能:监控指标本身可能引入开销,确保不影响应用性能。

进一步学习

  • 阅读Prometheus和Grafana官方文档。
  • 探索高级功能,如自定义告警规则和仪表板共享。

通过本教程,您应该能够为FastAPI应用建立一个基本的监控系统。随着项目增长,可以根据需求扩展和优化。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包