Monitoreo de Kafka y JMX

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

 

Supongo que te gusta

Origin www.cnblogs.com/LUA123/p/12714900.html
Recomendado
Clasificación