Prometheus 普罗米修斯从离线节点读取度量

Prometheus 普罗米修斯从离线节点读取度量,prometheus,spring-boot-actuator,portainer,Prometheus,Spring Boot Actuator,Portainer,我将Prometheus配置为监视不同的spring引导应用程序。这些应用程序可以在五个不同服务器的集合上部署多个实例。有些应用程序部署在每个节点上,有些则不是。无法确定applicationOne是否位于nodeOne上(由Portainer负责),因此我将Prometheus配置为将应用程序可以部署到的所有可能IP列为目标 - job_name: 'production-diagnostic' metrics_path: '/actuator/prometheus' sc

我将Prometheus配置为监视不同的spring引导应用程序。这些应用程序可以在五个不同服务器的集合上部署多个实例。有些应用程序部署在每个节点上,有些则不是。无法确定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']
此特定应用程序被配置为一次仅在服务器上运行,仅当存在重新部署的人工请求时,它才会在另一个节点上切换。 普罗米修斯的行为很糟糕:它显然是从四个方向读取公制单位 此应用程序的节点,即使它仅部署在其中一个节点上。 其他应用程序也是如此

例如:

jvm_memory_used_bytes{application=“localization\u vehicles\u diagnostic”,area=“heap”,id=“G1 伊甸园 空格“,instance=“1.1.1.1:9003”,job=“production diagnostic”}299892736 jvm_memory_used_bytes{application=“localization\u vehicles\u diagnostic”,area=“heap”,id=“G1 伊甸园 空格“,instance=“1.1.1.2:9003”,job=“production diagnostic”}296747008 jvm_memory_used_bytes{application=“localization\u vehicles\u diagnostic”,area=“heap”,id=“G1 伊甸园 空格“,instance=“1.1.1.3:9003”,job=“production diagnostic”}294649856 jvm_memory_used_bytes{application=“localization\u vehicles\u diagnostic”,area=“heap”,id=“G1 伊甸园 空格“,instance=“1.1.1.4:9003”,job=“production diagnostic”}295698432


我的配置有问题吗?我必须添加一些其他参数吗?或者普罗米修斯和波蒂纳有什么问题?

这就是普罗米修斯的工作方式。您可以在
scrape\u config
中设置目标列表。普罗米修斯将尝试在给定的时间间隔内从
/exactor/Prometheus
端点的目标获取度量,无论它们是否存在

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

up{job=”“,instance=”“}: 1如果实例正常,即可访问, 如果刮取失败,则为0


定位要刮取的目标是服务发现的全部要点:带外信息用于确定在何处运行服务。 在本例中,您设置了一个静态配置,这意味着提供的所有目标都在运行服务

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

修改作业以使用文件发现,指示普罗米修斯要读取的文件以列出目标

  - job_name: 'production-diagnostic'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
    file_sd_configs:
    - files:
      - 'discovered.json'
然后,定期启动轮询服务的脚本(测试服务的url),并将发现的目标写入文件中。普罗米修斯可以监视文件并在检测到更改时自动重新加载。它将包含示例

[ {  "targets": [ "1.1.1.1:9003"  ]  }]
注意:普罗米修斯真的是被动的,如果你的脚本写文件花费太多时间,它会有暂时的错误,因为它读取一个未完成的文件。我通过写入一个临时文件,然后将其复制到target f I let来解决这个问题


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

我不明白的是,应用程序从未更改部署节点,因此我只希望看到收集的一个值。你认为其他人的价值观是什么?关于您的工作环境,它是否可用于向Grafana提供数据?