K8s使用prometheus监控pod的jvm内存

基础环境:

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

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Prometheus监控Kubernetes Pod,您可以执行以下步骤: 1. 首先,确保您的Kubernetes集群已经安装了Prometheus Operator。Prometheus Operator是一个用于在Kubernetes上自动部署和管理Prometheus和其相关组件的项目。 2. 创建一个用于配置Pod监控Prometheus ServiceMonitor资源。您可以创建一个YAML文件,指定您要监控Pod的标签选择器,并将其与Prometheus Operator一起部署。示例如下: ```yaml apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: my-pod-monitor labels: app: prometheus spec: selector: matchLabels: app: my-pod endpoints: - port: metrics ``` 在上面的示例中,我们将监控具有`app=my-pod`标签的Pod,并假设Pod暴露了一个名为`metrics`的端口用于指标收集。 3. 将上述YAML文件应用于您的Kubernetes集群,使用kubectl命令执行以下操作: ```shell kubectl apply -f path/to/your/pod-monitor.yaml ``` 4. Prometheus Operator将根据ServiceMonitor定义自动为您创建并配置Prometheus实例。如果尚未安装Prometheus Operator,您需要先安装它。 5. 确认PrometheusPod是否成功关联。您可以通过访问Prometheus的Web界面,并在查询表达式中输入`kube_pod_labels{app="my-pod"}`来检查是否有指标与Pod相关联。 这样,您就可以使用Prometheus监控您的Kubernetes Pod了。您可以定义自己的Prometheus规则和警报规则,并使用Prometheus提供的查询语言PromQL来分析和查询收集到的指标数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值