JMX
JMX (Java Management Extensions, o Java Management Extensions) es un marco para implantar funciones de gestión para aplicaciones, dispositivos, sistemas, etc. JMX puede abarcar una serie de plataformas heterogéneas de sistemas operativos, arquitecturas de sistemas y protocolos de transmisión de red, y desarrollar de manera flexible aplicaciones integradas de gestión de sistemas, redes y servicios.
En términos simples, con él, puede monitorear la información básica y el estado de ejecución de los programas Java.
Kafka abre la configuración JMX
Windows [modifique el archivo kafka-server-start.bat, agregue el puerto JMX después de configurar la memoria de almacenamiento dinámico]
@echo off rem Con licencia de Apache Software Foundation (ASF) bajo uno o más acuerdos de licencia de contribuidor rem. Consulte el archivo AVISO distribuido con rem este trabajo para obtener información adicional sobre la propiedad de los derechos de autor. rem El ASF le licencia este archivo bajo la Licencia Apache, Versión 2.0 rem (la "Licencia"); no puede usar este archivo excepto en cumplimiento con rem la Licencia. Puede obtener una copia de la Licencia en rem rem http://www.apache.org/licenses/LICENSE-2.0 rem rem A menos que lo exija la ley aplicable o se acuerde por escrito, el software rem distribuido bajo la Licencia se distribuye en un " TAL CUAL ", rem SIN GARANTÍAS O CONDICIONES DE NINGÚN TIPO expresa o implícita. rem Ver la licencia para el idioma específico que rige los permisos y las limitaciones rem en virtud de la Licencia. IF [ % 1 ] EQU [] ( echo USAGE: % 0 server.properties EXIT / B 1 ) SetLocal IF [ "% KAFKA_LOG4J_OPTS%"] EQU ["" ] ( set KAFKA_LOG4J_OPTS = -Dlog4j.configuration = file:% ~ dp0 ../../config/ log4j.properties ) IF [ "% KAFKA_HEAP_OPTS%"] EQU ["" ] ( rem detecta la arquitectura del sistema operativo wmic os osarchitecture | find / i "32-bit"> nul 2> & OS bit OS set KAFKA_HEAP_OPTS = -Xmx512M - Xms512M ) ELSE ( rem 64- bit OS set KAFKA_HEAP_OPTS = -Xmx1G - Xms1G ) set JMX_PORT = 9999 " ) "% ~ dp0kafka-run-class.bat "kafka.Kafka% * EndLocal
Linux [modificar el archivo kafka-server-start.sh, configurar JMX después de configurar la memoria de almacenamiento dinámico]
#! / bin / bash # Con licencia de Apache Software Foundation (ASF) bajo uno o más # acuerdos de licencia de contribuyente. Consulte el archivo AVISO distribuido con # este trabajo para obtener información adicional sobre la propiedad de los derechos de autor. # El ASF le licencia este archivo bajo la Licencia Apache, Versión 2.0 # (la "Licencia"); no puede usar este archivo excepto en conformidad con # la Licencia. Puede obtener una copia de la Licencia en # # http://www.apache.org/licenses/LICENSE-2.0 # # A menos que lo exija la ley aplicable o se acuerde por escrito, el # de software distribuido bajo la Licencia se distribuye en un " TAL CUAL ", # SIN GARANTÍAS O CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita. consulte la Licencia para ver los permisos específicos de idioma y # limitaciones bajo la Licencia. si [$ # -lt 1 ]; luego repita "USAGE: $ 0 [-daemon] server.properties [--override property = value] *" exit 1 fi base_dir = $ (dirname $ 0 ) if ["x $ KAFKA_LOG4J_OPTS" = "x" ]; luego exporte KAFKA_LOG4J_OPTS = "- Dlog4j.configuration = file: $ base_dir /../ config / log4j.properties" fi if ["x $ KAFKA_HEAP_OPTS" = "x" ]; luego exporte KAFKA_HEAP_OPTS = "- Xmx1G -Xms1G" exporte JMX_PORT = "9999" fi EXTRA_ARGS = $ {EXTRA_ARGS- ' COMANDO = $ 1 caso $ COMANDO en - daemon) EXTRA_ARGS = "- daemon" $ EXTRA_ARGS shift ;; * ) ;; esac exec $ base_dir / kafka-run- class .sh $ EXTRA_ARGS kafka.Kafka "$ @"
Entonces, ¿cómo puede percibir externamente los indicadores de monitoreo de Kafka?
JConsole
jconsole es una herramienta de monitoreo que viene con JDK, bajo el directorio JDK / bin
Abrir, ingrese la dirección y el puerto JMX
Página de inicio:
Un resumen
También hay importantes MBeans
Java se conecta a aplicaciones JMX
Tome la información de Kafka anterior como ejemplo
public static void jmx () lanza Exception { JMXServiceURL url = new JMXServiceURL ("service: jmx: rmi: /// jndi / rmi: // localhost: 9999 / jmxrmi" ); JMXConnector jmxc = JMXConnectorFactory.connect (url); Conexión MBeanServerConnection = jmxc.getMBeanServerConnection (); System.out.println ( "========= Dominios =========" ); Cadena [] dominios = conexión.getDomains (); para (Cadena d: dominios) { System.out.println (d); } System.out.println ("========= MBeans =========" ); System.out.println (connection.getMBeanCount ()); System.out.println ( "========= Invoke =========" ); ObjectName mBeanName = new ObjectName ("kafka.log: type = Log, name = Size, topic = my-topic, partition = 0" ); // 获取 值 Valor del objeto = connection.getAttribute (mBeanName, "Value" ); System.out.println (valor); // 执行 MBean 的 方法 Object invoke = connection.invoke (mBeanName, "objectName", null , null ); System.out.println (invocar); System.out.println ( "); mBeanName = new ObjectName ("kafka.server: type = BrokerTopicMetrics, name = BytesInPerSec" ); MBeanInfo info = connection.getMBeanInfo (mBeanName); System.out.println ( "ClassName :" + info.getClassName ()); for (MBeanAttributeInfo attr: info.getAttributes ()) { System.out.println ( "属性 :" + attr.getName () + ", 类型 :" + attr.getType () + ", 值 :" + connection.getAttribute (mBeanName, attr.getName ())); } para (MBeanOperationInfo op: info.getOperations ()) { System.out.println ( "操作 :" + op.getName ());
Salida:
========= Dominios =========
java.util.logging
kafka.utils
kafka.controller
java.nio
kafka.network
JMImplementation
kafka.log
kafka.coordinator.group
java.lang
com. sun.management
kafka.server
kafka.cluster
kafka
kafka.coordinator.transaction
========= MBeans =========
1098
========= Invoke ===== ====
24997
kafka.log = LOG, name = Tamaño, tema = mi-tema, partición = 0
========= ========= MBean Info
nombre de clase: com. yammer.metrics.reporting.JmxReporter $ Meter
: : Count , 类型 : long , 值 : 0
属性 : EventType , 类型 : java.lang.String , 值 : bytes
属性 : RateUnit , 类型 : java.util.concurrent.TimeUnit , va :SEGUNDOS
Atributo: MeanRate, Tipo: doble, Valor: 0.0
Atributo: OneMinuteRate, Tipo: doble, Valor: 0.0
Atributo: FiveMinuteRate, Tipo: doble, Valor: 0.0
Atributo: FifteenMinuteRate, Tipo: doble, Valor: 0.0
Operación: objectName
Explicación
1. Salida de toda la información del dominio actual.
2. También puede generar el número total de MBeans.
3. El resultado de la información de monitoreo es lo que realmente necesitamos: el valor de ObjectName corresponde a JConsole
4. Hay dos piezas de información debajo de cada Objeto específico: atributos y operaciones (métodos), es fácil de entender.
Más formas de explorar por tu cuenta