# DB2 # Introducción **Este plugin tiene como finalidad monitorizar bases de datos DB2**, mediante consultas que extraerán información sobre datos que son claves para conocer el rendimiento y estado de la bases de datos, como son el número de conexiones, cache , tamaño de la base de datos, porcentaje de log utilizado y bastantes más stats. Estos datos se verán reflejados en PandoraFMS, en módulos que aportaran el valor estadístico, dentro de un agente que representará a cada base de datos. Este plugin está desarrollado para usarse con Pandora FMS Discovery, por lo que a diferencia de otros plugins no genera agentes por XML, si no que todo lo descubierto se devuelve en la salida JSON del plugin. # Prerrequisitos Este plugin realiza conexiones remotas a las bases de datos a monitorizar, por lo que es necesario asegurar la conectividad entre el servidor de Pandora FMS y dichas bases de datos. A su vez los siguientes permisos son requeridos para el usuario que se utiliza para conectar. Vistas de monitoreo (SYSIBMADM): SYSIBMADM.ENV\_INST\_INFO: SELECT SYSIBMADM.MON\_DB\_SUMMARY: SELECT, rol MONITOR SYSIBMADM.MON\_TRANSACTION\_LOG\_UTILIZATION: SELECT, rol MONITOR SYSIBMADM.ADMINTABINFO: SELECT, acceso a los objetos SYSIBMADM.MON\_CONNECTION\_SUMMARY: SELECT, rol MONITOR SYSIBMADM.BP\_HITRATIO: SELECT, rol MONITOR # Parámetros y configuración **Parámetros**
--confRuta al archivo de configuración
--target\_databasesRuta al archivo de configuración que contiene los targets de las bases de datos
--target\_agentsRuta al archivo de configuración que contiene los targets de los agentes
--custom\_queriesRuta al archivo de configuración que contiene las consultas personalizadas
**Archivo de configuración (--conf)** ``` agents_group_id = < ID del grupo en el que se crearán los agentes > interval = < Intervalo de monitorización de los agentes en segundos > user = < Usuario de conexión > password = < Contraseña > threads = < Número de hilos que se usaran para la creación de agentes > modules_prefix = < Prefijo de módulos > execute_custom_queries = < Activar con 1 para habilitar el uso de consultas personalizadas > analyze_connections = < Activar con 1 para habilitar la monitorización de conexiones > database_summary = < Activar con 1 para habilitar la monitorización de estadísticas de la base de datos > transactional_log = < Activar con 1 para habilitar la monitorización de estadísticas de log > db_size = < Activar con 1 para habilitar la monitorización de estadísticas del tamaño de la base de datos > cache_stats = < Activar con 1 para habilitar la monitorización de estadísticas de cache > ``` Ejemplo ``` agents_group_id = 10 interval = 300 user = sa password = HHgD85V@ threads = 1 modules_prefix = execute_custom_queries = 1 analyze_connections = 1 database_summary = 1 transactional_log = 1 db_size = 1 cache_stats = 1 ``` **Listado de bases de datos objetivo (--target\_databases)** El contenido del fichero será un listado de bases de datos objetivo, separando cada base de datos por comas o por líneas. El formato para una base de datos podrá ser cualquiera de los siguientes: ``` ip/sid ip:puerto/sid ``` En caso de no indicarse el puerto, se usará el puerto 50000 TCP por defecto para la conexión al objetivo. Ejemplo ``` 172.17.0.2:50000/SAMPLE ``` **Listado de agentes objetivo (--target\_agents)** El contenido del fichero será un listado de bases de nombres de agentes, separando cada agente por comas o por líneas. Estos nombres de agentes se usarán para volcar la información de cada base de datos objetivo en el nombre de agente indicado correspondiente, en lugar de dejar que el plugin genere los nombres de agentes de forma automática.
La posición de cada nombre de agente en el listado debe coincidir con la posición de la base de datos objetivo en su propio listado, es decir, el nombre para la primera base de datos objetivo será el primer nombre de este listado, teniendo en cuenta que las líneas en blanco son ignoradas.
Ejemplo ``` agente1,,agente3 agente4 agente5,agente6,agente7,,agente9 ``` **Consultas personalizadas (--custom\_queries)** Se debe introducir un módulo por cada consulta personalizada que se pretenda monitorizar. Los módulos deben seguir una estructura, que es la siguiente: ``` check_begin --> Etiqueta de abertura del módulo name --> Nombre del módulo description --> Descripción del módulo. operation --> Tipo de operación datatype --> Tipo de módulo min_warning --> Configuración del umbral mínimo de warning max_warning --> Configuración del umbral máximo de warning str_warning --> Configuración de string de warning warning_inverse --> Activar el intervalo inverso con 1 para umbral de warning min_critical --> Configuración del umbral mínimo de critical max_critical --> Configuración del umbral máximo de critical str_critical --> Configuración de string de critical critical_inverse --> Activar el intervalo inverso con 1 para umbral de crítico module_interval --> Este intervalo se calcula como un multiplicador del intervalo del agente. target --> Consulta personalizada target_databases --> Agentes de bases de datos en los que se creará el módulo check_end --> Etiqueta de cierre del módulo ``` Ejemplo ``` check_begin name Select 1 description operation value datatype generic_data min_warning 5 target VALUES (1); target_databases all check_end check_begin name sace_controlators.total_registers description Number of registros in sace_ontrolators table operation value datatype generic_data min_warning 20 target SELECT COUNT(*) AS TotalRegistros FROM esquema.sace_controlators; target_databases pandora check_end check_begin name operators.max_value.sace_controlators description max value in column operators operation full datatype generic_data target SELECT MAX(operators) AS ValorMaximo FROM esquema.sace_controlators; target_databases pandora check_end ``` # Ejecución manual El formato de la ejecución del plugin es el siguiente: ```shell ./pandora_db2 \ --conf < ruta al fichero de configuración > \ --target_databases < ruta al fichero de configuración que contiene las bases de datos objetivo > \ [ --target_agents < ruta al fichero de configuración de agentes > ] \ [ --custom_queries < ruta al fichero de configuración que contiene las consultas personalizas > ] ``` Por ejemplo: ```shell ./pandora_db2 \ --conf /usr/share/pandora_server/util/plugin/db2.conf \ --target_databases /usr/share/pandora_server/util/plugin/targets.conf \ --target_agents /usr/share/pandora_server/util/plugin/target_agents.conf \ --custom_queries /usr/share/pandora_server/util/plugin/custom_queries.conf ``` # Discovery Este plugin puede integrarse con el *Discovery* de Pandora FMS. Para ello se debe cargar el paquete ".disco" que puede descargar desde la librería de Pandora FMS: [https://pandorafms.com/library/](https://pandorafms.com/library/) [![image-1687944701817.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/scaled-1680-/image-1687944701817.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/image-1687944701817.png) Una vez cargado, se podrán monitorizar entornos de DB2 creando tareas de *Discovery* desde la sección *Management > Discovery > Applications.* [![image-1687944752646.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/scaled-1680-/image-1687944752646.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-06/image-1687944752646.png) Para cada tarea se solicitarán los siguientes datos mínimos: - **DB2 target string**: Lista de objetivos DB2 a monitorizar por la tarea. Será una lista separada por comas o por líneas. Cada base de datos objetivo se podrá definir con el formato IP:PUERTO/SID o IP/SID. - **User**: Usuario de conexión a las bases de datos objetivo. - **Password**: Contraseña del usuario indicado. [![image-1684831012628.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/scaled-1680-/image-1684831012628.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/image-1684831012628.png) También se podrá ajustar la configuración de la tarea para personalizar la monitorización deseada: - **Max threads**: Para optimizar el tiempo de ejecución, se podrán configurar múltiples hilos para monitorizar los agentes de la tarea. Hay que tener en cuenta que configurar múltiples hilos puede aumentar el uso de CPU de la tarea. - **Target agent**: Lista de agentes objetivo para los objetivos DB2 a monitorizar. Es decir, los nombres con los que se generarán los agentes de cada objetivo definido en la tarea. Será una lista separada por comas o por líneas. La posición de los nombres en la lista deberá coincidir con la posición de los objetivos DB2 en su lista, es decir, el primer nombre se usará para el primer objetivo y así sucesivamente. Si la lista se separa por líneas, las líneas en blanco se ignorarán. Si no se especifica un nombre de agente para un objetivo se usará su IP o FQDN como nombre del agente. - **Custom module prefix**: Texto incluido como prefijo para los todos los nombres de módulos generados. Es útil para localizar los módulos generados por la tarea o distinguirlos de otros. - **Get database summary**: Si se activa monitorizará el sumario de las bases de datos. - **Check transactional log utilization**: Si se activa monitorizará el uso del log transaccional. - **Get number of connections**: Si se activa monitorizará las conexiones. - **Check DB size**: Si se activa monitorizará el tamaño de las bases de datos. - **Retrieve cache statistics**: Si se activa monitorizará las estadísticas de caché. - **Execute custom queries**: Si se activa permitirá ejecutar consultas personalizadas a cada objetivo DB2. - **Custom queries**: Bloque de configuración para definir las consultas personalizadas que se ejecutarán. Cada consulta generará un nuevo módulo para cada agente de la tarea. [![image-1684831055212.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/scaled-1680-/image-1684831055212.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/image-1684831055212.png) Las tareas que se completen exitosamente dispondrán de un sumario de ejecución con la siguiente información: - **Total agents**: Total de agentes generados por la tarea. - **Targets up**: Total de objetivos a los que ha sido posible conectar. - **Targets down:** Total de objetivos a los que no ha sido posible conectar. [![image-1684831099946.png](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/scaled-1680-/image-1684831099946.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2023-05/image-1684831099946.png) Las tareas que no se completen exitosamente dispondrán de un sumario de ejecución registrando los errores producidos. # Agentes y módulos generados por el plugin El plugin creará un agente por cada base de datos objetivo. Ese agente contendrá los siguientes módulos: Si esta activado **database\_summary**:
AGENT\_WAIT\_TIME\_PERCENTRepresenta el porcentaje de tiempo en el que los agentes de DB2 están esperando por alguna actividad, como bloqueos o solicitudes externas.
APP\_RQSTS\_COMPLETED\_TOTALIndica el número total de solicitudes de aplicaciones completadas en la base de datos DB2.
AVG\_RQST\_CPU\_TIMERepresenta el tiempo promedio de CPU utilizado por cada solicitud de aplicación en la base de datos.
CF\_WAIT\_TIME\_PERCENTMuestra el porcentaje de tiempo en el que los agentes de DB2 están esperando por recursos compartidos en los sistemas con múltiples nodos.
IO\_WAIT\_TIME\_PERCENTIndica el porcentaje de tiempo en el que los agentes de DB2 están esperando por operaciones de entrada/salida (I/O).
LOCK\_WAIT\_TIME\_PERCENTRepresenta el porcentaje de tiempo en el que los agentes de DB2 están esperando por bloqueos de recursos.
NETWORK\_WAIT\_TIME\_PERCENTMuestra el porcentaje de tiempo en el que los agentes de DB2 están esperando por operaciones de red.
RECLAIM\_WAIT\_TIME\_PERCENTIndica el porcentaje de tiempo en el que los agentes de DB2 están esperando por la liberación de recursos.
ROUTINE\_TIME\_RQST\_PERCENTRepresenta el porcentaje de tiempo utilizado por las rutinas almacenadas (procedimientos almacenados, funciones, etc.) en cada solicitud de aplicación.
RQST\_WAIT\_TIME\_PERCENTMuestra el porcentaje de tiempo en el que las solicitudes de aplicaciones están esperando para ser ejecutadas por los agentes de DB2.
TOTAL\_BP\_HIT\_RATIO\_PERCENTIndica el porcentaje de aciertos en la caché de búfer (buffer pool), lo que representa la eficiencia en el acceso a los datos en memoria.
TOTAL\_BP\_HIT\_RATIO\_PERCENTRepresenta el porcentaje de tiempo utilizado por las operaciones de finalización de transacciones en cada solicitud de aplicación.
Si esta activado **transactional\_log:**
Log utilization percentPorcentaje de log utilizado en Kilobytes
Si esta activado **db\_size**:
Database sizeTamaño de la base de datos en Megabytes
Si esta activado **analyze\_connections**:
Active connectionsNúmero de conexiones activas
Si esta activado **cache\_stats:**
cache hit ratio <nombre de la caché de búfer de cada fila> **Porcentaje cache hit ratio para cada BP\_NAME.** Al combinar el cache hit ratio con "bp\_name" (nombre de la caché de búfer), puedes evaluar el rendimiento de caché de búfer para cada una de las cachés existentes en la base de datos DB2. Puedes monitorear y comparar el cache hit ratio para cada caché de búfer individualmente, lo que te permite identificar qué cachés de búfer están funcionando de manera más eficiente y cuáles pueden requerir ajustes.
El plugin también creará un **módulo por cada consulta personalizada** definida en el fichero de configuración.