实战Prometheus监控jmx_export 堆栈内存

简介: jmx_export 堆栈内存监控

下载地址

https://github.com/prometheus/jmx_exporter

直接下载jar包

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

解压编译jar包

tar xf jmx_exporter-parent-0.16.1.tar.gz
cd jmx_exporter-parent-0.16.1/  
./mvnw package

jar 保存放位置

cd jmx_exporter-parent-0.16.1/jmx_prometheus_javaagent/target/

目录结构

[root@node-1 xxl-job-admin]# ls
Dockerfile  jmx_prometheus_javaagent-0.16.1.jar  jmx.yaml  pom.xml  src  target

dockerfile 模板

[root@node-1 xxl-job-admin]# cat Dockerfile    或者直接封装到底包里
FROM openjdk:8-jre-slim
MAINTAINER lhz

ENV PARAMS=""

ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ADD jmx.yaml /jmx.yaml
ADD target/xxl-job-admin-*.jar /app.jar
ADD jmx_prometheus_javaagent-0.16.1.jar /jmx.jar
ENTRYPOINT ["sh","-c","java -jar  -javaagent:/jmx.jar=7070:/jmx.yaml   $JAVA_OPTS /app.jar $PARAMS"]

生成镜像

docker build -t "xxl:v1" .

配置文件

[root@node-1 xxl-job-admin]# cat jmx.yaml 
---
startDelaySeconds: 0
hostPort: 0.0.0.0:1234
username: 
password: 
#jmxUrl: service:jmx:rmi:///jndi/rmi://0.0.0.0:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
whitelistObjectNames: ["org.apache.cassandra.metrics:*"]
blacklistObjectNames: ["org.apache.cassandra.metrics:type=ColumnFamily,*"]
rules:
  - pattern: 'org.apache.cassandra.metrics<type=(\w+), name=(\w+)><>Value: (\d+)'
    name: cassandra_$1_$2
    value: $3
    valueFactor: 0.001
    labels: {}
    help: "Cassandra metric $1 $2"
    cache: false
    type: GAUGE
    attrNameSnakeCase: false

编排文件编写 把7070 端口映射出去

apiVersion: v1
kind: Service
metadata:
  name: xxl
  namespace: xxl
  labels:
    app: xxl    
spec:
  type: NodePort
  ports:
  - port: 5601
    name: jdk
  - port: 7070
    targetPort: 7070
    protocol: TCP
    nodePort: 30001
    name: jvm
  selector:
    app: xxl

ip+端口访问

告警规则 需要根据上面的模板修改

mkdir -pv /data/pkgs/prometheus/jvm-exporter/etc/conf.d/rules
vim /data/pkgs/prometheus/jvm-exporter/etc/conf.d/rules/rule_jvm_alert.yml
groups:
  - name: jvm-alerting
    rules:
    # down了超过1分钟
    - alert: instance-down
      expr: up == 0
      for: 1m
      labels:
        severity: 严重
        team: 运维
      annotations:
        summary: "Instance {{ $labels.instance }} down"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

    # down了超过5分钟
    - alert: instance-down
      expr: up == 0
      for: 5m
      labels:
        severity: 灾难
        team: 运维
      annotations:
        summary: "Instance {{ $labels.instance }} down"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

    # 堆空间使用超过50%
    - alert: heap-usage-too-much
      expr: jvm_memory_bytes_used{job="jvm-exporter", area="heap"} / jvm_memory_bytes_max * 100 > 50
      for: 1m
      labels:
        severity: 警告
        team: 运维
      annotations:
        summary: "JVM Instance {{ $labels.instance }} memory usage > 50%"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been in status [heap usage > 50%] for more than 1 minutes. current usage ({{ $value }}%)"

    # 堆空间使用超过80%
    - alert: heap-usage-too-much
      expr: jvm_memory_bytes_used{job="jvm-exporter", area="heap"} / jvm_memory_bytes_max * 100 > 80
      for: 1m
      labels:
        severity: 严重
        team: 运维
      annotations:
        summary: "JVM Instance {{ $labels.instance }} memory usage > 80%"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been in status [heap usage > 80%] for more than 1 minutes. current usage ({{ $value }}%)"
    
    # 堆空间使用超过90%
    - alert: heap-usage-too-much
      expr: jvm_memory_bytes_used{job="jvm-exporter", area="heap"} / jvm_memory_bytes_max * 100 > 90
      for: 1m
      labels:
        severity: 灾难
        team: 运维
      annotations:
        summary: "JVM Instance {{ $labels.instance }} memory usage > 90%"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been in status [heap usage > 90%] for more than 1 minutes. current usage ({{ $value }}%)"

    # 在5分钟里,Old GC花费时间超过30%
    - alert: old-gc-time-too-much
      expr: increase(jvm_gc_collection_seconds_sum{gc="PS MarkSweep"}[5m]) > 5 * 60 * 0.3
      for: 5m
      labels:
        severity: 警告
        team: 运维
      annotations:
        summary: "JVM Instance {{ $labels.instance }} Old GC time > 30% running time"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been in status [Old GC time > 30% running time] for more than 5 minutes. current seconds ({{ $value }}%)"

    # 在5分钟里,Old GC花费时间超过50%        
    - alert: old-gc-time-too-much
      expr: increase(jvm_gc_collection_seconds_sum{gc="PS MarkSweep"}[5m]) > 5 * 60 * 0.5
      for: 5m
      labels:
        severity: 严重
        team: 运维
      annotations:
        summary: "JVM Instance {{ $labels.instance }} Old GC time > 50% running time"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been in status [Old GC time > 50% running time] for more than 5 minutes. current seconds ({{ $value }}%)"

    # 在5分钟里,Old GC花费时间超过80%
    - alert: old-gc-time-too-much
      expr: increase(jvm_gc_collection_seconds_sum{gc="PS MarkSweep"}[5m]) > 5 * 60 * 0.8
      for: 5m
      labels:
        severity: 灾难
        team: 运维
      annotations:
        summary: "JVM Instance {{ $labels.instance }} Old GC time > 80% running time"
        description: "{{ $labels.instance }} of job {{ $labels.job }} has been in status [Old GC time > 80% running time] for more than 5 minutes. current seconds ({{ $value }}%)"


