Prometheus 监控最佳实践
本文是 Prometheus 的一份文档,提供了一系列侵入代码做监控时的建议。
- 监控任何东西,能想到的。一个程序中的每个部分都至少有一些指标可以让我们看到它们工作地肿么样。
- 侵入代码的监控就跟日志一样,可以做到就在代码那个文件做初始化。
- 一般监控的东西可以是:
- 在线服务: 推荐采集的指标:qps/qpm, errors, latency. 如果有客户端可以在 c/s 两端都采集。
- 离线服务: 推荐采集的指标:in_progress_num, processed_num, last_processed_time. 如果系统不是一直都在工作,建议发心跳工作包给服务,服务简单处理下时间啊什么的,确保它是一直是响应着的。
- Batch Job:它可能只是一次性的任务。推荐使用 pushgateway 推数据给 prometheus。采集的指标可以是:运行了多久,每一步花了多久,什么时候结束,成功还是失败。如果这个 batch job 以固定频率运行,建议转成 offline-processing。
- Library: 推荐采集的指标(可以做采样):qps/qpm, errors, latency, network, disk, ...
- Logging: 规则:每行日志最好都有特定的 counter 与之对应。或者简单地将 info/error/warning 做个加总,这样也很好查看程序的行为。
- Failure: 规则:每次失败都有特定的 counter 与之对应。
- Threadpools: 推荐采集的指标:queued_requests_num, inuse_thread_num, total_thread_num. processed_tasks_num, duration, queue_waiting_milliseconds.
- Caches: total queries, hits, overall latency and then the query count, errors and latency
- 其它建议
- 尽量使用标签
- 但不要过度使用标签(控制在10个以内
- 大小只往上跑的数据可以用 counter,能上能下的用 gauge
- 可以把事件发生的时间也暴露为一个指标。
- 宁愿给出 fallback 的指标,也不要丢了。