Prometheus 和 Node Exporter 架构

Prometheus and Node Exporter architecture

我已经阅读了 3 天,甚至配置了一组容器来测试它们,但我有疑问。

我了解 Prometheus + Node exporter 的架构基于:

问题 1:

假设您想要 CPU 每 15 秒的指标,每 5 米的硬盘指标,每 1 米的网络,每 30 秒的处理。

既然决定抓取间隔的是 prometheus,如何配置为只抓取这些值?

问题 2:

假设您需要 1 个普罗米修斯实例和 3 个节点导出器,不同的 public 服务器。我没有看到任何关于节点导出器及其安全性的信息。 HTTP 端点是 public.

如何从我的 3 个服务器安全地查询指标?

问题 3:

不知道是不是漏了什么。但是,例如,将其与 Telegraf 进行比较,后者将指标发送到数据库。因此,Telegraf 充当“节点出口商”。我只需要保护数据库连接(只暴露端口)。

能否将节点导出器配置为每隔 X 次向普罗米修斯服务器发送一组指标? (所以我不必在每个 public 服务器中公开一个 public 端口,只需在普罗米修斯服务器中公开) 我明白“pushgateway”是为了那个?如何更改节点导出器的行为?

您是否可以向我推荐任何其他可以满足我需求的架构? (1个master,多个slave来查询指标)

Since it is prometheus who decides the scraping interval, how can be configured to just scrape those values?

我不相信这是可能的。 Prometheus 一次从一个端点抓取所有内容,因此如果所有数据都来自 node_exporter,您将以相同的频率获取所有数据。

How can I securely query the metrics from my 3 servers?

Prometheus security doc 谈到使用反向代理这种东西。

Can node-exporter be configured to send a set of metrics every X time to the prometheus server?

我不这么认为。 Prometheus是一个拉式监控系统。如果您确实需要通过推送来移动数据,那么您可能需要做的就是使用脚本或任何方式将数据推送到相当于 Prometheus 服务器上的缓存,然后让 Prometheus 定期轮询该缓存。不知道有没有这种东西

问题一

Since it is prometheus who decides the scraping interval, how can be configured to just scrape those values?

您可以配置不同的 job,每个配置都有自己的 scrape_interval 和 HTTP URL 参数 params。然后,就看出口商提出的特征了。

在node_exporter的情况下,可以通过a list of collectors:

  • cpu 每 15 秒(作业:node_cpu)
  • process 每 30 秒(作业:node_process)
  • (你懂的)...

请注意,由于 data staleness,5 分钟的抓取间隔可能太大:您 运行 有可能无法在该数据的即时向量中获取任何数据。 1 分钟的抓取间隔已经很大,对性能没有影响。

问题二

How can I securely query the metrics from my 3 servers?

Prometheus 的最初假设是您将使用私有网络。对于 public 网络,您需要某种代理。

就个人而言,我在经典架构上使用过exporter_exporter

问题三

Can node-exporter be configured to send a set of metrics every X time to the prometheus server? (so I don't have to expose a public port in every public server, just the prometheus server) I understand "pushgateway" is for that? How to change the node-exporter behavior?

不,Prometheus 是基于拉式的架构:您需要一个 URI,Prometheus 可以在您想要的每个服务上访问 monitor.I 想象一下您可以重用来自另一个监控解决方案的组件并使用像 collectd exporter.

推送网关适用于迫不及待被 Prometheus 抓取的短期作业。这是一个特定的用例,普遍的共识是不要滥用它。

请查看 Fluent Bit - https://docs.fluentbit.io(例如输入 node_exporter)

使用不同的擦除和冲洗间隔根据您的需要创建监控容器。

Assume you want CPU metrics every 15s, HDD metrics every 5m, Network every 1m, process every 30s. Since it is prometheus who decides the scraping interval, how can be configured to just scrape those values?

虽然可以为每个 job 配置单独的 scrape_interval(又名 scrape_config) in Prometheus, this isn't recommended practice - see this article for more information. See also staleness docs 以了解 Prometheus 如何处理原始样本之间的差距以及它如何将多个测量值组合到一个查询。

Assume you want 1 prometheus instance and 3 node exporters, different public servers. I don't see anything regarding the node exporter and its security. The HTTP endpoint is public. How can I securely query the metrics from my 3 servers?

Prometheus 提供了通过受各种授权方案保护的 https 端点抓取目标的能力,例如基本身份验证、不记名身份验证或 oauth2 - 请参阅 scrape_config 中的相应配置选项。

如果您需要抓取位于孤立网络/主机中的目标,则 vmagent can run in every isolated network / host, scrape metrics from local targets and send them to a centralized Prometheus-like remote storage such as VictoriaMetrics

I don't know if I am missing something. But, for example, comparing this to Telegraf, the latter sends the metrics to a database. Therefore, Telegraf acts as "node-exporter". I only need to secure the database connection (only exposed port). Can node-exporter be configured to send a set of metrics every X time to the prometheus server? (so I don't have to expose a public port in every public server, just the prometheus server) I understand "pushgateway" is for that? How to change the node-exporter behavior?

不幸的是,node_exporter 和任何其他 Prometheus-compatible 导出器无法将指标推送到 Prometheus,因为 Prometheus 仅支持用于数据收集的拉模型,例如它以配置的间隔在自身上抓取配置的目标。请参阅 this article 详细了解为什么 Prometheus 更喜欢拉模型而不是推模型。

如果你需要Prometheus-like系统,同时支持pull和push模型,那么看看VictoriaMetrics. It accepts data in native InfluxDB line protocol, so you can send metrics from Telegraf directly to VictoriaMetrics and then query them with PromQL and MetricsQL. See these docs

如果您不熟悉 PromQL,那么 this article 从 PromQL 基础知识开始可能会有用。