首页 文章

Ruby on Rails:使用Telegraf获取Prometheus指标

提问于
浏览
2

我有一个安装了Prometheus-clientTelegraf守护进程的RoR应用程序,Prometheus input plugin正在我要监视的实例上工作 .

据我所知,我需要某种exporter middlewarePrometheus::Client.registry 收集指标并用 /metrics HTTP endpoints 公开它们 .

我将't really understand is how to pass all metrics from different envs (e.g from rake task and app'的运行时代码放入同一个 Prometheus::Middleware::Exporter 中间件实例的同一个注册表(它是 Prometheus::Middleware::Exporter.new(registry) 的实例变量)中?

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

谢谢你的建议 .

2 回答

  • 2

    首先,不建议使用像Telegraf这样的全能出口商 . 你可以在这篇博客文章中阅读一些论点:https://www.robustperception.io/one-agent-to-rule-them-all/ .

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

    由于rake任务(通常)是短暂的过程,因此它们不适合被拉出 . 这里有两个选项,你可以使用Pushgateway和client_ruby中的PGW支持在rake任务执行结束时推送所有相关指标(比如花了多长时间,处理了多少项,如果有任何错误,等等 . ) . 或者,您可以在node_exporter中使用textfile collector,并在rake任务执行结束时将指标写入磁盘 . 然后,node_exporter将读取该文件,并在刮取时导出指标 .

    我不会在prometheus-users邮件列表上获得有关这些问题的更多帮助,请参阅https://prometheus.io/community/ .

  • 2

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

    通过这种方式,您将获得Telegraf的主机级指标(可用内存,磁盘使用情况等)和应用程序的指标,所有指标都在同一端口中导出 . 它不需要任何特定于Ruby的代码,只需要从您的应用程序向本地端口发送UDP消息 .

相关问题