场景

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

         基于k8s场景

prometheus数据收集

  • 配置service的lable,便于prometheus使用lable进行数据采集,本案例使用prometheus=jvm为标签
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
...
# 查看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
# 删除pod方式重启,k8s启动pod
kubectl delete pod lizz-test-server-xxx

# k8s滚动重启service
kubectl rollout restart deployment/lizz-test-server
  • 修改prometheus配置文件,增加采集数据任务
# 查看monitoring空间下的configMap,可以看到prometheus的configMap
# cm 和 ConfigMap一个意思
kubectl get cm -n monitoring
#修改配置,加入jvm数据采集
kubectl edit cm prometheus-server-conf -n monitoring
  •  在配置文件中的scrape_configs下增加抓取任务如下:
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进行替换,配置如下:
...
        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”框中的值。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