使用jmx-exporter&&jmxtrans && nexus jmx 暴露nexus 系统指标信息

以下演示一个简单的使用jmxexporter 暴露nexus jmx 指标为prometheus metrics,同时也集成了一个简单的jmxtrans 输出数据到
graphite

环境准备

  • docker-compose 文件
version: "3"
services: 
  graphite:
    image: graphiteapp/graphite-statsd
    ports:
    - "80:80"
    - "2003-2004:2003-2004"
    - "2023-2024:2023-2024"
    - "8125:8125/udp"
    - "8126:8126"
  jmx-exporter:
    image: dalongrong/jmx-expoter
    build:
      context: ./
      dockerfile: Dockerfile-jmx
    ports: 
    - "9999:9999"
  jmxtrans:
    image: dalongrong/jmxtrans
    build: 
      context: ./
      dockerfile: Dockerfile-jmxtrans
  nexus:
    image: sonatype/nexus3:3.17.0
    container_name: nexus
    ports: 
    - "8081:8081"
    - "8099:8099"
    - "8044:8044"
    volumes: 
    - "./nexus-data:/nexus-data"
    - "./nexus/nexus.vmoptions:/opt/sonatype/nexus/bin/nexus.vmoptions"
    - "./nexus/org.apache.karaf.features.cfg:/opt/sonatype/nexus/etc/karaf/org.apache.karaf.features.cfg"
    - "./nexus/org.apache.karaf.management.cfg:/opt/sonatype/nexus/etc/karaf/org.apache.karaf.management.cfg"
  • jmx-exporter docker 镜像说明
FROM openjdk:8u222-jdk
LABEL AUTHOR="dalongrong"
LABEL EMAIL="[email protected]"
WORKDIR /
COPY jmx_prometheus_httpserver-0.12.1-SNAPSHOT-jar-with-dependencies.jar /jmx_prometheus_httpserver-0.12.1-SNAPSHOT-jar-with-dependencies.jar
COPY docker-entrypiont-jmx-exporter.sh /docker-entrypiont.sh
COPY jmx-exporter.yaml /jmx-exporter.yaml
RUN chmod +x /docker-entrypiont.sh
EXPOSE 9999
ENTRYPOINT [ "/docker-entrypiont.sh" ]

docker-entrypiont-jmx-exporter.sh

#!/bin/sh
java -jar /jmx_prometheus_httpserver-0.12.1-SNAPSHOT-jar-with-dependencies.jar 0.0.0.0:9999 /jmx-exporter.yaml
  • jmxtrans docker 镜像说明
FROM openjdk:8u222-jdk
LABEL AUTHOR="dalongrong"
LABEL EMAIL="[email protected]"
WORKDIR /
COPY jmxtrans-270-all.jar /jmxtrans-270-all.jar
COPY docker-entrypiont-jmx.sh /docker-entrypiont.sh
COPY jmxtrans.json /jmxtrans.json
RUN chmod +x /docker-entrypiont.sh
ENTRYPOINT [ "/docker-entrypiont.sh" ]

docker-entrypiont-jmx.sh

#!/bin/sh
java -jar /jmxtrans-270-all.jar -f /jmxtrans.json

jmxtrans.json 是一个简单的jmx query 配置,可以按照实际需要配置

{
  "servers": [{
    "port": "8044",
    "host": "nexus",
    "username" : "admin",
    "password" : "dalong123",
    "numQueryThreads" : 4,
    "queries": [
      {
        "obj": "java.lang:type=Memory",
        "resultAlias":"Memory",
        "attr" : [ "HeapMemoryUsage", "NonHeapMemoryUsage" ],
        "outputWriters": [{
          "@class": "com.googlecode.jmxtrans.model.output.GraphiteWriterFactory",
          "port": 2003,
          "host": "graphite",
          "rootPrefix":"webapi",
          "typeNames" : ["name"],
          "flushStrategy" :"always",
          "poolSize" : 10
        }]
      }
      ,
      {
        "obj": "java.lang:type=ClassLoading",
        "resultAlias":"ClassLoading",
        "attr": ["TotalLoadedClassCount","LoadedClassCount","UnloadedClassCount"],
        "outputWriters": [{
          "@class": "com.googlecode.jmxtrans.model.output.GraphiteWriterFactory",
          "port": 2003,
          "rootPrefix":"webapi",
          "typeNames" : ["name"],
          "flushStrategy" :"always",
          "poolSize" : 10,
          "host": "graphite"
        }]
      }
    ]
  }]
}
  • nexus 说明
    直接参考官方的有点问题,我添加了以下配置
    nexus.vmoptions
-XX:+UnlockDiagnosticVMOptions
-XX:+UnsyncloadClass
-XX:+LogVMOutput
-XX:LogFile=../sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
-Dkaraf.data=../sonatype-work/nexus3
-Djava.io.tmpdir=../sonatype-work/nexus3/tmp
-Dkaraf.startLocalConsole=false
-Djava.rmi.server.hostname=nexus
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=8044
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.rmi.port=8044
-Dcom.sun.management.jmxremote.local.only=false

org.apache.karaf.features.cfg以及org.apache.karaf.management.cfg 配置参考官方介绍

  • jmx-exporter 编译
git clone https://github.com/prometheus/jmx_exporter.git
cd jmx_exporter
mvn clean package

启动&&测试

  • 启动
docker-compose build
docker-compose up -d
  • 效果

说明:

  • 当前直接使用容器运行的nexus,参考官方暴露jmx 有些问题,直接使用普通jmx 暴露的方式,进行了调整
  • jmx-exporter 使用httpserver 模式运行
  • jmx-exporter 使用源码编码方式,项目使用了编译好的
  • jmx-exporter && jmxtrans doker 镜像基于openjdk,镜像很简单
  • 没有添加prometheus server 以及granfana 添加起来也比较简单
  • 当前修改nexus jmx 启动参数的方式不是很安全,但是如果在容器内还可以勉强使用

