我有一个安装了Prometheus-client和Telegraf守护进程的RoR应用程序,Prometheus input plugin正在我要监视的实例上工作 .
据我所知,我需要某种exporter middleware从 Prometheus::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 回答
首先,不建议使用像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/ .
也许更简单的方法是在同一主机上设置Telegraf客户端(使用Prometheus输出和statsd输入),然后以statsd格式将应用程序中的事件触发到Telegraf的输入中 . 然后,Telegraf将以Prometheus的格式转向并发布这些指标 .
通过这种方式,您将获得Telegraf的主机级指标(可用内存,磁盘使用情况等)和应用程序的指标,所有指标都在同一端口中导出 . 它不需要任何特定于Ruby的代码,只需要从您的应用程序向本地端口发送UDP消息 .