架构基础 -- 打点系统之FastAPI、python、grafana、prometheus实现
基于 FastAPI 构建打点上报系统
系统架构概述
本系统使用 FastAPI 构建 RESTful API 服务,用于接收打点数据,并将其格式化为 Prometheus 可理解的指标格式。Prometheus 从 FastAPI 应用中定期拉取数据,并存储这些数据。Grafana 用于可视化 Prometheus 中的数据,提供实时监控面板和报警功能。
1. FastAPI 应用(RESTful API 服务)
1.1 安装 FastAPI 和 Uvicorn
首先,安装 FastAPI 及其运行所需的 Uvicorn 服务器。
pip install fastapi uvicorn prometheus-client
1.2 定义打点数据结构
使用 Pydantic 定义一个模型来表示打点数据。
from pydantic import BaseModel
class Metric(BaseModel):
name: str
value: float
1.3 实现 FastAPI 应用
创建一个 FastAPI 应用来接收打点数据并将其注册为 Prometheus 的指标。
from fastapi import FastAPI, HTTPException
from prometheus_client import Counter, generate_latest, REGISTRY
from fastapi.responses import PlainTextResponse
app = FastAPI()
# 创建一个 Prometheus 指标
metrics = {}
@app.post("/metrics")
async def create_metric(metric: Metric):
if metric.name not in metrics:
metrics[metric.name] = Counter(metric.name, f'Description of {metric.name}')
metrics[metric.name].inc(metric.value)
return {"status": "ok"}
@app.get("/metrics")
async def get_metrics():
return PlainTextResponse(generate_latest(REGISTRY), media_type="text/plain")
1.4 运行 FastAPI 应用
使用 Uvicorn 运行 FastAPI 应用。
uvicorn main:app --host 0.0.0.0 --port 8080
2. Prometheus 配置
2.1 下载 Prometheus
从 Prometheus 官方网站 下载并安装 Prometheus。
2.2 配置 Prometheus
编辑 prometheus.yml
,添加 FastAPI 应用的 scrape 配置。
scrape_configs:
- job_name: 'fastapi_app'
static_configs:
- targets: ['localhost:8080']
2.3 启动 Prometheus
./prometheus --config.file=prometheus.yml
3. Grafana 配置
3.1 下载 Grafana
从 Grafana 官方网站 下载并安装 Grafana。
3.2 添加 Prometheus 数据源
- 登录 Grafana。
- 前往 “Configuration” -> “Data Sources” -> “Add data source”。
- 选择 “Prometheus”,并配置 URL 为
http://localhost:9090
。
3.3 创建仪表板
- 创建一个新的仪表板,选择刚才添加的 Prometheus 数据源。
- 使用 Prometheus 的指标语法(如
example_metric
)来创建图表,展示实时数据。
4. 运行与测试
4.1 启动 FastAPI 应用
uvicorn main:app --host 0.0.0.0 --port 8080
4.2 测试打点上报
使用 curl
或者 Postman 向 /metrics
接口发送打点数据。
curl -X POST http://localhost:8080/metrics -d '{"name": "example_metric", "value": 1}'
4.3 查看 Grafana 仪表板
在 Grafana 中,你应该可以看到实时更新的打点数据。
5. 扩展与优化
- 支持更多指标类型:例如,支持
Gauge
或Histogram
类型的指标。 - 添加报警:在 Grafana 中配置报警规则,以便在指标超出阈值时通知你。
- 优化性能:对 FastAPI 应用进行性能优化,确保在高并发环境下依然能高效处理打点请求。
通过这些步骤,你可以使用 Python 和 FastAPI 构建一个功能完善的打点上报系统,实现对应用程序的实时监控与分析。