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"框中的值。
相关推荐
喝可乐的布偶猫41 分钟前
Java类变量(静态变量)
java·开发语言·jvm
abigalexy3 小时前
深入JVM底层-垃圾回收GC算法
jvm
码上淘金4 小时前
【Prometheus 】通过 Pushgateway 上报指标数据
prometheus
麦兜*21 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
真实的菜1 天前
JVM类加载系统详解:深入理解Java类的生命周期
java·开发语言·jvm
在未来等你1 天前
JVM调优实战 Day 15:云原生环境下的JVM配置
java·jvm·性能优化·虚拟机·调优
黄雪超2 天前
JVM——函数式语法糖:如何使用Function、Stream来编写函数式程序?
java·开发语言·jvm
ThetaarSofVenice2 天前
对象的finalization机制Test
java·开发语言·jvm
博同学2 天前
Nginx + ELK + Grafana 全球访问热力图
nginx·elk·grafana
很小心的小新2 天前
12、jvm运行期优化
java·开发语言·jvm·笔记