我有一个 HTTP API 服务器,带有
https://example.com/api/login
和 https://example.com/api/logout
等端点。等等
我一直在寻找一种方法来每分钟监控每个API的访问次数并将其记录为图表。
我所做的简单方法基本上是添加一些服务器代码来记录访问期间对日志文件的每次访问,然后抓取日志文件。
但是我认为也许普罗米修斯也可以做到这一点,这将是一种更合适的方法,并且将来更易于维护。
我对普罗米修斯完全陌生,我做了一些研究,发现黑盒导出器也许可以做我想做的事。然而文档似乎表明它只会“探测”端点,根据我的理解,这是测试端点的稳定性/可用性参数,而不是记录每个端点的访问次数。
prometheus可以“记录指定端点的访问号码”吗?或者其他开源监控工具?
Prometheus 从 HTTP 端点收集数据,这意味着它发出 HTTP GET 请求,响应应包含 OpenMetrics 格式的数据。 Prometheus 无法读取日志来创建指标。
但是,有很多导出器,其中一些可以从日志创建指标。您可以在这里找到不完整的列表:https://prometheus.io/docs/instrumenting/exporters/#logging。设置如下:
另一种方法是将 Prometheus 库集成到您的 API 中。然后你可以在内部统计请求并创建一个API端点供Prometheus访问。在我看来,这比通过日志进行衡量要好 - 更少的软件,更少可能损坏的东西。
最后,您可以考虑使用 Loki (https://grafana.com/oss/loki/) 或 Elastic Stack (https://www.elastic.co/elastic-stack/)。这些是收集日志的工具,但您也可以使用它们来创建仪表板、构建图表等。
如果您正在自我监控 Prometheus 实例,则有一个名为
prometheus_http_requests_total
的指标,它公开每个端点的 HTTP 请求总数。
如果你不知道我所说的自我监控 Prometheus 是什么意思,只需添加一个这样的抓取工作:
- job_name: 'prometheus'
static_configs:
- targets:
- localhost:9090 # your Prometheus port
如果您的 API 是使用受支持的 Web 框架之一构建的,则使用 Prometheus 监控对 API 端点的请求的更简单替代方案是 Apitally。
Apitally 的开源客户端库为各种 Python 和 Node.js 框架实现中间件,该框架捕获请求和响应元数据并以 1 分钟的间隔将其异步传送到其服务器。
然后,Apitally 仪表板可以深入了解整个 API 和各个端点的 API 流量、错误、响应时间和有效负载大小。要进行此设置,您只需安装一个小的依赖项并向项目添加几行代码。
免责声明:我是 Apitally 的作者,专门针对此类用例构建了它。