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"框中的值。
相关推荐
名字还没想好☜2 小时前
Prometheus 告警实战:写 alerting rules、用 Alertmanager 做路由分组与抑制
运维·前端·javascript·docker·kubernetes·prometheus
西峰u4 小时前
Java多线程初阶完整总结|线程、锁、volatile、等待通知、常见案例
java·开发语言·jvm
H_老邪4 小时前
JVM 遇到的问题-1.1
jvm
SKH.4 小时前
Linux软件编程(5)线程
java·linux·jvm
liangbo77 小时前
JVM规范第 2章:从 class 文件到运行时数据区
java·jvm
SamChan909 小时前
用Prometheus+Grafana搭建PDF翻译服务监控看板:指标采集与告警实战
python·ai·pdf·grafana·prometheus·机器翻译
^酸酸9 小时前
Prometheus 监控架构部署实战:二进制与 Docker 双方案
docker·架构·prometheus
沐苏瑶9 小时前
JVM-内存区域、垃圾回收与类加载机制
java·jvm
Mr. zhihao21 小时前
死锁排查实战:JVM 唯一会“自动报案“的问题(场景 B5)
java·jvm·gc
Mr. zhihao1 天前
OOM 排查实战(大结局):从老年代爬坡到 VisualVM 引用链实锤(场景 B4)
jvm·gc·oom·mat·visulvm