Mejores Prácticas de Observabilidad para HikariCP

HikariCP es un conjunto de conexiones JDBC de alto rendimiento y peso ligero, diseñado para una eficiencia excepcional. Su objetivo es proporcionar una latencia mínima y un alto rendimiento, lo que lo convierte en una opción popular para aplicaciones Java, especialmente auqellas que experimentan un tráfico concurrente significativo. Como cnojunto de conexiones predeterminado en Spring Boot 2.x, su configuración y gestión son cruciales para la salud general de la aplicación.

Si bien las herramientas de monitoreo de rendimiento de aplicaciones (APM) y las métricas de bases de datos proporcionan información valiosa sobre la ejecución de SQL y el estado de la base de datos (como recuentos de conexiones, uso de CPU y memoria), el papel del conjunto de conexiones en el procesamiento de estas solicitudes a menudo queda sin observar. Las configuraciones inadecuadas del conjunto de conexiones, como un tamaño de grupo de conexiones mal ajustado o un tamaño excesivo, pueden provocar cuellos de botella en el rendimiento o colas de ejecución de SQL. Por lo tanto, obtener visibilidad de la operación de HikariCP es primordial.

Observabilidad con Guance

Guance es una plataforma integral de observabilidad de extremo a extremo diseñada para ingenieros de TI. Agrega monitoreo de infraestructura, APM y gestión de registros para proporcionar una visibilidad completa de la pila tecnológica. Guance permite a los ingenieros rastrear la experiencia del usuario de principio a fin, examinar cada invocación de función dentro de una aplicación y monitorear la infraestructura en entornos de nube. Además, ayuda a identificar rápidamente los riesgos de seguridad del sistema.

Despliegue de DataKit

DataKit es un agente de recopilación de datos de código abierto y multiplataforma desarrollado por Guance. Está diseñado para recopilar, procesar y analizar datos de diversas fuentes, incluidos registros y métricas, para facilitar el monitoreo y la resolución de problemas. DataKit admite varios formatos de entrada y salida, lo que permite una integración perfecta con los sistemas de monitoreo existentes.

Para desplegar DataKit en un host Linux:

  1. Inicie sesión en la consola de Guance.
  2. Navegue a "Integración" > "DataKit".
  3. Seleccione el método de instalación apropiado para su host Linux.

Configuración del Recopilador

Configuración de DataKit

Después de instalar DataKit, habilite los siguientes recopiladores personalizados:

  • Habilitar el recopilador StatsD: ```bash

    cp /usr/local/datakit/conf.d/statsd/statsd.conf.sample /usr/local/datakit/conf.d/statsd/statsd.conf datakit service -R

  • Habilitar la recopilación de rastreo distribuido (Tracing): ```bash

    cp /usr/local/datakit/conf.d/ddtrace/ddtrace.conf.sample /usr/local/datakit/conf.d/ddtrace/ddtrace.conf datakit service -R

    
    

Configuración del Cliente

Consideremos una aplicación Java de ejemplo (Demo) para recopilar rastreos distribuidos y métricas del conjunto de conexiones Druid (aunque el ejemplo se centra en HikariCP, el principio es el mismo).

La configuración del conjunto de conexiones en el proyecto Demo es la siguiente:


spring.datasource.url=jdbc:mysql://xx.xxx.xx.xxx:3306/test?useSSL=false&useLegacyDatetimeCode=false&allowPublicKeyRetrieval=true
spring.datasource.username=***
spring.datasource.password=*****
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.register-mbeans=true
 

Para integrar APM y recopilar métricas JMX de HikariCP, agregue los siguientes parámetros al comando de inicio de su aplicación y descargue el agente Java dd-java-agent.jar de Guance.

Comando de inicio de la aplicación:


java \
-javaagent:/xxx/dd-java-agent.jar \
-Ddd.agent.port=9529 \
-Ddd.service=demo \
-Ddd.jmxfetch.check-period=1000 \
-Ddd.jmxfetch.enabled=true \
-Ddd.jmxfetch.config.dir=/xxx/ \
-Ddd.jmxfetch.config=hikaricp.yaml \
-jar xxxx.jar
 

Descargue el agente Java dd-java-agent.jar (versión Guance):


wget -O dd-java-agent.jar 'https://static.guance.com/dd-image/dd-java-agent.jar'
 

Asegúrese de que el directorio especificado en -Ddd.jmxfetch.config.dir exista y contenga el archivo hikaricp.yaml.

Contenido de hikaricp.yaml:


init_config:

