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:
- Inicie sesión en la consola de Guance.
- Navegue a "Integración" > "DataKit".
- 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:
- Inicie sesión en la consola de Guance.
- Navegue a "Escenario" > "Nuevo Panel".
- Ingrese "HikariCP" como título.
- Seleccione la vista "Monitor de HikariCP".
- 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.