在Kubernetes集群中使用Prometheus监控Spring Boot应用程序

97次阅读
没有评论

问题描述

在本地的Kubernetes集群中部署了使用Spring Boot的微服务。这些微服务使用Micrometer和Prometheus注册表,但由于公司政策的原因,执行器(Actuator)在另一个端口上可用:
– 8080用于”业务”HTTP请求
– 8081/manage用于执行器。因此,可以通过http://host:8081/manage/prometheus访问并查看本地运行进程的指标(不使用Kubernetes)。

现在,用户对Prometheus和Kubernetes的了解有限(他是一名Java开发人员),他已经创建了一个包含应用程序的POD,并成功在Kubernetes中运行它。它可以正常工作,可以访问它(对于8080,他创建了一个服务来映射端口),并且可以从同一台计算机上执行”业务”级别的HTTP请求。

但是,他没有找到任何关于如何添加Prometheus的示例。Prometheus应该作为另一个POD部署在同一个Kubernetes集群中。所以他从以下内容开始:

FROM @docker.registry.address@/prom/prometheus:v2.15.2
COPY entrypoint.sh /USER root
RUN chmod 755 /entrypoint.sh
ADD ./prometheus.yml  /etc/prometheus/
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh的内容如下:

#!/bin/shecho "About to run prometheus"/bin/prometheus --config.file=/etc/prometheus/prometheus.yml \                --storage.tsdb.path=/prometheus \                --storage.tsdb.retention.time=3d \                --web.console.libraries=/etc/prometheus/console_libraries \                --web.console.templates=/etc/prometheus/consoles

我的问题是,我应该如何定义prometheus.yml,以便从我的Spring Boot POD(以及其他使用相同执行器设置的微服务)获取指标。

我已经开始了以下内容(prometheus.yml):

global:
  scrape_interval: 10s
  evaluation_interval: 10s
scrape_configs:
  - job_name: 'prometheus'
    metrics_path: /manage/prometheus
    kubernetes_sd_configs:
      - role: pod
    bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_label_app]
        action: keep
        regex: sample-pod-app(.*)|another-pod-app(.*) 

但显然它不起作用,所以我想请教以下问题:
– 如果有人有一个可工作的示例,那将是最好的 :)
– 直观地说,我理解我需要为我的8081端口指定端口映射,但我不确定如何做
– 由于Prometheus应该在另一个端口上运行,我是否应该在Kubernetes级别公开8081端口的服务?
– 我是否需要在Kubernetes中定义任何与安全相关的资源?

顺便说一下,目前我不关心可扩展性问题,我相信一个Prometheus服务器就足够了,但我将不得不将Grafana加入到这个方案中。

P.S. 最初在Stack Overflow上提出了这个问题,但被建议在这里也提问。

解决方案

最佳解决方案是使用Helm Chart在Kubernetes中部署Prometheus:
https://github.com/helm/charts/tree/master/stable/prometheus
如果你还没有使用过Helm,它非常简单,可以在你的笔记本电脑/集群上安装,最新版本甚至不需要在集群上安装。它只需要大约30秒钟的时间。它是Kubernetes的包管理器,允许你安装、升级、列出和删除”charts”,这些”charts”基本上是对Kubernetes YAML文件的简单包装(带有一些很好的模板)。你甚至可以将你的Spring Boot应用程序包装在一个Helm Chart中 =)。
一旦你成功运行Prometheus,这里有一个很好的教程,教你如何在Spring Boot中设置执行器的Prometheus端点,并通过编辑values.yaml文件使其被Prometheus识别:
https://www.callicoder.com/spring-boot-actuator-metrics-monitoring-dashboard-prometheus-grafana/
这个教程的末尾还有一些关于在Grafana中展示所有这些内容的信息。

正文完