本文目录导读:

- 为什么 Python 应用适合用 Prometheus?
- Python 应用如何暴露指标给 Prometheus?
- 配置 Prometheus 抓取目标
- 配置告警(Alertmanager)
- 有没有更简单的替代工具?(非 Prometheus)
是的,Prometheus 是目前 Python 应用监控和告警最主流、最推荐的开源方案之一,它特别适合云原生、微服务架构以及需要灵活告警规则的场景。
下面我会从为什么选择 Prometheus、Python 如何接入、以及告警配置三个维度来说明。
为什么 Python 应用适合用 Prometheus?
- 成熟的标准:Prometheus 是 CNCF(云原生计算基金会)的毕业项目,已成为云原生监控的事实标准。
- Pull 模型:Prometheus 主动从你的 Python 应用暴露的 HTTP 端点拉取指标,非常适合动态变化的微服务环境(配合服务发现)。
- 强大的多维数据模型:指标带有标签(labels),可以按业务维度(如 endpoint、method、status)灵活聚合和查询。
- 告警能力:内置的 Alertmanager 组件可以处理复杂的告警逻辑(如分组、抑制、静默)。
Python 应用如何暴露指标给 Prometheus?
最核心的库是 prometheus_client(官方 Python 客户端)。
安装
pip install prometheus-client
核心步骤(以 Flask 为例)
from flask import Flask
from prometheus_client import Counter, Histogram, generate_latest, REGISTRY
import time
app = Flask(__name__)
# 1. 定义指标
REQUEST_COUNT = Counter('http_requests_total', 'Total HTTP requests', ['method', 'endpoint', 'status'])
REQUEST_DURATION = Histogram('http_request_duration_seconds', 'HTTP request duration', ['method', 'endpoint'])
@app.route('/api/items', methods=['GET'])
def get_items():
start_time = time.time()
# 模拟业务逻辑
time.sleep(0.1)
# 2. 在业务代码中记录指标
REQUEST_COUNT.labels(method='GET', endpoint='/api/items', status='200').inc()
REQUEST_DURATION.labels(method='GET', endpoint='/api/items').observe(time.time() - start_time)
return {'items': ['a', 'b']}
# 3. 暴露 /metrics 端点给 Prometheus 抓取
@app.route('/metrics')
def metrics():
return generate_latest(REGISTRY)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
关键指标类型
- Counter:只增不减(如请求数、错误数)
- Gauge:可增可减(如当前线程数、内存使用)
- Histogram:分桶统计(如请求延迟分布)
- Summary:分位数统计(如延迟的 P99)
配置 Prometheus 抓取目标
在 Prometheus 的配置文件 prometheus.yml 中添加你的 Python 应用地址:
scrape_configs:
- job_name: 'python-app'
static_configs:
- targets: ['localhost:8000'] # 你的应用暴露的 /metrics 端口
配置告警(Alertmanager)
Prometheus 本身不发送告警,它通过 Alertmanager 实现。
步骤 1:定义告警规则(alert.rules.yml)
groups:
- name: python_alerts
rules:
- alert: HighErrorRate
expr: (sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))) > 0.05
for: 2m
labels:
severity: critical
annotations:
summary: "HTTP错误率超过5%"
description: "过去5分钟错误率 {{ $value | humanizePercentage }}"
- alert: HighRequestLatency
expr: histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 1.0
for: 1m
labels:
severity: warning
annotations:
summary: "P99 延迟超过1秒"
步骤 2:配置 Alertmanager 通知(如钉钉、邮件、企业微信)
在 alertmanager.yml 中配置接收端点。
有没有更简单的替代工具?(非 Prometheus)
如果项目很小或你希望更快的上手速度,也可以考虑:
| 方案 | 特点 | 适用场景 |
|---|---|---|
| Prometheus | 最强大,可扩展性强,告警灵活 | 微服务、Kubernetes、需要长期留存数据和复杂查询 |
| Grafana + Prometheus | 可视化与监控一体化 | 绝大数生产环境标准组合 |
| Sentry | 专注重试、错误追踪、性能检测 | 你需要的是错误日志和堆栈,而非系统指标 |
| Datadog / New Relic | SaaS 服务,开箱即用,无需运维 | 预算充足,不想自建基础设施 |
watchdog + systemd |
简单的进程守护和健康检查 | 仅需检测应用是否存活,不关心性能和业务指标 |
- 推荐使用 Prometheus:如果应用是微服务、需要灵活的可视化(Grafana)、需要多维度告警(按 error rate / latency / QPS)。
- 必备库:
prometheus-client(官方)。 - 典型技术栈:Python 应用 -> 暴露
/metrics-> Prometheus Server 抓取 -> Grafana 展示 -> Alertmanager 告警。
如果你的项目不大,但希望测试 Prometheus 流程,可以先用一个单机 Flask 应用配合 prometheus.yml 体验一下,这个方案非常成熟。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播