Python Client
在请求路径上更新指标,并把当前值编码为 Prometheus exposition format。
沿着 Python Hello World 的数据流,理解应用如何暴露指标、Prometheus 为什么主动拉取、PromQL 如何把时间序列变成答案,以及 Grafana 到底负责哪一层。
业务请求进入 Python;Prometheus 不等待应用“上报”,而是周期性访问 /metrics;Grafana 再向 Prometheus 发 PromQL 查询。Grafana 不抓指标,Python 也不直接把指标推给 Grafana。
在请求路径上更新指标,并把当前值编码为 Prometheus exposition format。
按 scrape interval 拉取样本,追加时间戳,保存为带标签的时间序列。
通过数据源执行 PromQL,把结果画成时间线、统计值和告警信号。
配置里的 target 是容器网络地址 hello:8000,不是宿主机的 localhost:8000。每 5 秒,Prometheus 读取一次瞬时快照并写入自己的 TSDB。
标签让一项指标切成多条时间序列,但每个新标签值组合都会增加 cardinality。路径模板、状态码适合作标签;用户 ID、请求 ID 通常不适合。
累计值随进程重启归零。通常用 rate(counter[窗口]) 看每秒增长,而非只看总数。
_bucket、_sum、_count 共同描述分布,可聚合后计算分位数。
user_id 等高基数字段会制造海量序列。逐请求细节应进入日志或 trace。
hello_http_requests_total{
status=~"5.."
}保留指标名匹配且 status 为 5xx 的序列。
rate( hello_http_requests_total[1m] )
取最近一分钟样本,估算 Counter 平均每秒增长率,并处理重置。
sum by (path, status) ( rate(hello_http_requests_total[1m]) )
合并其他维度,只按 path 与 status 保留结果。
histogram_quantile(0.95,
sum by (le, path) (
rate(hello_http_request_duration_seconds_bucket[5m])
)
)先聚合 bucket 速率,再估算每条路径的 P95。
make up 后访问 8000/metrics,找到 HELP、TYPE 和三类 hello 指标。
打开 Prometheus Targets 或执行 make targets,确认 python-hello 为 up。
执行 make traffic,明确知道成功、慢请求和 500 各产生多少次。
先 selector,再 rate,再 sum by;观察每一步的标签和结果类型。
打开预置 Dashboard,确认面板与刚才的 PromQL 对应,而非把它当黑盒。
停止 hello 容器,观察 up 变 0;恢复后区分“无流量”和“不可抓取”。
数据源请求从 Grafana 容器发出;容器里的 localhost 指 Grafana 自己。Compose DNS 会把服务名 prometheus 解析到 Prometheus 容器。
它只是应用此刻的指标快照。Prometheus 周期性保存快照才形成历史;Grafana 查询历史后再绘图。
没有流量时分母可能为 0。设置很小的正下限可避免除零;真实告警还应结合最小流量门槛。
入口只有一个:进入 prome/ 执行 make up。实验结束用 make down 保留数据;想完全重置才用 make clean。