当前位置: 首页 > article >正文

架构基础 -- 打点系统之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. 扩展与优化

  • 支持更多指标类型:例如,支持 GaugeHistogram 类型的指标。
  • 添加报警:在 Grafana 中配置报警规则,以便在指标超出阈值时通知你。
  • 优化性能:对 FastAPI 应用进行性能优化,确保在高并发环境下依然能高效处理打点请求。

通过这些步骤,你可以使用 Python 和 FastAPI 构建一个功能完善的打点上报系统,实现对应用程序的实时监控与分析。


http://www.kler.cn/news/290643.html

相关文章:

  • Unity数据持久化 之 文件操作(增删查改)
  • 【赵渝强老师】大数据生态圈中的组件
  • 8 自研rgbd相机基于rk3566之sensor图像解析与AWB算法原理
  • SQL语言的规则和规范
  • 盘点成都产业园前十,寻找你的理想创业地!
  • Pencils Protocol生态新进展,即将上线 Vault 产品
  • Python的list和numpy的array有什么区别?
  • 2024自动化测试面试真题(附答案)!
  • 基于FPGA的OV5640摄像头图像采集
  • centOS如何查看并放行防火墙3306端口
  • 无人机喊话器详解!!!
  • flannel,etcd,docker
  • Jmeter(十四)Jmeter分布式部署测试
  • LeetCode - 10 正则表达式匹配
  • C#文件的输入和输出
  • MATLAB生成COE文件
  • Java类和对象之构造方法与对象创建之计算数学中的分数值
  • 谈谈AI领域的认知误区、机会点与面临的挑战
  • 如何对 PDF 进行密码保护
  • 微服务架构下的服务治理实现方案详解
  • Nginx源码阅读1-内存池
  • Linux驱动(五):Linux2.6驱动编写之设备树
  • 传统CV算法——图像基本操作与形态学操作
  • 【软件技巧】第35课,软件逆向安全工程师之汇编指令mov、ptr、xchg交换指令,每天5分钟学习逆向吧!
  • 枚举+数学,CF 449A - Jzzhu and Chocolate
  • AI科学家:自动化科研的未来之路
  • Java JAR命令打包详解与坑点
  • 【适配器】设计模式:旧系统迁移与第三方库集成的解决方案
  • ElasticSearch-聚合操作
  • 【大数据】浅谈Pyecharts:数据可视化的强大工具