Prometheus监控k8s中pod的JVM与服务的自动发现

需求:业务方需要看到每个服务实例的JVM资源使用情况

难点:

每个服务实例在k8s中都是一个pod且分布在不同的namespace中数量成百上千
prometheus监控需要服务提供metrics接口
prometheus需要在配置文件中添加每个实例的metrics地址,因为pod的ip一直在变,所以配置文件写死了无法完成,需要配置自动发现
解决方案:

搭建集成了Micrometer功能的Spring BootJVM监控,并配置Grafana监控大盘
配置prometheus自动发现

一、集成actuator与micrometer

通过micrometer桥接prometheus
在这里插入图片描述

pom文件中引入如下的插件:

    <!--监控系统健康情况的工具-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
	</dependency>

	<!--桥接Prometheus-->
	<dependency>
		<groupId>io.micrometer</groupId>
		<artifactId>micrometer-registry-prometheus</artifactId>
		<version>1.6.0</version>
	</dependency>

	<!--micrometer核心包, 按需引入, 使用Meter注解或手动埋点时需要-->
	<dependency>
		<groupId>io.micrometer</groupId>
		<artifactId>micrometer-core</artifactId>
		<version>1.6.0</version>
	</dependency>
	<!--micrometer获取JVM相关信息, 并展示在Grafana上-->
	<dependency>
		<groupId>io.github.mweirauch</groupId>
		<artifactId>micrometer-jvm-extras</artifactId>
		<version>0.2.0</version>
	</dependency>

因为spring actuator因为安全原因默认只开启health和info接口,所以我们需要修改下application.yml,将prometheus接口放开

metircs

management:
  endpoints:
    web:
      exposure:
        include: prometheus, health
  metrics:
    export:
      simple:
        enabled: false
    tags:
      application: ${spring.application.name}

修改完毕后,编译启动对应服务。

访问http://服务地址:端口/actuator/prometheus可以看到如下metrics
在这里插入图片描述

二、配置prometheus自动发现

步骤一我们配置了单个实例的metrics接口,在实际生产环境中每个服务都有对应的service而且下面会有很多pod,我们这里通过prometheus的自动发现来将所有实例metrics信息收集起来

修改服务部署的yaml,在service的metadata中加入如下的annotations为自动发现做准备
annotations:
prometheus.io/port: “8082” #端口配自己服务的端口
prometheus.io/spring: “true”
prometheus.io/path: “actuator/prometheus”
2.在prometheus配置文件中添加spring项目metrics

k8s中的prometheus可以使用k8s的机制进行自动发现,配置如下:

  - job_name: 'spring metrics'

    kubernetes_sd_configs:
    - role: endpoints

    relabel_configs:
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_spring]
      action: keep
      regex: true
    - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
      action: replace
      target_label: __metrics_path__
      regex: (.+)
    - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
      action: replace
      target_label: __address__
      regex: ([^:]+)(?::\d+)?;(\d+)
      replacement: $1:$2
    - action: labelmap
      regex: __meta_kubernetes_service_label_(.+)
    - source_labels: [__meta_kubernetes_namespace]
      action: replace
      target_label: spring_namespace
    - source_labels: [__meta_kubernetes_service_name]
      action: replace
      target_label: spring_name

这里面的label与我们步骤1中配置的annotation对应

配置完,重新加载配置文件后,在prometheus控制台可以看到加载进来的target

在这里插入图片描述

3.grafana配置展示大屏

对应的dashboard已经上传到grafana,import编号为13657的即可。

效果如下

在这里插入图片描述

本文原博客地址:
https://blog.csdn.net/u013352037/article/details/111993093

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Prometheus监控Kubernetes Pod,您可以执行以下步骤: 1. 首先,确保您的Kubernetes集群已经安装了Prometheus Operator。Prometheus Operator是一个用于在Kubernetes自动部署和管理Prometheus和其相关组件的项目。 2. 创建一个用于配置Pod监控Prometheus ServiceMonitor资源。您可以创建一个YAML文件,指定您要监控Pod的标签选择器,并将其与Prometheus Operator一起部署。示例如下: ```yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: my-pod-monitor labels: app: prometheus spec: selector: matchLabels: app: my-pod endpoints: - port: metrics ``` 在上面的示例,我们将监控具有`app=my-pod`标签的Pod,并假设Pod暴露了一个名为`metrics`的端口用于指标收集。 3. 将上述YAML文件应用于您的Kubernetes集群,使用kubectl命令执行以下操作: ```shell kubectl apply -f path/to/your/pod-monitor.yaml ``` 4. Prometheus Operator将根据ServiceMonitor定义自动为您创建并配置Prometheus实例。如果尚未安装Prometheus Operator,您需要先安装它。 5. 确认PrometheusPod是否成功关联。您可以通过访问Prometheus的Web界面,并在查询表达式输入`kube_pod_labels{app="my-pod"}`来检查是否有指标与Pod相关联。 这样,您就可以使用Prometheus监控您的Kubernetes Pod了。您可以定义自己的Prometheus规则和警报规则,并使用Prometheus提供的查询语言PromQL来分析和查询收集到的指标数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值