以下演示一个简单的使用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. Jenkins 远程启动nodejs失败,使用pm2守护Nodejs

    一.概述 使用Jenkins 远程ssh到linux,使用命令: ssh root@192.168.10.1 'cd /data/test;nohup npm start &' 发现linux ...

  2. Js的iframe相关问题,如何判断当前是否在iframe中,iframe和它的父窗口如何通信

    一.前言: 在web中,为了丰富我们的内容,往往需要引用其它HTML文件,这时候就需要用到 iframe 标签,本文就主要记录一下使用iframe所需要注意的问题 iframe 所使用的环境(笔者所遇 ...

  3. WPF 的 VisualBrush 只刷新显示的视觉效果,不刷新布局范围

    原文:WPF 的 VisualBrush 只刷新显示的视觉效果,不刷新布局范围 WPF 的 VisualBrush 可以帮助我们在一个控件中显示另一个控件的外观.这是非常妙的功能. 但是本文需要说其中 ...

  4. 分享AWS网站

    1.AWS服务运行状况检测网站:   https://status.amazonaws.cn/ 2.AWS架构白皮书:https://aws.amazon.com/cn/architecture/?a ...

  5. LocalDateTime&LocalDate&LocalTime

    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime ti ...

  6. iOS 13-Sign In with Apple

    最近了解了iOS 13新增功能之Sign In with Apple,Sign In with Apple是跨平台的,可以支持iOS.macOS.watchOS.tvOS.JS.本文主要内容为Sign ...

  7. 带有图标的MessageBox

    MessageBoxUtils类的代码如下: Ext.define('org.pine.util.MessageBoxUtils', { singleton: true, /** 普通信息提示框 */ ...

  8. spring boot 集成 sitemesh

    一.Sitemesh简介 Sitemesh是由一个基于Web页面布局.装饰及与现存Web应用整合的框架,是一个装饰器.它能帮助我们在由大量页面工程的项目中创建一致的页面布局和外观,如一致的导航条.一致 ...

  9. Yii2通过curl调用json-rpc接口

    Yii2可以通过json-rpc为前端提供接口数据,通常情况睛会使用异步的形式调用接口,有时也会使用curl调用接口数据. 一.异步调用json-rpc接口 $.ajax({ type: 'POST' ...

  10. 详解Linux系统中10个最危险的命令

    概述 大多数的朋友都是主要用的windows系统,基本用鼠标就可以完成所有的操作,但是在Linux系统中很多都是键盘+命令操作电脑的,Linux命令行使用很有趣,但有时候也很危险,尤其是在你不确定你自 ...