参考资料

https://github.com/rongfengliang/jmx-exporter-jmxtrans-nexus-docker-compose
https://github.com/prometheus/jmx_exporter
https://github.com/jmxtrans/jmxtrans
https://support.sonatype.com/hc/en-us/articles/218501277-Configuring-Nexus-Repository-Manager-3-To-Allow-JMX-Connections

原文地址:https://www.cnblogs.com/rongfengliang/p/11225782.html

时间: 2024-07-31 09:26:14

使用jmx-exporter&&jmxtrans && nexus jmx 暴露nexus 系统指标信息的相关文章

初识Maven与nexus,及nexus安装

一.了解Maven 优秀的构建工具通过简单的命令,能够完成清理.编译.测试.打包.部署等一系列过程.同时,Maven跨平台,无论是在Windows.还是在Linux或Mac上,都可以使用同样的命令. 2.?依赖管理工具项目依赖的第三方的开源类库,都可以通过依赖的方式引入到项目中来.代替了原来需要首先下载第三方jar,再加入到项目中的方式.从而更好的解决了合作开发中依赖增多.版本不一致.版本冲突.依赖臃肿等问题. 具体是怎么实现的呢?Maven通过坐标系统准确的定位每一个构件,即通过坐标找到对应的

【集群监控】JMX exporter+Prometheus+Grafana监控Hadoop集群

下载jmx_exporter的jar包 https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar 创建配置文件namenode.yaml(datanode.yaml)放在任意位置,内容为你想要的metrics 参考配置: --- startDelaySeconds: 0 hostPort: master:1234 #maste

Tomcat JMX配置后,JMX端口就是不监听

百度出来的把Tomcat打开JVM的资料好多都没有提及要保证hostname -i不能是127.0.0.1这一点.弄得个人折腾了好久好久才知道原因.特记录于此,免得还有其他同事遇到像我一样的问题. 切记!  Tomcat服务器的hostname -i 返回的地址中不能有127.0.0.1这个.其他的就是按官方的文档,修改catlina.sh中的参数就可以了.

内存泄漏排查之:Show me your Memory

java 语言有个神奇的地方,那就是你时不时会去关注下内存.(当然了,任何牛逼的同学都应该关注内存) 今天我们就来这么场景吧:某应用运行了一段时间后,ecs监控报警了,内存比较高了,怎么办?随着时间的推移,发现内存越来越高(但是又不会打到100%),怎么办? 凡事讲究证据,报警说内存紧张就紧张吗,还得自己去验一下. 如何确认内存问题?这太重要了! 以下是几种查看内存问题的方法:(爱信不信啊) 1. top 等查看系统内存概况 top:内存去,按M按照内存大小排序,立马看到罪魁祸首.具体命令请参考

快速接入业务监控体系,grafana监控的艺术

做一个系统,如果不做监控,是不完善的. 如果为做一个快速系统,花力气去做监控,是不值得的. 因为,我们有必要具备一个能够快速建立监控体系的能力.即使你只是一个普通开发人员! 个人觉得,做监控有三个核心能力: 1. 持续收集数据的能力; (时间序列数据库) 2. 监控结果可视化的能力; 3. 异常监控可报警的能力; 只要把这三点做到了,那么,这个监控基本就成功了. 既然自己不方便做监控系统,那就只要好框架造型就可以了. 因grafana的图表功能个人感觉最强大,我们就以 grafana 作为监控抓

kubernetes 1.8

Cluster Lifecycle 层面对 kubeadm 添加了 self-hosted 功能,意味着可以将 Kubernetes 运行在 Kubernetes 上,即自举.自举被认为是系统"优雅"的一种体现,实际上 Kubernetes 在很早期就开始尝试自举,现在 kubeadm 直接添加此功能,无疑是更近一步.另外,尽管没有对外发布,kubeadm 社区也一直在尝试直接部署高可用(HA)Kubernetes 集群.可以预见 kubeadm 在会进一步解决 Kubernetes

springboot情操陶冶-jmx解析

承接前文springboot情操陶冶[email protected]注解解析,近期笔者接触的项目中有使用到了jmx的协议框架,遂在前文的基础上讲解下springboot中是如何整合jmx的 知识储备 JMX:Java Management Extension(Java管理应用扩展),这种机制可以方便的管理.监控正在运行的Java程序.常用于监控管理线程.内存.日志Level.服务重启.系统环境等等. 更多的知识点参考此篇文献:https://blog.csdn.net/u013256816/a

nexus 环境搭建 以及项目上传

1.Nexus下载 2.Nexus启动 解压后进入\nexus-2.1.2-bundle\nexus-2.1.2\bin\jsw\,根据操作系统类型选择文件夹,我选的是windows-x86-32文件夹,进入后可看到如下所示bat文件. 双击console-nexus.bat运行.游览器中输入http://127.0.0.1:8081/nexus/,出现如下图所示就代表nexus已经启动成功. 8081为默认的端口号,要修改端口号可进入nexus-2.1.2-bundle\nexus-2.1.2

cassandra高级操作之JMX操作

需求场景 项目中有这么个需求:统计集群中各个节点的数据量存储大小,不是记录数. 一开始有点无头绪,后面查看cassandra官方文档看到Monitoring章节,里面说到:Cassandra中的指标使用Dropwizard Metrics库进行管理. 这些指标可以通过JMX查询,也可以使用多个内置和第三方报告插件推送到外部监控系统(Jconsole).那么数据量存储大小是不是也是cassandra的某项指标了? 带着疑问,我通过Jconsole看到了cassandra的一些指标(先启动cassa