在 Kubernetes 上使用 Prometheus 监控 Spring Boot 应用程序,而不是设置端点

Posted

技术标签:

【中文标题】在 Kubernetes 上使用 Prometheus 监控 Spring Boot 应用程序,而不是设置端点【英文标题】:Monitor Spring Boot Apps using Prometheus on Kubernetes , not setting end Points 【发布时间】:2019-10-13 19:49:49 【问题描述】:

我正在尝试在 Kubernetes 上使用 Prometheus 监控 Spring Boot 应用程序。 Promethus 使用 Helm 安装,而我使用 Spring Boot Actuator 进行健康检查、审计、指标收集和监控。

执行器提供有关应用程序的详细信息。例如

http://**IP:Port**/actuator/health 在输出下方返回

"status":"UP".

我使用下面的配置文件在promethus中添加应用程序端点。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: scp-service-creator
  namespace: sc678
  labels:
    app: scp-service-creator
    release: prometheus-operator
spec:
  selector:
    matchLabels:
      app: scp-service-creator
  endpoints:
  - port: api
    path: "/actuator/prometheus"
    scheme: http
    interval: 10s
    honorLabels: true

所以我的问题是即使将服务添加到 prometheus ,也没有分配端点。 那么这里有什么问题。非常感谢您的帮助。

谢谢。

【问题讨论】:

可以提供prometheus.yaml吗? 没有使用这样的文件。 Prometheus 是通过 Helm 安装的。 【参考方案1】:

从Spring Boot Actuator documentation,更具体地说是Endpoints 部分。可以读到端点是默认启用的,除了Shutdown 被禁用,但只有healthinfo 被公开。

这个可以查here。

您需要手动公开所需的 Endpoint。

您要使用的端点 Prometheus 不适用于 JMX,并且对 Web 禁用。

要更改公开的端点,请使用以下特定于技术的 includeexclude 属性:

房产 |默认

management.endpoints.jmx.exposure.exclude |

management.endpoints.jmx.exposure.include | *

management.endpoints.web.exposure.exclude |

management.endpoints.web.exposure.include | info, health

include 属性列出了公开的端点的 ID。 exclude 属性列出不应公开的端点的 ID。 excludeproperty 优先于 include 属性。 includeexclude 属性都可以配置端点 ID 列表。

例如,要停止通过 JMX 公开所有端点并仅公开 healthinfo 端点,请使用以下属性:

management.endpoints.jmx.exposure.include=health,info

* 可用于选择所有端点。例如,要通过 HTTP 公开除 envbeans 端点之外的所有内容,请使用以下属性:

management.endpoints.web.exposure.include=* management.endpoints.web.exposure.exclude=env,beans

【讨论】:

以上是关于在 Kubernetes 上使用 Prometheus 监控 Spring Boot 应用程序,而不是设置端点的主要内容,如果未能解决你的问题,请参考以下文章

从零写一个时间序列数据库 | Linux 中国

指标未显示在 /prometheus 端点上

使用 terraform 在 kubernetes 上计划重启

使用 zeppelin 在 kubernetes 上运行 Spark

在 kubernetes 上使用 zeppelin 公开 spark-ui

Kubernetes命令kubectl 在Node节点上的使用