以下演示一个简单的使用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="1141591465@qq.com"
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="1141591465@qq.com"
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

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

  1. 使用JMX Exporter监控Rainbond上的Java应用

    场景 Prometheus 社区开发了 JMX Exporter 用于导出 JVM 的监控指标,以便使用 Prometheus 来采集监控数据.当您的 Java 应用部署在Rainbond上后 可通过 ...

  2. 使用jmx exporter采集kafka指标

    预置条件 安装kafka.prometheus 使用JMX exporter暴露指标 下载jmx exporter以及配置文件.Jmx exporter中包含了kafka各个组件的指标,如server ...

  3. Spring JMX之一:使用JMX管理Spring Bean

    spring中关于jmx包括几个概念: MBeanExporter: 从字面上很容易理解, 用来将一些spring的bean作为MBean暴露给MBEanServer.MBeanServerFacto ...

  4. <一>企业级开源仓库nexus实战应用–nexus的安装

    1,Nexus 介绍. Nexus是什么? Nexus 是一个强大的maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问. 不仅如此,他还可以用来创建yum.pypi.npm.doc ...

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

    下载jmx_exporter的jar包 https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/ ...

  6. nexus org.sonatype.nexus.bootstrap.jetty.JettyServer - Start failed

    INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - Runningjvm 1 | 2020-04- ...

  7. 老技术新谈,Java应用监控利器JMX(1)

    先聊聊最近比较流行的梗,来一次灵魂八问. 配钥匙师傅: 你配吗? 食堂阿姨: 你要饭吗? 算命先生: 你算什么东西? 快递小哥: 你是什么东西? 上海垃圾分拣阿姨: 你是什么垃圾? 滴滴司机: 你搞清 ...

  8. 从零开始写一个Exporter

    前言 上一篇文章中已经给大家整体的介绍了开源监控系统Prometheus,其中Exporter作为整个系统的Agent端,通过HTTP接口暴露需要监控的数据.那么如何将用户指标通过Exporter的形 ...

  9. Spring boot参考指南

    介绍 转载自:https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details 带目录浏览地址:http://ww ...

随机推荐

  1. 如何配置这个maven仓库的源http://mvnrepository.com/repos

    http://mvnrepository.com/repos 主要是ID .mirrorof.name 怎么配置,这个网站上有spring5.0的,别的仓库没有,我需要这个源. 原文地址:https: ...

  2. C# vb .net实现黑白效果特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的黑白效果效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...

  3. 网页调用文件另存为js

    查看引用是否正常,页面添加html代码. <a id="downLoad" onclick="oDownLoad('downLoad')">下载&l ...

  4. 用GraphicsMagick处理svg转png遇到的坑

    1前言 用GraphicsMagick处理svg转png,且背景是透明且没有黑边,由于使用虚拟机的gm版本是1.3.28导致有黑边问题且svg中path中有opacity属性时,加上+antialia ...

  5. 一文读懂内网、公网和NAT

    我们做弱电监控系统的时候,都避免不了要跟IP地址打交道,比如摄像头.NVR.服务器等这些设备安装好之后,就需要给它们配上IP,那这个IP地址你了解嘛?今天我们就一起来聊聊什么是内网.公网和NAT地址转 ...

  6. kali之使用sqlmap进行sql注入

    sqlmap简介 sqlmap支持五种不同的注入模式: 1.基于布尔的盲注,即可以根据返回页面判断条件真假的注入. 2.基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是 ...

  7. kafka汇总

    Kafka 1. kafka概念 kafka是一个高吞吐亮的.分布式.基于发布/订阅(也就是一对多)的消息系统,最初由Linkedln公司开发的,使用Scala语言编写的,目前是Apache的开源项目 ...

  8. float与position间的区别

    float与position间的区别:    个人理解为:脱离文档流不一定脱离文本流:但脱离文本流,则也脱离文档流.[如有更好的理解还望评论区一起探讨,共同学习进步]一.float 浮动(脱离文档流, ...

  9. node连接Mysql报错ER_NOT_SUPPORTED_AUTH_MODE

    报错信息 本人系统安装的是mysql-installer-community-8.0.18.0.msi这个版本,然后我本地使用node-mysql去连接数据库. test.js文件 var mysql ...

  10. 函数式接口(Functional Interface)

    原文链接:https://www.cnblogs.com/runningTurtle/p/7092632.html 阅读目录 什么是函数式接口(Functional Interface) 函数式接口用 ...