转载 

JVM 监控系统搭建 JMX+Jolokia+telegraf+influxdb

分类:运维    1017人阅读    IT小君  2021-06-20 21:25

我们先简单看一下 JVM 监控的整体架构图:



JVM 的各种内存信息,会通过 JMX 接口进行暴露;Jolokia 组件负责把 JMX 信息翻译成容易读取的 HTTP 请求。


Jolokia 是一个将 JMX 转换成 HTTP 的适配器,方便了 JMX 的使用。 

spring boot 集成Jolokia

直接在 pom 文件里加入 jolokia 的依赖。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
        <groupId>org.jolokia</groupId>
        <artifactId>jolokia-core</artifactId>
</dependency>

在 application.yml 中简单地加入一点配置,就可以通过 HTTP 接口访问 JMX 的内容了

management:
  endpoints:
    web:
      exposure:
        include: jolokia

 你也可以直接下载仓库中的 monitor-demo 项目,启动后访问 http://localhost:8084/actuator/jolokia/list,即可获取 JMX 的 json 数据。访问链接 /demo 之后,会使用 guava 持续产生内存缓存。


telegraf 组件作为一个通用的监控 agent,和 JVM 进程部署在同一台机器上,通过访问转化后的 HTTP 接口,以固定的频率拉取监控信息;然后把这些信息存放到 influxdb 时序数据库中;最后,通过高颜值的 Grafana 展示组件,设计 JVM 监控图表。

 

整个监控组件是可以热拔插的,并不会影响原有服务。监控部分也是可以复用的,比如 telegraf 就可以很容易的进行操作系统监控。

influxdb

influxdb 是一个性能和压缩比非常高的时序数据库,在中小型公司非常流行,点击这里可获取 influxdb

 

在 CentOS 环境中,可以使用下面的命令下载。

wget -c https://dl.influxdata.com/influxdb/releases/influxdb-1.7.9_linux_amd64.tar.gz
tar xvfz influxdb-1.7.9_linux_amd64.tar.gz


解压后,然后使用 nohup 进行启动。 

 

nohup ./influxd &

 

InfluxDB 将在 8086 端口进行监听。

Telegraf

Telegraf 是一个监控数据收集工具,支持非常丰富的监控类型,其中就包含内置的 Jolokia 收集器。

 

接下来,下载并安装 Telegraf:

 

wget -c https://dl.influxdata.com/telegraf/releases/telegraf-1.13.1-1.x86_64.rpm
sudo yum localinstall telegraf-1.13.1-1.x86_64.rpm

 

Telegraf 通过 jolokia 配置收集数据相对简单,比如下面就是收集堆内存使用状况的一段配置。

 

[[inputs.jolokia2_agent.metric]]
    name  = "jvm"
    field_prefix = "Memory_"
    mbean = "java.lang:type=Memory"
    paths = ["HeapMemoryUsage", "NonHeapMemoryUsage", "ObjectPendingFinalizationCount"]

 

设计这个配置文件的主要难点在于对 JVM 各个内存分区的理解。由于配置文件比较长,可以参考仓库中的 jvm.conf 和 sys.conf,你可以把这两个文件,复制到 /etc/telegraf/telegraf.d/ 目录下面,然后执行 systemctl restart telegraf 重启 telegraf。

grafana

grafana 是一个颜值非常高的监控展示组件,支持非常多的数据源类型,对 influxdb 的集成度也比较高,可通过以下地址进行下载:https://grafana.com/grafana/download

 

wget -c https://dl.grafana.com/oss/release/grafana-6.5.3.linux-amd64.tar.gz
tar -zxvf grafana-6.5.3.linux-amd64.tar.gz

 

下面是我已经做好的一张针对于 CMS 垃圾回收器的监控图,你可以导入 grafana-jvm-influxdb.json 文件进行测试。 


在导入之前,还需要创建一个数据源,选择 influxdb,填入 db 的地址即可。

 

集成

把我们的 Spring Boot 项目打包(见仓库),然后上传到服务器上去执行。

 

打包方式:

 

mvn package -Dmaven.tesk.skip=true

 

执行方式(自行替换日志方面配置):

 

mkdir /tmp/logs

nohup  java   -XX:+UseConcMarkSweepGC -Xmx512M -Xms512M -Djava.rmi.server.hos
tname=192.168.99.101 -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmx
remote.port=14000  -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.manage
ment.jmxremote.authenticate=false -verbose:gc -XX:+PrintGCDetails -XX:+PrintG
CDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistributio
n -Xloggc:/tmp/logs/gc_%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPat
h=/tmp/logs -XX:ErrorFile=/tmp/logs/hs_error_pid%p.log -XX:-OmitStackTraceInF
astThrow  -jar monitor-demo-0.0.1-SNAPSHOT.jar  2>&1  &

 

请将 IP 地址改成自己服务器的实际 IP 地址,这样就可以使用 jmc 或者 VisualVM 等工具进行连接了。

 

确保 Telegraf、InfluxDB、Grafana 已经启动,这样,Java 进程的 JVM 相关数据,将会以 10 秒一次的频率进行收集,我们可以选择 Grafana 的时间轴,来查看实时的或者历史的监控曲线。

 

这类监控信息,可以保存长达 1 ~ 2 年,也就是说非常久远的问题,也依然能够被追溯到。如果你想要对 JVM 尽可能地进行调优,就要时刻关注这些监控图。

点击广告,支持我们为你提供更好的服务

js+css3抽奖转盘旋转点餐代码

html5 svg夜空中星星流星动画场景特效

响应式太阳能能源公司网站模板

HTML5数字产品服务公司网站模板

中小型创意设计服务公司网站模板

html5 canvas进度条圆环图表统计动画特效

响应式咖啡饮品宣传网站模板

HTML5 Canvas竖直流动线条背景动画特效

有机水果蔬菜HTML5网站模板

canvas炫酷鼠标移动文字粒子特效

现代时尚家具公司网站模板

css+js实现的颜色渐变数字时钟动画特效

html5图标下拉搜索框自动匹配代码

响应式时尚单品在线商城网站模板

css鼠标跟随文字模糊特效

html5 canvas彩色碎片组合球形旋转动画特效

HTML5现代家居装潢公司网站模板

网页设计开发公司网站模板

小众时尚单品在线电子商务网站模板

jQuery右端悬浮带返回顶部特效

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务