# 4、准备lflk-test.json
vim /data/pkgs/yibot_lflk_tools_v4.0/prometheus/jvm-exporter/etc/conf.d/lflk-test.json
[
  {
    "targets": [
      "x.x.x.x:30001"
    ],
    "labels": {
      "tag": "lflk",
      "system": "大地调度系统",
      "env": "测试环境",
      "owner": "大地",
      "cloud": "华为云",
      "ip": "x.x.x.x",
      "java": "adapter"
    },
  {
    "targets": [
      "x.x.x.x:30001"
    ],
    "labels": {
      "tag": "lflk",
      "system": "大地调度系统",
      "env": "测试环境",
      "owner": "大地",
      "cloud": "华为云",
      "ip": "x.x.x.x",
      "java": "watcher"
    }
]
# 4、启动容器
docker run -d --name prometheus-jvm-exporter -p 9101:9090  -v /etc/localtime:/etc/localtime \
 -v /data/pkgs/yibot_lflk_tools_v4.0/prometheus/jvm-exporter/etc/prometheus.yml:/etc/prometheus/prometheus.yml \
 -v /data/pkgs/yibot_lflk_tools_v4.0/prometheus/jvm-exporter/etc/conf.d:/etc/prometheus/conf.d \
 prom/prometheus --web.enable-lifecycle  --config.file=/etc/prometheus/prometheus.yml

官方模板

https://grafana.com/grafana/dashboards/12856/revisions

相关文章
|
1月前
|
编译器 程序员 C语言
C语言从入门到实战——动态内存管理
在C语言中,动态内存管理是指程序运行时,通过调用特定的函数动态地分配和释放内存空间。动态内存管理允许程序在运行时根据实际需要来分配内存,避免了静态内存分配在编译时就确定固定大小的限制。
45 0
|
2月前
|
C语言
C语言内存及堆栈操作
C语言内存及堆栈操作
18 0
|
3月前
|
缓存 监控 算法
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
68 0
|
17天前
|
Java
java中jar启动设置内存大小java -jar 设置堆栈内存大小
java中jar启动设置内存大小java -jar 设置堆栈内存大小
11 1
|
25天前
|
缓存 移动开发 Java
构建高效Android应用:内存优化实战指南
在移动开发领域,性能优化是提升用户体验的关键因素之一。特别是对于Android应用而言,由于设备和版本的多样性,内存管理成为开发者面临的一大挑战。本文将深入探讨Android内存优化的策略和技术,包括内存泄漏的诊断与解决、合理的数据结构选择、以及有效的资源释放机制。通过实际案例分析,我们旨在为开发者提供一套实用的内存优化工具和方法,以构建更加流畅和高效的Android应用。
|
28天前
|
存储 程序员 编译器
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
【C/C++ 堆栈以及虚拟内存分段 】C/C++内存分布/管理:代码区、数据区、堆区、栈区和常量区的探索
27 0
|
1月前
|
存储 小程序 编译器
C语言从入门到实战——数据在内存中的存储方式
数据在内存中的存储方式是以二进制形式存储的。计算机中的内存由一系列存储单元组成,每个存储单元都有一个唯一的地址,用于标识它在内存中的位置。计算机可以通过这些地址来定位并访问内存中的数据。 数据在内存中的存储方式取决于数据的类型。数值类型的数据(例如整数、浮点数等)以二进制形式存储,并根据类型的不同分配不同的存储空间。字符串和字符数据由ASCII码存储在内存中。数据结构(例如数组、结构体、链表等)的存储方式也取决于其类型和组织结构。 总之,数据在内存中以二进制形式存储,并根据其类型和组织方式分配不同的存储空间。
43 0
|
1月前
|
C语言
C语言从入门到实战——常用内存函数的了解和模拟实现
内存函数(memory functions)指的是控制计算机内存操作的函数
21 0
|
1月前
|
NoSQL 测试技术 文件存储
内存泄漏治理实战:TDengine 研发团队使用 Windbg 的经验分享
内存泄漏是一种常见的问题,它会导致程序的内存占用逐渐增加,最终导致系统资源耗尽或程序崩溃。这次内存泄漏问题发生在 Windows 下,TDengine 研发选择使用 Windbg 来解决问题。结果证明,在 Windows 下,使用 Windbg 也是一个不错的选择。
30 0
|
3月前
|
安全 IDE Java
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
jvm性能调优实战 - 44Metaspace区域是如何因为类太多而发生内存溢出OOM
128 0

热门文章

最新文章