2

我有一个安装了Prometheus 客户端Telegraf守护程序的 RoR 应用程序,其中Prometheus 输入插件在我要监视的实例上工作。

据我了解,我需要某种导出器中间件来收集指标并使用HTTP 端点Prometheus::Client.registry公开它们。/metrics

我真正不明白的是如何将来自不同环境(例如,来自 rake 任务和应用程序的运行时代码)的所有指标传递到同一个中间件Prometheus::Middleware::Exporter.new(registry)实例的同一个注册表(它是一个实例变量) ?Prometheus::Middleware::Exporter

此外,urls = ["http://localhost:3000/metrics"]例如,用于 Telegraf 的 Prometheus 输入插件的配置是否可以在 EC2 实例上工作?

谢谢你的建议。

4

2 回答 2

2

首先,不建议使用像 Telegraf 这样的包罗万象的导出器。您可以阅读这篇博文中的一些论点:https ://www.robustperception.io/one-agent-to-rule-them-all/ 。

然后,如果我正确理解您的问题,则不可能从多个进程(例如您的 Rails 应用程序和一些 rake 任务)中使用相同的注册表。您的 Rails 应用程序将导出自己的指标,您需要对 rake 任务使用不同的方法。

由于 rake 任务(通常)是短暂的进程,因此它们不太适合从中提取。这里有两个选择,或者使用 Pushgateway 和 client_ruby 中的 PGW-support 在 rake 任务执行结束时推送所有相关指标(比如花了多长时间,处理了多少项目,如果有任何错误, ETC。)。或者,您可以使用 node_exporter 中的文本文件收集器,并在 rake 任务执行结束时将指标写入磁盘。然后 node_exporter 将读取该文件并在它被抓取时导出指标。

我不会主动监控 stackoverflow,您将在 prometheus-users 邮件列表中获得更多有关这些问题的帮助,请参阅https://prometheus.io/community/

于 2017-04-12T01:47:47.430 回答
2

也许更简单的方法是在同一主机上设置 Telegraf 客户端(使用 Prometheus 输出和 statsd 输入),然后以 statsd 格式从您的应用程序将事件触发到 Telegraf 的输入中。然后 Telegraf 将转身并以 Prometheus 的格式发出这些指标。

通过这种方式,您将获得 Telegraf 的主机级指标(可用内存、磁盘使用量等)和应用程序的指标,全部导出到同一个端口。它不需要任何特定于 Ruby 的代码,只需能够将 UDP 消息从您的应用程序发送到本地端口。

于 2017-04-02T06:21:25.310 回答