1

我配置了 Prometheus 来监控不同的 Spring Boot 应用程序。这些应用程序可以在五个不同服务器的集合上部署多个实例。有些应用程序部署在每个节点上,有些则没有。无法确定 applicationOne 是否在 nodeOne 上(这由 Portainer 负责),因此我将 Prometheus 配置为目标,列出可以部署应用程序的所有可能 ip。

  - job_name: 'production-diagnostic'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    - targets: ['1.1.1.1:9003', '1.1.1.2:9003', '1.1.1.3:9003', '1.1.1.4:9003', '1.1.1.5:9003']

这个特定的应用程序被配置为一次只在一个服务器上运行,只有当有重新部署的人工请求时,它才会在另一个节点上运行。Prometheus 的行为很糟糕:它显然从该应用程序的四个节点读取指标,即使它仅部署在其中一个节点上。其他应用程序也是如此。

例子:

jvm_memory_used_bytes{application="localization_vehicles_diagnostic",area="heap",id="G1 Eden Space",instance="1.1.1.1:9003",job="production-diagnostic"} 299892736 jvm_memory_used_bytes{application="localization_vehicles_diagnostic",area ="heap",id="G1 Eden Space",instance="1.1.1.2:9003",job="production-diagnostic"} 296747008 jvm_memory_used_bytes{application="localization_vehicles_diagnostic",area="heap",id="G1伊甸空间",instance="1.1.1.3:9003",job="production-diagnostic"} 294649856 jvm_memory_used_bytes{application="localization_vehicles_diagnostic",area="heap",id="G1 Eden Space",instance="1.1. 1.4:9003",工作="生产诊断”} 295698432

我的配置有问题吗?我需要添加一些其他参数吗?还是 Prometheus 和 Portainer 有问题?

4

2 回答 2

1

这就是普罗米修斯的工作方式。您在 中设置目标列表scrape_config。Prometheus 将尝试以给定的时间间隔从端点处的这些目标获取指标,/actuator/prometheus无论它们是否存在。

您可以使用名为up的自动生成的指标将您所需的指标与其他指标隔离开来。您可以轻松地确定哪些指标源与up指标脱机。

up{job="", instance=""}:如果实例健康,即可达,则为 1,如果抓取失败,则为 0。

于 2019-07-24T17:02:56.260 回答
1

定位要抓取的目标是服务发现的全部要点:带外信息用于确定在哪里运行服务。在您的情况下,您设置了一个静态配置,这意味着提供的所有目标都在运行服务。

如果您没有现成的服务发现系统,您可以使用基于文件的服务发现来伪造一个。

修改您的作业以使用文件发现,指示 Prometheus 读取的文件以列出目标

  - job_name: 'production-diagnostic'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    file_sd_configs:
    - files:
      - 'discovered.json'

然后,定期启动轮询服务的脚本(测试服务的 url)并将发现的目标写入文件中。Prometheus 可以监视文件并在检测到更改时自动重新加载。它将包含示例

[ {  "targets": [ "1.1.1.1:9003"  ]  }]

注意:prometheus 确实是反应式的,如果您的脚本花费太多时间写入文件,则会出现暂时性错误,因为它读取的是未完成的文件。我通过写入一个临时文件解决了这个问题,然后将其复制到我让的目标 f。

您可以在配置或文件中定义标签,以在服务从服务器移动到服务器时唯一标识服务。

于 2019-07-31T21:40:20.537 回答