Python项目监控指标设计需覆盖存活性、资源消耗、业务逻辑、内部状态四类指标,采用Prometheus语义化命名与多维标签,分层埋点延迟与错误,并用prometheus_client+psutil轻量落地。
Python项目监控指标设计,核心是围绕“运行状态是否健康、问题能否快速定位、趋势是否可预测”这三点展开。不是堆砌指标,而是选对指标、打上合理标签、设定有效阈值、配合可视化与告警。
一个Python服务(如Flask/FastAPI后台、Celery任务、数据处理脚本)的运行状态,至少要采集以下四类基础指标:
psutil.pid_exists()或HTTP探针返回200)、启动时间、Uptime秒数;不推荐用api_response_time_ms这种模糊名,而应采用Prometheus风格的语义化命名+多维标签:
python_http_request_duration_seconds_bucket(直指用途+单位+类型);app_name(服务名)、env(prod/staging)、endpoint(如/v1/user)、method(GET/POST)、status_code;user_id或原始request_id会导致存储爆炸,改用user_type=premium或region=cn-east等聚合维度。同一接口的延迟,在不同环节意义不同,需分层埋点:
contextvars或装饰器隔离);db_name、upstream_host等标签;client_error(4xx,参数校验失败)、server_error(5xx,DB连不上/空指针)、timeout_error(requests超时),各自独立计数并告警。无需引入复杂APM,几行代码就能暴露核心指标:
pip install prometheus-client psutil;from prometheus_client import Counter, Histogram, Gauge
from psutil import Process
# 定义
HTTP_REQUESTS_TOTAL = Counter('http_requests_total', 'Total HTTP Requests', ['method', 'endpoint', 'status_code'])
HTTP_REQUEST_DURATION = Histogram('http_request_duration_seconds', 'HTTP Request Duration', ['endpoint'])
PROCESS_MEMORY_MB = Gauge('process_memory_mb', 'Process Memory Usage (MB)')
:@app.middleware('http')
async def record_metrics(request, call_next):
start = time.time()
response = await call_next(request)
duration = time.time() - start
HTTP_REQUEST_DURATION.labels(endpoint=request.url.path).observe(duration)
HTTP_REQUESTS_TOTAL.labels(
method=request.method,
endpoint=request.url.path,
status_code=str(response.status_code)
).inc()
return responsedef collect_system_metrics():
p = Process()
PROCESS_MEMORY_MB.set(p.memory_info().rss / 1024 / 1024)
BackgroundTasks或APScheduler每10秒执行一次。