instances:
 - jvm_direct: true
   name: hikari-monitoring
   collect_default_jvm_metrics: false
   collect_default_metrics: false
   refresh_beans: 60
   conf:
     - include:
         bean_regex: "com.zaxxer.hikari:type=Pool \\((.*)\\)"
         tags:
           pool: $1
         attribute:
           ActiveConnections:
             metric_type: gauge
             alias: hikaricp.connections.active
           IdleConnections:
             metric_type: gauge
             alias: hikaricp.connections.idle
           TotalConnections:
             metric_type: gauge
             alias: hikaricp.connections.total
           ThreadsAwaitingConnection:
             metric_type: gauge
             alias: hikaricp.connections.pending
     - include:
         bean_regex: "com.zaxxer.hikari:type=PoolConfig \\((.*)\\)"
         tags:
           pool: $1
         attribute:
           MaximumPoolSize:
             metric_type: gauge
             alias: hikaricp.pool.size.max
           IdleTimeout:
             metric_type: gauge
             alias: hikaricp.idle.timeout
           MaxLifetime:
             metric_type: gauge
             alias: hikaricp.max.lifetime
           MinimumIdle:
             metric_type: gauge
             alias: hikaricp.min.idle
           ConnectionTimeout:
             metric_type: gauge
             alias: hikaricp.connections.timeout
           ValidationTimeout:
             metric_type: gauge
             alias: hikaricp.validation.timeout
           LeakDetectionThreshold:
             metric_type: gauge
             alias: hikaricp.leak.detection.threshold
 

Métricas Clave

Conjunto de Métricas: hikaricp

Métrica Descripción Uso
hikaricp.connections.active Número actual de conexiones de base de datos activas. Indica cuántas conexiones están siendo utilizadas activamente por la aplicación.
hikaricp.connections.idle Número actual de conexiones de base de datos inactivas. Representa las conexiones disponibles y listas para ser utilizadas.
hikaricp.connections.pending Número actual de solicitudes esperando obtener una conexión. Un valor alto puede indicar que el tamaño del grupo de conexiones es insuficiente para la demanda concurrente.
hikaricp.connections.total Número total de conexiones en el grupo. Incluye conexiones activas e inactivas.
hikaricp.idle.timeout Tiempo máximo que una conexión inactiva puede permanecer abierta. Configuración. Las conexiones inactivas que exceden este tiempo serán cerradas por el grupo.
hikaricp.leak.detection.threshold Umbral para la detección de fugas de conexión. Configuraicón. Si una conexión se mantiene ocupada durante más tiempo que este umbral, se puede considerar una posible fuga y se generará una advertencia.
hikaricp.max.lifetime Vida útil máxima de una conexión. Configuración. El tiempo total que una conexión puede existir desde su creación hasta su cierre no debe exceder este valor.
hikaricp.min.idle Número mínimo de conexiones inactivas que se mantendrán en el grupo. Configuración. El grupo se esforzará por mantener al menos este número de conexiones inactivas para responder rápidamente a las nuevas solicitudes.
hikaricp.pool.size.max Número máximo de conexiones permitidas en el grupo. Configuración. Limita el tamaño del grupo para evitar un consumo excesivo de recursos.
hikaricp.validation.timeout Tiempo de espera para la validación de conexión. Configuración. Cuando se recupera una conexión del grupo, se valida su estado. Si la validación tarda más que este tiempo, se considera fallida.
hikaricp.connections.timeout Tiempo máximo de espera para obtener una conexión. Configuración. El tiempo máximo que la aplicación esperará para obtener una conexión del grupo.

Vista de Escenario

Para visualizar estas métricas:

  1. Inicie sesión en la consola de Guance.
  2. Navegue a "Escenario" > "Nuevo Panel".
  3. Ingrese "HikariCP" como título.
  4. Seleccione la vista "Monitor de HikariCP".
  5. Haga clic en "Confirmar" para agregar la vista.

Monitor (Alertas)

Alerta de Utilización del Grupo de Conexiones de Servicios HikariCP

Descripción: Monitorea la relación entre connections.active y pool.size.max. Si el valor máximo de esta relación supera el 80% durante un período de 5 minutos, se activará una alerta.

Consulte la captura de pantalla proporcionada en el documento original para ver la configuración visual de la alerta.

Estas métricas y configuraciones de alerta proporcionan una visión completa del estado operativo de su grupo de conexiones HikariCP. Al monitorear y optimizar estas métricas, los desarrolladores y las operaciones pueden garantizar un rendimiento eficiente del grupo de conexiones, especialmente en escenarios de alta concurrencia, al tiempo que evitan el desperdicio de recursos y los cuellos de botella.

Etiquetas: HikariCP JDBC Connection Pool Observability Monitoring

Publicado el 6-28 04:13