Grafana展示k8s中pod的jvm监控面板/actuator/prometheus

场景

为保障java服务正常运行,对服务的jvm进行监控,通过使用actuator组件监控jvm情况,使用prometheus对数据进行采集,并在Grafana展现。

基于k8s场景

prometheus数据收集

  • 配置service的lable,便于prometheus使用lable进行数据采集,本案例使用prometheus=jvm为标签
bash 复制代码
kubectl edit service lizz-test-server -n lizz

#输出修改
...
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2022-05-05T08:16:46Z"
  labels:
    prometheus: jvm # 增加采集识别标签
    app: lizz-test-server
  name: lizz-test-server
  namespace: lizz
...
bash 复制代码
# 查看k8s中service
kubectl describe service lizz-test-server -n lizz


#输出
name:                     lizz-test-server
Namespace:                lizz
Labels:                   prometheus=jvm
                          app=lizz-test-server
Selector:                 app=lizz-test-server
...
  • 重启service或pod,新增标签生效,pod中会带上server中的lable
bash 复制代码
# 删除pod方式重启,k8s启动pod
kubectl delete pod lizz-test-server-xxx

# k8s滚动重启service
kubectl rollout restart deployment/lizz-test-server
  • 修改prometheus配置文件,增加采集数据任务
bash 复制代码
# 查看monitoring空间下的configMap,可以看到prometheus的configMap
# cm 和 ConfigMap一个意思
kubectl get cm -n monitoring
#修改配置,加入jvm数据采集
kubectl edit cm prometheus-server-conf -n monitoring
  • 在配置文件中的scrape_configs下增加抓取任务如下:
bash 复制代码
global:
  scrape_interval: 30s
  evaluation_interval: 30s
...
scrape_configs:
  - job_name: 'jvm-monitor' #任务名称
    metrics_path: /actuator/prometheus # 数据抓取地址
    scheme: http # 请求协议
    kubernetes_sd_configs: # 服务发现配置
      - role: endpoints # 在Kubernetes Endpoints中查找服务
    relabel_configs:
      - source_labels: [__meta_kubernetes_service_label_prometheus] # 匹配标签
        regex: 'jvm' # 保留标签值为jvm的服务
        action: keep
      - source_labels: [__meta_kubernetes_namespace] 
        action: replace # 替换标签,用于和模板中的内容一致
        target_label: spring_namespace #可以根据模板中的内容进行调整
      - source_labels: [__meta_kubernetes_service_name]
        action: replace # 替换标签,用于和模板中的内容一致
        target_label: spring_name #可以根据模板中的内容进行调整
      - source_labels: [__meta_kubernetes_pod_name]
        action: replace # 替换标签,用于和模板中的内容一致
        target_label: instance #可以根据模板中的内容进行调整
...
  • 当抓取地址不一致时,可以将metrics_path进行替换,配置如下:
bash 复制代码
...
        relabel_configs:
          - source_labels: [__meta_kubernetes_service_label_prometheus]
            regex: 'jvm'
            action: keep
          - source_labels: [__meta_kubernetes_service_name]
            regex: 'lizz-test1-server' #当service.name=lizz-test1-server是
            action: replace # 替换方法
            target_label: __metrics_path__ # 替换标签metrics.path
            replacement: /lizz-test1-server/actuator/prometheus # 替换后的路径
...
  • 刷prometheus缓存,在服务配置中查看配置是否生效。
  • 在graph中搜索jvm就可以看到是否已经采集成功。

Grafana创建面板

  • 下载jvm面板模板

Dashboards | Grafana Labs

  • dashboards中使用import导入
  • 填写面板信息和数据源后导入完成
  • 完成后显示jvm监控面板信息,其中筛选项如果没有正确显示,可以进行修改如下

修改筛选项内容和取值

  • Name:这个选项的id,取值时使用
  • Lable:显示明细
  • Date source:数据来源
  • query Type:数据类型
  • lable:取值标签
  • metric:匹配条件,为空时显示所有内容
    • jvm_memory_used_bytes{spring_namespace="namespace",spring_name="service"}
    • jvm_memory_used_bytes指标对应的就是prometheus中采集的数据指标
    • jvm_memory_used_bytes指标中,spring_namespace等于name为"namespace"选择中的值,spring_name等于name为"service"框中的值。
相关推荐
wgslucky11 分钟前
jdk17 配置jvm参数中gc的日志及控制日志数量和大小
jvm·gc·-xlog
痴儿哈哈5 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
野犬寒鸦10 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
闻哥13 小时前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
星辰_mya14 小时前
Elasticsearch线上问题之慢查询
java·开发语言·jvm
蓝帆傲亦14 小时前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
Codiggerworld1 天前
JVM内存模型——你的对象住在哪里?
jvm
马猴烧酒.1 天前
【面试八股|JVM虚拟机】JVM虚拟机常考面试题详解
jvm·面试·职场和发展
2301_790300961 天前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
m0_736919101 天前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python