【发布时间】:2021-04-10 12:25:10
【问题描述】:
我之前一直在做一个使用 prometheus 和 grafana 来收集和显示指标的服务器端项目。效果很好。
我现在正在开发一个客户端应用程序。那是一个运行在 android 和 iphone 设备上的应用程序。我还被要求使用 prometheus 和 grafana 来收集和显示来自应用程序的指标。
在这项任务中需要克服多个挑战。首先,我们需要弄清楚 prometheus 服务器如何抓取所有客户端应用程序。虽然对于服务器端项目,服务器数量有限且已知(比如 10 个位于已知 IP 地址的服务器),但对于客户端应用程序,将有 1000 多个应用程序在许多智能手机上运行。我已经解决了第一个挑战,这不是我的问题的重点。
我面临的最重要的问题是用户可以随时在他们的智能手机上启动和关闭应用程序。这意味着,可能会有 1000 多个客户端应用同时运行,并且这些应用会非常频繁地上线/下线。
与服务器端服务相比,我只有 10 个服务实例长时间运行,prometheus 每 30 秒抓取一次。
为了把事情放在上下文中,假设我有一个简单的 prometheus 计数器,它的值总是增加:
requests_total{status="success"}
requests_total{status="failure"}
我可以通过以下方式可视化失败请求的数量:
sum(increase(requests_total{status="failure"}[1m]))
这对于我运行很长时间的服务器端服务来说效果很好。当我重新启动服务时,曾经在一个蓝月亮。计数器会出现不连续性,但这种情况很少发生。 increase 函数的普罗米修斯文档说:
... Breaks in monotonicity (such as counter resets due to target restarts) are automatically adjusted for.
但对于我的客户端应用程序,将有 1000 多个应用程序实例在运行,并且它们会频繁上线/下线。这意味着我的柜台可能有很多不连续性。
我在这里向 prometheus 社区寻求建议。使用 prometheus 从可以频繁上线/下线的客户端应用程序收集指标是否有意义?或者,prometheus 可能从未设计为与客户端应用程序一起使用。
【问题讨论】:
标签: prometheus