基础环境:

k8s集群,集群中已经安装prometheus。

第一步:下载监控使用的agent github连接:jmx_exporter

wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.16.1/jmx_prometheus_javaagent-0.16.1.jar

第二步:编辑prometheus-jmx-config.yaml文件

vim jmx-config.yaml

apiVersion: v1

kind: ConfigMap

metadata:

name: prometheus-jmx-config

namespace: default

data:

prometheus-jmx-config.yaml: |

lowercaseOutputLabelNames: true

lowercaseOutputName: true

whitelistObjectNames: ["java.lang:type=OperatingSystem"]

blacklistObjectNames: []

rules:

- pattern: 'java.lang<type=OperatingSystem><>(committed_virtual_memory|free_physical_memory|free_swap_space|total_physical_memory|total_swap_space)_size:'

name: os_$1_bytes

labels: {}

type: GAUGE

attrNameSnakeCase: true

- pattern: 'java.lang<type=OperatingSystem><>((?!process_cpu_time)\w+):'

name: os_$1

labels: {}

type: GAUGE

attrNameSnakeCase: true

第三步:在启动的java程序中配置agent,通常配置在JAVA_OPTS中,因为java在启动时会读取JAVA_OPTS中的配置。

在环境变量中添加如下内容

JAVA_OPTS="-javaagent:/data/jmx_exporter/jmx_prometheus_javaagent-0.16.1.jar=12345:/jmx/jmx-config.yaml"

启动方式: java ${JAVA_OPTS} -jar app.jar

官方给出的例子是:

java -javaagent:./jmx_prometheus_javaagent-0.16.1.jar=8080:config.yaml -jar yourJar.jar

因为我们是在pod中可选的方法有很多:

第一种方法:

直接在制作dockerImage时将jmx_prometheus_javaagent-0.16.1.jar和jmx-config.yaml 打包进去,在启动java项目时直接引用即可。

第二种方法(本文主要介绍):

使用configmap挂载jmx-config.yaml配置文件,将jmx_prometheus_javaagent-0.16.1.jar放在存储中挂载到容器内使用。

第四步:在prometheus配置文件中增加监控job

vim prometheus-configmap.yaml

......

- job_name: jvm

scrape_interval: 5s

kubernetes_sd_configs:

- role: endpoints

relabel_configs:

- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_jvm]

action: keep

regex: true

- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]

action: replace

target_label: __address__

regex: ([^:]+)(?::\d+)?;(\d+)

replacement: $1:$2

- source_labels: [__meta_kubernetes_service_name]

action: replace

regex: (.+)

target_label: application

replacement: $1

- action: labelmap

regex: __meta_kubernetes_service_label_(.+)

第五步:修改services 标签:

1.直接修改yaml文件: kubectl edit svc 你的service名字

例:kubectl edit svc app

apiVersion: v1

kind: Service

metadata:

annotations: #这是新增的annotate

prometheus.io/jvm: "true" #这是新增的lable

prometheus.io/port: "12345" #这是新增的lable

labels:

app: app

name: app

name: app

namespace: default

spec:

clusterIP: 10.247.4.104

externalTrafficPolicy: Cluster

ports:

- name: cce-service-0

nodePort: 30000

port: 30000

protocol: TCP

targetPort: 30000

selector:

app: app

sessionAffinity: None

type: NodePort

status:

loadBalancer: {}

2.直接命令行修改:

kubectl annotate svc 你的service名字 prometheus.io/jvm='true' prometheus.io/port='12345' --overwrite

例:

kubectl annotate svc app prometheus.io/jvm='true' prometheus.io/port='12345' --overwrite

第六步:检查prometheus 监控Targets (指标)是否存在job名为jvm的Targets

第七步:grafana添加模板

模板ID:8563

Logo

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

更多推荐