提示:文章技术是需要后端代码埋点,才能采集,本文章后面的是后期实验完成后的结果。
文章目录
- 前言
-
- [1. kube-Prometheus 概述](#1. kube-Prometheus 概述)
- [2. kube-Prometheus 核心组件说明](#2. kube-Prometheus 核心组件说明)
- [3. kube-Prometheus 在 Kubernetes 集群中的作用](#3. kube-Prometheus 在 Kubernetes 集群中的作用)
- [4. PodMonitor 简介](#4. PodMonitor 简介)
- [5. 使用 PodMonitor 监控 JVM 应用的原理](#5. 使用 PodMonitor 监控 JVM 应用的原理)
-
- [5.1、JVM 应用暴露 Prometheus 指标接口](#5.1、JVM 应用暴露 Prometheus 指标接口)
- [5.2、PodMonitor 通过标签选择目标 Pod](#5.2、PodMonitor 通过标签选择目标 Pod)
- [5.3、Prometheus 定期拉取 JVM 指标](#5.3、Prometheus 定期拉取 JVM 指标)
- [5.4、Grafana 展示 JVM 运行状态与性能指标](#5.4、Grafana 展示 JVM 运行状态与性能指标)
- [6. JVM 监控指标范围说明](#6. JVM 监控指标范围说明)
- [7. kube-Prometheus + PodMonitor 的优势](#7. kube-Prometheus + PodMonitor 的优势)
- [8. 应用场景总结](#8. 应用场景总结)
- 一、服务器需求
- 二、安装k8s集群与业务服务
- 三、安装kube-prometheus-release监控
- 四、配置grafana监控k8s集群以及业务服务的JVM
- 五、设置抓取所有命名空间下的pod服务
-
- [5.1、查询Prometheus CR](#5.1、查询Prometheus CR)
- [5.2、抓取所有 namespace 下的 PodMonitor](#5.2、抓取所有 namespace 下的 PodMonitor)
- 5.3、在编辑grafana的jvm监控面板变量设置即可下拉选取命名空间
- 总结
前言

1. kube-Prometheus 概述
kube-Prometheus 是 Prometheus 官方社区提供的一套 面向 Kubernetes 的完整监控解决方案。
它基于 Prometheus Operator 构建,通过 Kubernetes 的 CRD(自定义资源)方式,实现对监控组件和监控规则的声明式管理。
通过在 Kubernetes 集群中部署 kube-Prometheus,可以快速构建一套 覆盖集群、节点、容器以及业务应用的统一监控体系。
2. kube-Prometheus 核心组件说明
kube-Prometheus 主要包含以下核心组件:
- Prometheus Operator
- 负责管理 Prometheus、Alertmanager 实例
- 解析 ServiceMonitor、PodMonitor 等 CRD
- Prometheus
- 负责指标数据的采集与存储
- Alertmanager
- 负责告警规则触发后的告警聚合与通知
- Grafana
- 提供指标数据可视化 Dashboard
- Node Exporter
- 采集节点级别指标(CPU、内存、磁盘、网络等)
- kube-state-metrics
- 采集 Kubernetes 资源状态指标(Pod、Deployment、Node、Namespace 等)
通过以上组件,kube-Prometheus 可以实现对 Kubernetes 集群的 全栈可观测性监控。
- 采集 Kubernetes 资源状态指标(Pod、Deployment、Node、Namespace 等)
3. kube-Prometheus 在 Kubernetes 集群中的作用
在 Kubernetes 集群中,kube-Prometheus 主要解决以下问题:
- 集群基础资源监控
- Node、Pod、Container 资源使用情况
- Kubernetes 对象状态监控
- Deployment、副本数、Pod 状态、重启次数等
- 业务应用指标监控
- 通过 ServiceMonitor / PodMonitor 采集业务指标
- 统一告警与可视化
- 告警规则集中管理
- Grafana Dashboard 统一展示
4. PodMonitor 简介
PodMonitor 是 Prometheus Operator 提供的一种 CRD(Custom Resource Definition),用于定义 Prometheus 如何监控一组 Pod。
与传统 Prometheus 需要手动编写 scrape_configs 不同,PodMonitor 采用 声明式配置,由 Prometheus Operator 自动生成抓取规则。
PodMonitor 的主要能力包括:
- 通过 Pod 标签选择器 选择需要监控的 Pod
- 配置指标抓取路径(如 /metrics、/actuator/prometheus)
- 配置端口、抓取频率、超时时间等参数
- 自动与 Prometheus 实例关联,无需修改 Prometheus 配置文件
5. 使用 PodMonitor 监控 JVM 应用的原理
在 Kubernetes 环境中,Java 应用(如 Spring Boot)通常通过 Micrometer + Prometheus 的方式暴露 JVM 指标。
典型流程如下:
5.1、JVM 应用暴露 Prometheus 指标接口
- 常见路径:/actuator/prometheus
- 指标内容包含:
- JVM 内存使用情况(Heap / Non-Heap)
- GC 次数与耗时
- 线程数量
- 类加载情况
5.2、PodMonitor 通过标签选择目标 Pod
5.3、Prometheus 定期拉取 JVM 指标
5.4、Grafana 展示 JVM 运行状态与性能指标
6. JVM 监控指标范围说明
通过 PodMonitor 采集 JVM 指标后,可实现以下监控能力:
- 内存监控
- 堆内存 / 非堆内存使用率
- Eden、Survivor、Old 区使用情况
- GC 监控
- Minor GC / Full GC 次数
- GC 总耗时
- 线程监控
- 活跃线程数
- 阻塞线程数
- 应用运行状态
- 启动时间
- 类加载数量
这些指标可帮助运维和开发人员 提前发现内存泄漏、频繁 GC、线程阻塞等问题。
7. kube-Prometheus + PodMonitor 的优势
在 Kubernetes 集群中使用 kube-Prometheus 结合 PodMonitor 监控 JVM 应用,具有以下优势:
- 与 Kubernetes 深度集成
- 声明式配置,易于维护
- 无需侵入 Prometheus 配置
- 支持多环境、多命名空间统一监控
- 可扩展性强,适合企业级监控体系
8. 应用场景总结
该方案适用于以下场景:
- Kubernetes 集群基础资源监控
- Java 微服务(Spring Boot、Dubbo 等)JVM 监控
- 多业务、多命名空间统一监控与告警
- 企业级 Kubernetes 运维监控体系建设
提示:以下是本篇文章正文内容,下面案例可供参考
一、服务器需求
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、安装k8s集群与业务服务
1.安装k8s集群
bash
略、、、
2、部署业务后端
bash
略、、、
三、安装kube-prometheus-release监控
安装包下载链接:https://github.com/prometheus-operator/kube-prometheus
3.1、将压缩包kube-prometheus-release-0.13.zip上传至服务器
bash
[root@master ~]# unzip kube-prometheus-release-0.13.zip
[root@master ~]# cd kube-prometheus-release-0.13/manifests/
解压后修改3个文件prometheus-service.yaml、alertmanager-service.yaml、grafana-service.yaml
需要在service文件中添加type类型为NodePort
3.2、修改prometheus-service.yaml
bash
[root@master manifests]# vi prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.46.0
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort # 添加此行即可,grafana和alertmanager修改方式相同
ports:
- name: web
port: 9090
targetPort: web
- name: reloader-web
port: 8080
targetPort: reloader-web
selector:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
sessionAffinity: ClientIP
3.3、修改alertmanager-service.yaml
bash
[root@master manifests]# alertmanager-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: alert-router
app.kubernetes.io/instance: main
app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 0.26.0
name: alertmanager-main
namespace: monitoring
spec:
type: NodePort
ports:
- name: web
port: 9093
targetPort: web
- name: reloader-web
port: 8080
targetPort: reloader-web
selector:
app.kubernetes.io/component: alert-router
app.kubernetes.io/instance: main
app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus
sessionAffinity: ClientIP
3.4、修改grafana-service.yaml
bash
[root@master manifests]# grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 9.5.3
name: grafana
namespace: monitoring
spec:
type: NodePort
ports:
- name: http
port: 3000
targetPort: http
selector:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
3.5、安装部署
bash
[root@master manifests]# cd setup
[root@master setup]# kubectl create -f . # 使用.表示执行此目录下的所有文件
[root@master setup]# cd ..
[root@master manifests]# kubectl create -f . # 使用.表示执行此目录下的所有文件
注意:访问grafana和普罗米修斯时一定要注意这个两个服务是在哪个节点上面跑这个然后pod所在的公网ip地址加高端口
四、配置grafana监控k8s集群以及业务服务的JVM
4.1、访问:http://115.159.6.164:44/login
注意:grafana账号密码自定义

4.2、配置grafana监控k8s集群




点击保存即可

4.3、配置grafana监控业务服务JVM
访问普罗米修斯http://115.159.6.164:1696/graph?g0.expr=\&g0.tab=1\&g0.stacked=0\&g0.show_exemplars=0\&g0.range_input=1h


配置业务pod服务jvm抓取
4.4、安装一个PodMonitor
PodMonitor 是一种 CRD(Custom Resource Definition,自定义资源),由 kube-prometheus 或 kube-prometheus-stack 安装后自动注册。它允许你:
● 通过 Pod 标签选择器选择要监控的 Pod
● 设置抓取路径(如 /actuator/prometheus)、端口名、抓取频率等
● 与 Prometheus 自动集成,不需要写 job 配置
bash
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: 无状态后端的名称
namespace: monitoring
spec:
namespaceSelector:
matchNames:
- monitoring # 💡 抓取目标 Pod 所在的命名空间
podMetricsEndpoints:
- interval: 15s
path: /actuator/prometheus
port: metric
relabelings:
- action: replace
sourceLabels:
- __meta_kubernetes_pod_label_app
targetLabel: application
- action: replace
replacement: prod
targetLabel: environment
scheme: http
scrapeTimeout: 10s
selector:
matchLabels:
app: 无状态后端的名称
启动命令
[root@master ~]# kubectl apply -f 无状态后端的名称.yaml
此时在访问普罗米修斯查看,后端服务已经采集到了

4.5、配置后端服务jvm监控




保存即可

五、设置抓取所有命名空间下的pod服务
5.1、查询Prometheus CR
bash
[root@master ~]# kubectl get prometheus -n monitoring
NAME VERSION DESIRED READY RECONCILED AVAILABLE AGE
k8s 2.46.0 2 2 True True 80m
5.2、抓取所有 namespace 下的 PodMonitor
bash
[root@master ~]# kubectl edit prometheus k8s -n monitoring
spec: ##添加如下4行
podMonitorSelector: {}
podMonitorNamespaceSelector: {}
serviceMonitorSelector: {}
serviceMonitorNamespaceSelector: {}
5.3、在编辑grafana的jvm监控面板变量设置即可下拉选取命名空间




总结
** kube-prometheus-release 通过 Prometheus Operator + CRD 的方式,实现了 Kubernetes 平台监控与业务指标监控的统一管理。集群层监控开箱即用,业务层监控通过 PodMonitor / ServiceMonitor 声明式接入。通过规范化 PodMonitor 命名空间、标签注入与 Grafana 变量设计,可以实现跨命名空间、可复用、可扩展的业务监控体系。**