Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. Introducción

Checkmk proporciona opciones completas para la monitorización de bases de datos Oracle. Con el plugin de agente no sólo puedes recuperar los tablespaces de una base de datos o sus sesiones activas, sino también muchos otros tipos de métricas. Puedes encontrar una lista completa de las opciones de monitorización con nuestros plugins de check en el Catálogo de plugins de check. Regularmente añadimos nuevos plugins y actualizamos los existentes, por lo que siempre merece la pena consultar el catálogo. Entre otros, Checkmk puede monitorizar los siguientes valores:

Para poder monitorizar las bases de datos sólo se necesita el plugin de agente, además del agente en el servidor de base de datos. Actualmente se admiten los sistemas operativos Linux, Solaris, AIX y Windows. El plugin de agente para Linux, Solaris y AIX se llama mk_oracle y para Windows mk_oracle.ps1. No se necesitará ningún otro software adicional para la monitorización, ni en el servidor Checkmk ni en el servidor de base de datos.

Muchos de los pasos para configurar la monitorización son los mismos tanto para Linux como para Windows. Por ello, describiremos primero los pasos generales, luego los específicos para el grupo de sistemas operativos respectivo y, por último, el Agent bakery en las ediciones comerciales.

2. Configuración inicial

Los archivos de configuración con contenido de ejemplo que se presentan en este capítulo y en los siguientes se encuentran en el servidor Checkmk, ya sea mediante la línea de comandos o a través de la interfaz web de Checkmk. En Checkmk edición Raw selecciona Setup > Agents y en las ediciones comerciales Setup > Agents > Windows, Linux, Solaris, AIX > Related. En todas las ediciones encontrarás entradas de menú para los distintos sistemas operativos. Los archivos de configuración se encuentran en la caja Example Configurations.

2.1. Crear un usuario de base de datos

En principio, la primera configuración es rápida y sólo requiere tres pasos. El primer paso, por supuesto, es tener un usuario que también pueda consultar las bases de datos. Siempre que no utilices Real Application Cluster (RAC), crea un usuario en cada base de datos que se vaya a monitorizar. La forma de acceder a una instancia difiere según el sistema operativo instalado. En Linux, puedes hacerlo, por ejemplo, configurando siempre primero la instancia correspondiente como una variable del entorno en la que se va a crear un usuario. Normalmente, primero se cambia al usuario oracle, pero esto puede variar según la configuración:

root@linux# su - oracle
oracle@linux$ export ORACLE_SID=MYINST1

A continuación, accede a la instancia y crea un usuario para la monitorización. En el siguiente ejemplo, el usuario recién creado se llama checkmk. También puedes especificar cualquier otro nombre que desees:

sqlplus> create user checkmk identified by myPassword;
sqlplus> grant select_catalog_role to checkmk;
sqlplus> grant create session to checkmk;
sqlplus> connect checkmk/myPassword
sqlplus> exit

Puedes averiguar cómo funciona exactamente el inicio de sesión en una instancia concreta en la documentación de Oracle.

Bases de datos multi-tenant

También puedes configurar el inicio de sesión para bases de datos multi-tenant. Esto se realiza normalmente en la configuración utilizando un usuario especial y con el prefijo C##. La asignación de permisos es un poco diferente que para los usuarios normales, ya que tienes que especificarlos para todos los contenedores actuales y para todos los contenedores futuros:

sqlplus> create user c##checkmk identified by myPassword;
sqlplus> alter user c##checkmk set container_data=all container=current;
sqlplus> grant select_catalog_role to c##checkmk container=all;
sqlplus> grant create session to c##checkmk container=all;
sqlplus> exit

2.2. Crear la configuración

Después de haber creado un usuario, el siguiente paso es habilitar el plugin de agente para que reciba posteriormente esta información. La forma más sencilla es que definas los mismos datos de inicio de sesión para todas las instancias, y establezcas un valor por defecto en la configuración. Ahora, en el host de Oracle, crea un nuevo archivo de configuración mk_oracle.cfg para Linux, AIX, Solaris o mk_oracle_cfg.ps1 para Windows. En el siguiente ejemplo se puede ver el archivo para sistemas tipo Unix:

/etc/check_mk/mk_oracle.cfg
# Syntax:
# DBUSER='USERNAME:PASSWORD'
DBUSER='checkmk:myPassword'

Para Windows, este procedimiento es muy similar. En él, estableces la variable en un script de PowerShell:

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# Syntax:
# $DBUSER = @("USERNAME","PASSWORD")
$DBUSER = @("checkmk","myPassword")

El usuario estándar es todo lo que realmente requiere el plugin de agente. El resto de opciones que puedes configurar en sistemas tipo Unix o en Windows son opcionales.

2.3. Utilizar la Cartera Oracle

Como alternativa a especificar el usuario directamente y con una contraseña en un archivo de configuración, también puedes utilizar el Monedero Oracle. Esto tiene la ventaja de que ya no necesitas almacenar los datos de acceso de forma no cifrada en el servidor Checkmk y en el host Oracle. Por tanto, aunque hayas definido los derechos de acceso del archivo de configuración en el host Oracle a tu medida, los datos de acceso han salido del servidor y se encuentran en el servidor Checkmk siempre que utilices el Agent bakery.

A su vez, la Cartera Oracle almacena los datos de acceso encriptados en el host que se va a monitorizar para que sólo se puedan utilizar, pero no es necesario dar a conocer explícitamente los datos de inicio de sesión. De este modo, Checkmk puede utilizar esta cartera para que los datos de acceso sólo tenga que conocerlos el administrador de la base de datos (DBA). Crea -o el DBA puede crear- una cartera en el servidor adecuado:

root@linux# mkstore -wrl /etc/check_mk/oracle_wallet -create

El plugin de agente accederá posteriormente a este archivo cada vez que deba establecerse una conexión con una instancia. Para que también puedan encontrarse los datos de usuario necesarios, deberás introducirlos una vez en el monedero. En el siguiente ejemplo añades así el usuario checkmk para la instancia MYINST1:

root@linux# mkstore -wrl /etc/check_mk/oracle_wallet -createCredential MYINST1 checkmk myPassword

Para que el plugin de agente sepa dónde buscar el monedero, debe encontrar dos archivos. El primer archivo es sqlnet.ora en el que se puede encontrar la información para la ubicación del monedero. El segundo archivo -tnsnames.ora- define la dirección de la instancia para que también se pueda dirigir a ella a través de su alias. Para que el plugin de agente pueda acceder a estos archivos, puedes especificar la ruta en Linux, Solaris y AIX utilizando la variable del entorno TNS_ADMINEsto es especialmente útil si los archivos ya existen. Como alternativa, puedes crearlos explícitamente. Windows incluso requiere que los especifiques manualmente.

Crea primero el archivo sqlnet.ora. El plugin de agente busca alternativamente en este archivo los datos de inicio de sesión, por lo que debes introducir aquí la ruta correcta al archivo de la cartera que acabas de crear. Asegúrate de que estableces el parámetro SQLNET.WALLET_OVERRIDE en TRUE:

/etc/check_mk/sqlnet.ora
LOG_DIRECTORY_CLIENT = /var/log/check_mk/oracle_client
DIAG_ADR_ENABLED = OFF

SQLNET.WALLET_OVERRIDE = TRUE
WALLET_LOCATION =
 (SOURCE=
   (METHOD = FILE)
   (METHOD_DATA = (DIRECTORY=/etc/check_mk/oracle_wallet))
 )

Ahora el Plugin sabe qué credenciales debe utilizar. Para que también acceda a la dirección correcta, crea tnsnames.ora como segundo archivo. La sintaxis exacta se puede encontrar en la documentación de Oracle, pero como ejemplo el archivo podría tener este aspecto:

/etc/check_mk/tnsnames.ora
MYINST1
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = MYINST1_ALIAS)
    )
  )

Con este paso habrás creado los requisitos previos para eliminar los datos de acceso del archivo de configuración del plugin de agente. En lugar de los datos de acceso, simplemente introduce una / (barra oblicua):

/etc/check_mk/mk_oracle.cfg
DBUSER='/:'

Por supuesto, más adelante podrás añadir más datos de acceso al monedero. En ese caso, basta con modificar el archivo tnsnames.ora según sea necesario.

Por último, cambia los permisos de los archivos y directorios creados manualmente en esta sección para que los derechos de acceso en la ejecución se establezcan correctamente. El plugin de agente ejecutado como root cambiará al propietario de los binarios de Oracle (como $ORACLE_HOME/bin/sqlplus) antes de ejecutarlos. Por tanto, como mínimo, el grupo del propietario de los binarios de Oracle necesita acceso de lectura a los archivos creados manualmente en /etc/check_mk/. En el siguiente ejemplo, suponemos que el grupo es oinstall.

Los siguientes comandos cambian el grupo a oinstall:

root@linux# chgrp oinstall /etc/check_mk/sqlnet.ora /etc/check_mk/tnsnames.ora
root@linux# chgrp -R oinstall /etc/check_mk/oracle_wallet

Estos comandos garantizan que el grupo pueda leer el directorio oracle_wallet y su contenido:

root@linux# chmod g+x /etc/check_mk/oracle_wallet
root@linux# chmod -R g+r /etc/check_mk/oracle_wallet

Los permisos deberían ser algo parecido a esto:

root@linux# tree -ugpR /etc/check_mk
[drwxr-xr-x root     root    ]  /etc/check_mk
├── [drwxr-x--- root   oinstall ]  oracle_wallet
│   └── [-rw-r----- root   oinstall ]  cwallet.sso
│   └── [-rw-r----- root   oinstall ]  cwallet.sso.lck
│   └── [-rw-r----- root   oinstall ]  ewallet.p12
│   └── [-rw-r----- root   oinstall ]  ewallet.p12.lck
├── [-rw-r--r-- root   oinstall ]  sqlnet.ora
├── [-rw-r--r-- root   oinstall ]  tnsnames.ora

La salida del comando sólo muestra los archivos y directorios en cuestión.

3. Configuración para Linux, Solaris, AIX

3.1. Plugin y rutas de configuración

En los sistemas tipo Unix, Checkmk utiliza un Plugin de agente uniforme. Por un lado, esto reduce el esfuerzo de mantenimiento, ya que no se duplican las consultas SQL, y por otro, sólo tienes que prestar atención a un único Plugin de agente. En todos los sistemas compatibles, las rutas de los archivos para los agentes son las mismas o muy similares. En concreto, necesitas los siguientes directorios:

Sistema operativo Ruta del Plugin Ruta de configuración

Linux, Solaris, AIX

/usr/lib/check_mk_agent/plugins/

/etc/check_mk/

Linux con systemd

/usr/lib/check_mk_agent/plugins/<Number>

/etc/check_mk/

AIX

/usr/check_mk/lib/plugins/

/usr/check_mk/conf/

3.2. Instalación del Plugin de agente

Una vez que hayas creado un usuario en la configuración inicial y lo hayas guardado en el archivo de configuración, instala el plugin de agente. Copia el archivo mk_oracle del directorio ~/share/check_mk/agents/plugins/ del servidor Checkmk al directorio de plugins del host Oracle descrito anteriormente.

Important

El plugin de agente para sistemas tipo Unix mk_oracle no funciona bien con systemd (ver Werk #13732). Por tanto, en sistemas con systemd, debes ejecutar el plugin de agente de forma asíncrona. Esto significa que no debes instalar el plugin de agente directamente en /usr/lib/check_mk_agent/plugins/, sino en una subcarpeta /usr/lib/check_mk_agent/plugins/<Number>/. <Number> significa el intervalo de ejecución en segundos. Recomendamos la ejecución una vez por minuto, es decir, /usr/lib/check_mk_agent/plugins/60/. Al configurarlo a través de Agent bakery, puedes hacerlo utilizando la opción de la regla de Oracle Host uses xinetd or systemd, que está configurada por defecto en xinetd.

Asegúrate de que el plugin de agente es ejecutable, y corrígelo si es necesario:

root@linux# cd /usr/lib/check_mk_agent/plugins/
root@linux# ls -lA
-rw-r--r-- 1 root root 120808 Jan 25 11:29 mk_oracle
root@linux# chmod +x mk_oracle
root@linux# ls -lA
-rwxr-xr-x 1 root root 120808 Jan 25 11:29 mk_oracle

3.3. Opciones avanzadas

En la configuración inicial ya has conocido las primeras variables para obtener datos de monitorización de sus instancias de Oracle. Sin embargo, dependiendo del escenario de la aplicación, necesitarás rápidamente otras posibilidades para un mejor control individual de la monitorización de cada instancia. Encontrarás estas opciones en las siguientes secciones.

Configuración avanzada de usuarios

Con el inicio de sesión estándar puedes utilizar instancias normales o incluso todas las instancias de una base de datos. Sin embargo, hay casos especiales en los que necesitas datos de acceso individuales para instancias concretas. Por ello, en el archivo de configuración tienes las tres opciones siguientes para especificar usuarios:

Parámetro Descripción

DBUSER

Por defecto, si no se han definido datos de acceso individuales para la instancia de la base de datos.

DBUSER_MYINST1

Datos de acceso para una instancia concreta de la base de datos, en este caso para la instancia MYINST1. Los datos de acceso sólo se utilizan para esta instancia.

ASMUSER

Datos de acceso especiales para la Gestión Automática de Almacenamiento (ASM).
Importante: Para un ASM sólo se puede especificar un inicio de sesión cada vez.

Estas variables permiten aún más opciones aparte del nombre de usuario y la contraseña. También puedes determinar si el usuario es un SYSDBA o un SYSASM, en qué combinación de dirección y puerto escucha la instancia, e incluso qué alias TNS (TNSALIAS) debe utilizarse. Sin embargo, estas especificaciones son siempre -a diferencia del usuario y la contraseña- opcionales. Además del ejemplo anterior, una configuración puede tener este aspecto

/etc/check_mk/mk_oracle.cfg
# Syntax
# DBUSER='USERNAME:PASSWORD:ROLE:HOST:PORT:TNSALIAS'
DBUSER='checkmk:myPassword'

DBUSER_MYINST1='cmk_specific1:myPassword1:SYSDBA:localhost:1521'
DBUSER_MYINST2='cmk_specific2:myPassword2::localhost::INST2'

ASMUSER='cmk_asm:myASMPassword:SYSASM'

Algunas explicaciones sobre el ejemplo anterior:

  • Puedes definir cualquier número de datos de acceso individuales, que siempre son preferibles a los estándar.

  • Cada opción está separada de las demás por un : (dos puntos).

  • Si se omite un campo opcional en medio de la cadena, se deben codificar dos puntos, como en la entrada DBUSER_MYINST2, en la que no se especificó ningún rol ni ningún puerto.

  • Si a partir de cierto punto ya no se necesitan más campos opcionales, puedes omitir los dos puntos, como en la entrada ASMUSER, donde no se especificó ni host, ni puerto, ni alias TNS.

Incluir o excluir instancias

En algunos casos, puede que no quieras incluir instancias concretas en la monitorización. Esto puede deberse a que sólo sea un campo de juego para desarrolladores, o por otras razones. Para simplificar al máximo la configuración en situaciones individuales, tienes varias opciones para excluir total o parcialmente una o varias instancias:

Parámetro Descripción

ONLY_SIDS

Aquí puedes determinar qué instancias se van a monitorizar. Una instancia se nombra por su identificador de sistema (SID). Se trata de una lista positiva, en la que se ignoran todas las instancias que no aparecen explícitamente. Este parámetro es muy útil si el número de instancias que se van a monitorizar es menor que el número de instancias que se van a ignorar.

SKIP_SIDS

A diferencia de ONLY_SIDS, ésta es una lista negativa en la que se monitorizan todas las instancias excepto las que aparecen explícitamente en la lista. Este parámetro es muy adecuado si el número de instancias que hay que ignorar es menor que el número que hay que monitorizar.

EXCLUDE_<SID>

Con este parámetro puedes excluir parcialmente una instancia excluyendo de la monitorización determinadas secciones de la misma. De este modo, defines una lista negativa de las secciones de una instancia. También puedes excluir todas las secciones con el valor ALL y así hacer lo mismo que si añadieras la instancia a SKIP_SIDS.
Importante: Para los SID ASM no puedes utilizar este procedimiento, pero en su lugar puedes utilizar SKIP_SIDS="+ASM1 …​".

Ya lo habrás adivinado: el orden en que se procesan estos parámetros determina el resultado. De hecho, las entradas se procesan por instancia exactamente en secuencia, como se muestra en la tabla anterior. Por lo tanto, si se establece la variable ONLY_SIDS, ya no se evalúa SKIP_SIDS ni se comprueba si la variable EXCLUDE_<SID> se establece en ALL para esta instancia. Si no se establece ONLY_SIDS, el sistema procede según la secuencia. En caso de duda -es decir, como comportamiento por defecto-, la instancia se monitorizará en consecuencia.

A continuación se muestra un ejemplo en el que se establecen todas las variables y cómo es el comportamiento:

/etc/check_mk/mk_oracle.cfg
ONLY_SIDS='INST1 INST2 INST5'
SKIP_SIDS='INST7 INST3 INST2'
EXCLUDE_INST1='ALL'
EXCLUDE_INST2='tablespaces rman'

Como la lista positiva de la primera línea siempre tiene prioridad, las líneas segunda y tercera ya no se evalúan. Sólo la cuarta línea (la última) se tendrá en cuenta más adelante, ya que aquí la instancia sólo se evaluará parcialmente.

En la práctica, sólo tiene sentido utilizar una de las variables para determinar el número de instancias que se van a monitorizar.

Determinar los datos a obtener

Como has aprendido en la sección anterior, no sólo es posible desactivar completamente las instancias, sino también monitorizarlas sólo parcialmente. Los requisitos operativos son diversos, y resulta especialmente práctico cuando no es deseable que determinadas secciones de larga duración se incluyan en todo, o cuando sólo se necesita información básica de las instancias de prueba, por ejemplo. Para restringir globalmente las secciones, establece directamente las variables correspondientes -para restringir sólo determinadas instancias puedes introducir la variable EXCLUDE_<SID>, de la que ya has aprendido en la sección anterior-. Las variables globales son:

Parámetro Descripción

SYNC_SECTIONS

Secciones que deben consultarse de forma sincrónica, es decir, cada vez que se ejecuta el agente. Como el intervalo de consulta es de 60 segundos por defecto, las consultas SQL utilizadas deben ejecutarse con la rapidez correspondiente. Si no se especifica la variable, se consultan todas las secciones.

ASYNC_SECTIONS

Secciones que deben consultarse de forma asíncrona, es decir, sólo cada x minutos. El tiempo de validez de los datos viene determinado por la variable CACHE_MAXAGE, más abajo en esta tabla.

SYNC_ASM_SECTIONS

Aquí para las secciones ASM se aplica el mismo mecanismo que en la descripción general para la variable SYNC_SECTIONS.

ASYNC_ASM_SECTIONS

En las secciones ASM se aplica el mismo mecanismo que en la descripción general de la variable ASYNC_SECTIONS.

CACHE_MAXAGE

Esta variable se utiliza para determinar durante cuánto tiempo siguen siendo válidos los datos recuperados de forma asíncrona. Si no se especifica el valor de la variable, se utiliza un valor por defecto de 600 segundos (10 minutos). Asegúrate de que el intervalo de tiempo no es inferior al intervalo en el que el agente Checkmk entrega los datos (60 segundos por defecto). De lo contrario, los datos pueden considerarse obsoletos y el agente no los entregará.

MAX_TASKS

Número de SID que se procesan en paralelo. El valor por defecto es 1.

Por tanto, el mecanismo te permite establecer un valor por defecto en el archivo de configuración y sobrescribirlo para instancias individuales según sea necesario. Así, por ejemplo, una configuración podría tener este aspecto

/etc/check_mk/mk_oracle.cfg
# DEFAULTS:
# SYNC_SECTIONS="instance sessions logswitches undostat recovery_area processes recovery_status longactivesessions dataguard_stats performance locks"
# ASYNC_SECTIONS="tablespaces rman jobs ts_quotas resumable"
# SYNC_ASM_SECTIONS="instance processes"
# ASYNC_ASM_SECTIONS="asm_diskgroup"
# CACHE_MAXAGE=600

SYNC_ASM_SECTIONS='instance'
ASYNC_SECTIONS='tablespaces jobs rman resumable'

CACHE_MAXAGE=300

EXCLUDE_INST1='undostat locks'
EXCLUDE_INST2='jobs'

Como puedes ver en el ejemplo, sólo se consulta la sección instance para las instancias ASM y se especifica un conjunto mínimo para las secciones asíncronas en todas las instancias regulares. Además, en la instancia INST1 se omitirán las secciones síncronas undostat y locks. Puesto que las secciones síncronas no se especifican explícitamente, se consultan todas las secciones síncronas de todas las demás instancias. A su vez, en la instancia INST2 sólo se consultan tres de las cuatro secciones asíncronas, ya que jobs se excluyó adicionalmente. Y, por último, el caché de 10 minutos se reduce a 5 minutos (300 segundos), ya que es tiempo suficiente para obtener todos los datos.

Important

Si defines en el archivo de configuración qué secciones quieres recuperar y mediante qué método -también puedes transformar una sección asíncrona en una sección síncrona-, debes especificartodas las secciones que deben ejecutarse en el área correspondiente.

Por ejemplo, si sólo quieres locks de la consulta sincrónica, especifica toda la lista sincrónica y simplemente omite locks:

/etc/check_mk/mk_oracle.cfg
# Just exclude 'locks' from sync sections:
SYNC_SECTIONS='instance sessions logswitches undostat recovery_area processes recovery_status longactivesessions dataguard_stats performance'

Lo mismo se aplica a las otras tres variables en las que se pueden determinar las secciones.

Configurar el alias TNS y TNS_ADMIN

El alias TNS es un nombre fácil de usar para una conexión a una base de datos. TNS son las siglas de la tecnología de red de Oracle Substrato de red transparente. Un alias TNS permite establecer una conexión a una instancia de base de datos sin tener que introducir cada vez los detalles completos de la conexión (como el nombre del host, el número de puerto o el nombre del servicio). Los alias TNS se definen en el archivo tnsnames.ora. La sección sobre Cartera Oracle contiene un ejemplo de cómo definir un alias TNS.

TNS_ADMIN es una variable del entorno que apunta al directorio en el que se encuentran los archivos de configuración de Oracle, como sqlnet.ora y tnsnames.ora. Por defecto, TNS_ADMIN está configurado por Oracle como $ORACLE_HOME/network/admin. En el archivo de configuración, puedes asignar una ruta diferente a TNS_ADMIN, como en el siguiente ejemplo para una instalación específica de Oracle:

/etc/check_mk/mk_oracle.cfg
export TNS_ADMIN=/opt/oracle/product/19c/dbhome_1/network/admin/

Sólo si la variable no está configurada, el plugin de agente la establece en /etc/check_mk/.

Derechos de acceso en la ejecución

Por motivos de seguridad, el plugin de agente mk_oracle ya no ejecuta binarios de Oracle bajo el usuario root. Esto afecta a los programas sqlplus, tnsping y -si está disponible-crsctl. En su lugar, mk_oracle, por ejemplo, cambia al propietario del archivo $ORACLE_HOME/bin/sqlplus antes de ejecutar sqlplus. Esto garantiza que los programas de Oracle sólo sean ejecutados por un usuario sin privilegios y evita así que un usuario malintencionado de Oracle sustituya un binario como sqlplus y lo ejecute como usuario root.

Tip

Puedes averiguar en qué versión de parche de Checkmk se hizo este cambio en los Werks #15327 y #15328.

La ejecución de programas de Oracle por parte de un usuario sin privilegios puede provocar problemas al utilizar un monedero de Oracle, ya que este usuario no podrá acceder a los archivos específicos del monedero. El usuario sin privilegios necesita permisos para leer los archivos $TNS_ADMIN/sqlnet.ora y $TNS_ADMIN/tnsnames.ora, para ejecutar la carpeta del monedero y para leer los archivos de la carpeta del monedero. No deberías tener problemas con los derechos de acceso siempre que hayas cambiado el grupo de los archivos y directorios como se describe al final de la sección sobre el monedero de Oracle.

El plugin de agente te ayuda con el diagnóstico y comprueba si hay problemas para acceder a los archivos mencionados y los muestra en la prueba de conexión. El procedimiento exacto para diagnosticar y corregir los derechos de acceso se encuentra en la Base de conocimientos de Checkmk.

3.4. Monitorización de bases de datos remotas

En los sistemas tipo Unix, no sólo puedes recuperar las instancias que se ejecutan localmente, sino también conectarte a las remotas y recuperar las bases de datos que se ejecutan en ellas. Esto, por ejemplo, es ventajoso si no tienes acceso al sistema subyacente, pero quieres monitorizar la base de datos. También es posible monitorizar bases de datos remotas desde un host en el que se esté ejecutando el plugin de agente, pero no una base de datos Oracle.

Para monitorizar bases de datos remotas, deben cumplirse los siguientes requisitos en el host en el que esté instalado el plugin de agente:

  • La biblioteca de acceso Linux AIO está instalada. En Red Hat Enterprise Linux y distribuciones compatibles binarias, el paquete se llama libaio.

  • El Cliente Instantáneo de Oracle está instalado.

  • El programa sqlplus ya existe en la instalación, o puede haberse instalado como paquete de extensión del cliente.

Por regla general, las condiciones ya se cumplen si existe una instalación de Oracle en el host. En caso contrario, instala los paquetes adecuados para ello.

Para que el plugin de agente pueda conectarse a la base de datos remota, almacena primero los datos de acceso en el archivo de configuración. Son similares a los detalles de DBUSER, que ya has visto en la configuración avanzada de usuario. Sin embargo, hay una serie de especificaciones adicionales obligatorias:

/etc/check_mk/mk_oracle.cfg
# Syntax:
# REMOTE_INSTANCE_[ID]='USER:PASSWORD:ROLE:HOST:PORT:PIGGYBACKHOST:SID:VERSION:TNSALIAS'

REMOTE_INSTANCE_1='check_mk:mypassword::myRemoteHost:1521:myOracleHost:MYINST3:11.2'
REMOTE_INSTANCE_myinst1='/:::myRemoteHost:1521::MYINST1:11.2:INST1'

REMOTE_ORACLE_HOME='/usr/lib/oracle/11.2/client64'

En el ejemplo, se están configurando dos instancias remotas con dos líneas. Para que cada línea de texto sea única, se define un ID al final de cada variable. Éstos pueden elegirse libremente, sólo tienen que ser únicos para cada archivo de configuración. Como ya habrás observado, a la especificación del puerto le siguen ahora otros valores, en parte opcionales y en parte necesarios para establecer una conexión.

El primer valor nuevo PIGGYBACKHOST se establece en myOracleHost para la instancia MYINST3. Esta especificación asigna los resultados de la consulta mediante el mecanismo piggyback al host especificado. Si éste está presente como host en Checkmk, los nuevos servicios aparecerán allí en consecuencia, en lugar de en el host donde se está ejecutando el plugin de agente o desde el que se obtuvieron los datos. No verás esta especificación en la segunda instancia MYINST1: la asignación a otro host es opcional.

El segundo valor nuevo SID es el nombre de la instancia. Como el plugin de agente no puede ver qué instancias se están ejecutando en el host remoto, se debe especificar una línea de configuración para cada instancia remota - por tanto, este valor es obligatorio y no opcional.

El tercer valor VERSION es obligatorio y también se debe a que muchos metadatos sólo están disponibles si estás directamente en el host. Por lo tanto, tampoco se puede omitir la especificación de la versión, que determina qué consultas SQL se pueden pasar a la instancia. En el ejemplo, ambas instancias remotas utilizan la versión 11.2.

El cuarto y último valor TNSALIAS es de nuevo opcional y puede utilizarse si accedes a la instancia remota a través del Oracle Wallet o del LDAP/Directorio Activo. En el caso de que la instancia responda sólo a un alias TNS específico, puedes especificar este alias aquí. Para la segunda instancia remota, TNSALIAS tiene el valor INST1.

Para asegurarte de que también se encuentra el programa sqlplus, utiliza la variable REMOTE_ORACLE_HOME para especificar dónde se encuentra el cliente Oracle en el host que ejecuta el plugin de agente. Sólo entonces estarán disponibles todos los recursos necesarios para las consultas.

Al consultar instancias remotas, existen algunas restricciones y características especiales:

  • Puesto que has introducido explícitamente las instancias remotas en el archivo de configuración, no puedes excluir estas instancias utilizando SKIP_SIDS, y a cambio no necesitas incluirlas utilizando ONLY_SIDS.

  • Las instancias con el mismo nombre (SID) no pueden asignarse al mismo host. Esto es especialmente relevante si estás obteniendo instancias de múltiples hosts remotos y/o locales en los que se utilizan nombres idénticos.

4. Configuración para Windows

4.1. Plugin y rutas de configuración

En Windows, PowerShell se utiliza como lenguaje de scripting para monitorizar bases de datos Oracle. La funcionalidad es similar a la del plugin del agente en sistemas tipo Unix, pero sólo contiene una parte de ésta. Para utilizar el plugin del agente en Windows, necesitas la versión 5.x o superior de PowerShell y también los siguientes directorios:

Sistema operativo Ruta del Plugin Ruta de configuración

Windows

C:\ProgramData\checkmk\agent\plugins

C:\ProgramData\checkmk\agent\config

4.2. Instalación del Plugin de agente

Una vez que hayas creado un usuario en la configuración inicial y lo hayas almacenado en el archivo de configuración, instala el plugin de agente. Los plugins de agente para Windows se almacenan en el host durante la instalación del agente Checkmk para Windows. En el host Oracle, copia el archivo mk_oracle.ps1 del directorio C:\Program Files (x86)\checkmk\service\plugins\ al directorio de plugins descrito anteriormente. También puedes hacer referencia al archivo en la ruta de instalación actualizando el archivo de configuración del agente Checkmk.

4.3. Características especiales en Windows

Normalmente, Windows impide la ejecución de scripts PowerShell si no han sido firmados. Ahora puedes solucionar este problema muy fácilmente modificando las directivas de ejecución de scripts PowerShell para el usuario que ejecuta el agente Checkmk:

PS C:\ProgramData\checkmk\agent\> Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine
PS C:\ProgramData\checkmk\agent\> Get-ExecutionPolicy -Scope LocalMachine
Bypass

Esta opción es útil si durante un breve periodo de tiempo quieres probar un script o la funcionalidad general del agente Checkmk. Para evitar comprometer la seguridad de tu sistema, revierte esta configuración en los servidores productivos una vez finalizadas las pruebas:

PS C:\Program\checkmk\agent\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
PS C:\Program\checkmk\agent\> Get-ExecutionPolicy -Scope LocalMachine
RemoteSigned

Es comprensible que probablemente no quieras cambiar las directrices cada 60 segundos. Por tanto, establece una excepción permanente sólo para los scripts relevantes. El archivo de configuración del plugin de agente también debe añadirse a las excepciones. Para facilitar la lectura, en este ejemplo se ha omitido completamente la salida:

PS C:\ProgramData\checkmk\agent\> Unblock-File -Path .\plugins\mk_oracle.ps1
PS C:\ProgramData\checkmk\agent\> Unblock-File -Path .\config\mk_oracle_cfg.ps1

4.4. Opciones avanzadas

En la configuración inicial ya has conocido las primeras variables para obtener datos de monitorización de tus instancias de Oracle. Sin embargo, dependiendo del escenario de la aplicación, necesitarás rápidamente otras opciones para poder controlar mejor e individualmente la monitorización de cada instancia. En las siguientes secciones se describen las opciones que también están a tu disposición en Windows.

Configuración avanzada de usuario

Al igual que en Linux, también puedes definir no sólo un inicio de sesión estándar para el plugin de agente de Windows, sino también datos de acceso individuales para instancias concretas. Por tanto, tienes las mismas tres opciones para especificar los usuarios:

Parámetro Descripción

DBUSER

Por defecto, si no se han definido datos de acceso individuales para la instancia de base de datos.

DBUSER_MYINST1

Datos de acceso para una instancia concreta de la base de datos, en este caso para la instancia MYINST1. Los datos de acceso sólo se utilizan para esta instancia.

ASMUSER

Datos de acceso especiales para la Gestión Automática de Almacenamiento (ASM).
Importante: Para un ASM sólo se puede especificar un inicio de sesión cada vez.

Además, aquí también se pueden especificar más opciones aparte del nombre de usuario o la contraseña - estas entradas adicionales también son opcionales, sin embargo, cada entrada debe rellenarse si se utiliza. Así, por ejemplo, una configuración puede tener este aspecto

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# Syntax
# DBUSER = @("USERNAME", "PASSWORD", "ROLE", "HOST", "PORT")
# Default
# DBUSER = @("", "", "", "localhost", "1521")
$DBUSER = @("checkmk", "myPassword", "SYSDBA", "localhost", "1521")

@DBUSER_MYINST1 = @("cmk_specific1", "myPassword1", "", "10.0.0.73")
@DBUSER_MYINST2 = @("cmk_specific2", "myPassword2", "SYSDBA", "localhost", "1531")

@ASMUSER = @("cmk_asm", "myASMPassword", "SYSASM")

Algunas explicaciones sobre el ejemplo anterior:

  • Puedes definir cualquier número de datos de acceso individuales, que siempre son preferibles a los estándar.

  • Cada opción se define en una lista. El orden de las entradas no es arbitrario, por lo que no se puede reordenar.

  • Cuando un campo opcional permanece inalterado pero se va a editar un campo que le sigue, ambos campos deben especificarse correctamente, como en el caso de la entrada DBUSER_MYINST2, en la que el HOST sigue siendo localhost aunque sólo se vaya a cambiar el PORT.

  • Si los campos opcionales ya no son necesarios después de cierto punto, pueden omitirse, como en la entrada ASMUSER, en la que sólo se especificó el rol del usuario.

  • Si no se va a asignar ningún rol especial al usuario, pero se va a personalizar HOST o PORT, basta con introducir un par de comillas ("") en esta posición.

Activar y desactivar instancias

Incluso en Windows, no siempre se desea incluir determinadas instancias. Las razones para ello ya se han descrito en la sección dedicada a Linux. Dos de los tres parámetros que conoces de Linux también se pueden utilizar con Windows:

Parámetro Descripción

ONLY_SIDS

Aquí puedes determinar qué instancias se van a monitorizar. Una instancia se nombra por su identificador de sistema (SID). Se trata de una lista positiva, en la que se ignoran todas las instancias que no aparecen explícitamente. Este parámetro es muy útil si el número de instancias que se van a monitorizar es menor que el número de instancias que se van a ignorar.

EXCLUDE_<sid>

Como el parámetro SKIP_SIDS no está disponible en Windows, sólo puedes utilizar EXCLUDE_<SID> para excluir instancias y definir así una lista negativa. Para ello, establece el valor de la variable en ALL. También puedes utilizar este parámetro para excluir parcialmente una instancia, excluyendo de la monitorización determinadas secciones de la instancia. De este modo, defines una lista negativa de las secciones de una instancia.
Importante: Una (+ASM) no puede desactivarse completamente con esta opción.

El proceso se realiza para cada instancia en el orden que se muestra en la tabla anterior. Así, primero se comprueba si la instancia está en ONLY_SIDS, y sólo después si se van a excluir determinadas secciones. Si la variable EXCLUDE_<SID> se establece en ALL, no se ejecutará ninguna sección.

A continuación se muestra un ejemplo en el que cada variable aparece una vez:

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
$ONLY_SIDS = @("MYINST1", "MYINST3")
$EXCLUDE_INST1 = "tablespaces rman"
$EXCLUDE_INST3 = "ALL"

Observa que ONLY_SIDS es una lista, mientras que EXCLUDE_INST1 es una cadena que contiene secciones separadas por espacios.

Determinar los datos que hay que obtener

La especificación de las secciones que realmente se van a obtener se hace de la misma forma que en Linux, y lo que sigue es sólo un ejemplo para una configuración de Windows:

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# DEFAULTS:
# $SYNC_SECTIONS = @("instance", "sessions", "logswitches", "undostat", "recovery_area", "processes", "recovery_status", "longactivesessions", "dataguard_stats", "performance", "locks")
# $ASYNC_SECTIONS = @("tablespaces", "rman", "jobs", "ts_quotas", "resumable")
# $SYNC_ASM_SECTIONS = @("instance", "processes")
# $ASYNC_ASM_SECTIONS = @("asm_diskgroup")
# $CACHE_MAXAGE = 600

$SYNC_ASM_SECTIONS = @("instance")
$ASYNC_SECTIONS = @("tablespaces", "jobs", "rman", "resumable")

$CACHE_MAXAGE = 300

$EXCLUDE_INST1 = "undostat locks"
$EXCLUDE_INST2 = "jobs'
Important

Si defines en el archivo de configuración qué secciones quieres recuperar y mediante qué método -también puedes transformar una sección asíncrona en una sección síncrona-, debes especificartodas las secciones que deben ejecutarse en el área correspondiente.

Por ejemplo, si sólo quieres locks de la consulta sincrónica, especifica toda la lista sincrónica y omite simplemente locks:

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# Just exclude 'locks' from sync sections:
$SYNC_SECTIONS = @("instance", "sessions", "logswitches", "undostat", "recovery_area", "processes", "recovery_status", "longactivesessions", "dataguard_stats", "performance")

Lo mismo ocurre con las otras tres variables en las que se determinan las secciones.

Derechos de acceso en la ejecución

Por motivos de seguridad, el plugin de agente mk_oracle.ps1 sólo ejecuta los binarios de Oracle como administrador si estos programas sólo pueden ser modificados por administradores. Los administradores en Windows son la cuenta LocalSystem y los miembros del grupo integrado Administrators. Esto se aplica a los programas sqlplus.exe, tnsping.exe y -si están disponibles-crsctl.exe. El plugin de agente mk_oracle.ps1 no ejecuta ninguno de estos programas si los usuarios sin privilegios tienen uno de los permisos Write, Modify o Full control para el archivo. De esta forma se evita el riesgo de seguridad que supone que usuarios sin privilegios ejecuten programas como administrador.

Tip

Puedes averiguar en qué versión de parche de Checkmk se hizo este cambio en Werk #15843.

Si es necesario, modifica los derechos de acceso eliminando los permisos mencionados de los usuarios no administrativos para los programas. El plugin de agente te ayuda con el diagnóstico y comprueba si los usuarios no administrativos tienen acceso a los archivos mencionados y los muestra en la prueba de conexión. El procedimiento exacto para diagnosticar y corregir los derechos de acceso se encuentra en la Base de conocimientos de Checkmk.

Si no te es posible ajustar los permisos de los programas de Oracle de forma segura, puedes permitir que usuarios individuales y grupos ejecuten los programas:

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# Oracle plugin will allow users and groups in the list to have write access to the Oracle binaries
$WINDOWS_SAFE_ENTRIES=@("NT AUTHORITY\Authenticated Users", "<Domain>\<User>")

Sólo si no hay otra forma de garantizar la monitorización de Oracle, puedes desactivar el check de derechos de acceso como última opción.

Important

Si desactivas el check de derechos de acceso, el plugin de agente dejará de ejecutarse de forma segura.

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# Oracle plugin will not check if the used binaries are write-protected for non-admin users
$SKIP_ORACLE_SECURITY_CHECK=1

Sin embargo, también existe otra forma de ejecutar el Plugin de agente, sin derechos de administrador. Puedes personalizar la ejecución del Plugin de agente y ejecutarlo bajo el grupo local de Windows Users, por ejemplo. Para ello, edita el archivo de configuración check_mk.user.yml del agente de Windows, por ejemplo, de esta forma

C:\ProgramData\checkmk\agent\check_mk.usuario.yml
plugins:
    enabled: yes
    execution:
        - pattern: $CUSTOM_PLUGINS_PATH$\mk_oracle.ps1
          async: yes
          group: Users
          run: true

En las ediciones comerciales, puedes hacer que la Agent bakery cree estas entradas con la regla de agente Run plug-ins and local checks using non-system account.

4.5. Monitorización de bases de datos remotas

Actualmente no es posible monitorizar bases de datos remotas utilizando el plugin de agente de Windows. Por tanto, si quieres monitorizar bases de datos remotas, necesitas un host con un sistema operativo compatible tipo Unix.

5. Configuración con el Agent bakery

La configuración puede simplificarse enormemente en las ediciones comerciales con la Panadería de Agentes, porque se evitan los errores de sintaxis en los archivos de configuración, y las adaptaciones a entornos cambiantes pueden implementarse más fácilmente. La principal diferencia respecto a una configuración manual es que sólo tienes que trabajar en el host de Oracle en la línea de comandos si quieres hacer configuraciones especiales específicas de Oracle. Puedes realizar la configuración con la Panadería de Agentes para Linux, Solaris, AIX y Windows.

Sin embargo, no puedes configurar todas las funciones del plugin de agente con la Agent bakery, por ejemplo, si se trata de funciones que requieren una intervención importante y profundos conocimientos especializados. En consecuencia, las consultas SQL personalizadas no pueden configurarse en la Agent bakery.

A través de Setup > Agents > Windows, Linux, Solaris, AIX y el menú Agents > Agent rules, encontrarás la página con el conjunto de reglas Oracle databases (Linux, Solaris, AIX, Windows). Crea una nueva regla con Add rule. Aquí encontrarás todas las opciones disponibles para configurar el plugin de agente:

Rule for configuring Oracle in the Agent Bakery.

Muchas opciones te resultarán familiares de la configuración manual. Como se describe allí, hay opciones que no están disponibles para todos los sistemas operativos. El título de estas opciones muestra para qué sistemas operativos se pueden utilizar.

5.1. Configurar usuarios

En la configuración más sencilla para un sistema operativo tipo Unix, la regla será algo parecido a esto:

Simplest rule for configuring Oracle in the Agent Bakery.

En el Agent bakery también tienes la opción de crear usuarios estándar y de crear excepciones para instancias específicas. Las opciones, separadas en el archivo de configuración con dos puntos (para Linux y compañía) o como entradas de la lista (para Windows), las encontrarás en Login Defaults como opciones individuales que luego puedes rellenar según necesites. Por supuesto, también puedes utilizar aquí el Monedero Oracle cambiando simplemente Authentication method por Use manually created Oracle password wallet.

La configuración para la Gestión Automática de Almacenamiento (ASM) se realiza de forma análoga mediante la opción Login for ASM, y las excepciones para instancias específicas se introducen en Login for selected databases, tal y como se describe en la configuración avanzada de usuario para Linux, Solaris, AIX y Windows.

5.2. Opciones avanzadas

La siguiente tabla enumera las opciones restantes del conjunto de reglas Oracle databases (Linux, Solaris, AIX, Windows), junto con una referencia a dónde encontrar una descripción de la opción:

Opción Descripción

Host uses xinetd or systemd (Linux/AIX/Solaris only)

Esta opción debe activarse para sistemas tipo Unix con xinetd/systemd. Con systemd es obligatoria la ejecución asíncrona del plugin de agente, en el intervalo que especifiques. Puedes obtener más información al respecto en la instalación del plugin de agente.

Instances to monitor

Esta opción resume varias opciones del archivo de configuración con las que puedes incluir o excluir instancias para Linux, Solaris, AIX o Windows.

Add pre or postfix to TNSALIASes (Linux/AIX/Solaris only)

Esta opción te permite ampliar el alias TNS globalmente o para una instancia concreta.

Sections - data to collect

En esta opción se enumeran todas las secciones disponibles, que pueden configurarse individualmente a nivel global, por lo que corresponden a las variables SYNC_SECTIONS y ASYNC_SECTIONS y, para ASM, a sus homólogas SYNC_ASM_SECTIONS y ASYNC_ASM_SECTIONS. Encontrarás más información al respecto en la sección sobre los datos que deben obtenerse para Linux, Solaris, AIX o Windows.

Exclude some sections on certain instances

Si no quieres utilizar EXCLUDE_<SID> para excluir toda la instancia, sino sólo algunas secciones, puedes hacerlo con esta opción, como se describe para Linux, Solaris, AIX o Windows.

Cache age for background checks

Especifica aquí cuánto tiempo deben permanecer válidas las secciones asíncronas. El valor por defecto es de 600 segundos (10 minutos).

Sqlnet Send timeout

Esta opción se añade al archivo sqlnet.ora y establece un timeout que se aplica a todas las instancias.

Remote instances (Linux/AIX/Solaris only)

Configura instancias remotas con esta opción. Contiene todos los elementos de la configuración que ya conoces. Para especificar el ID de la variable, a través de Unique ID puedes elegir entre varias opciones. Sólo tienes que asegurarte de que el ID es único dentro de la configuración.

ORACLE_HOME to use for remote access (Linux/AIX/Solaris only)

Aquí puedes determinar dónde encuentra el plugin de agente el programa sqlplus. Debes introducir un valor aquí si quieres monitorizar una instancia remota, pero sqlplus no se puede encontrar a través de las variables del entorno.

TNS_ADMIN to use for sqlnet.ora and tnsnames.ora (Linux/AIX/Solaris only)

Si los dos archivos se encuentran en un directorio distinto de /etc/check_mk/, puedes utilizar esta opción para especificar el nombre de la ruta a través de la variable del entorno TNS_ADMIN.

sqlnet.ora permission group (Linux/AIX/Solaris only)

Introduce aquí el grupo Linux del usuario sin privilegios propietario de los binarios Oracle para que este usuario pueda leer el archivo sqlnet.ora creado por el Agent bakery. Para una instalación estándar de Oracle, se puede utilizar oinstall como grupo.
Encontrarás más información en la sección Derechos de acceso en la ejecución para Linux. Allí también se mencionan otros archivos y directorios, por ejemplo tnsnames.ora, que no son creados por la Agent bakery. Para estos archivos y directorios creados manualmente, también debes configurar manualmente los permisos necesarios.

Oracle binaries permissions check (Windows only)

Aquí puedes configurar el check de derechos de acceso para los binarios de Oracle, permitiendo que usuarios individuales, no administrativos, y grupos ejecuten los programas. Sólo debes desactivar el check si sabes lo que estás haciendo. Puedes encontrar más información sobre este tema en la sección Derechos de acceso en ejecución para Windows.

6. Instancias en clúster

6.1. Bases de datos en espera

Oracle admite las denominadas bases de datos en espera, que pueden realizar tareas específicas, y que suelen ser simplemente copias de las bases de datos de producción o primarias. Estos conceptos de bases de datos también requieren mecanismos especiales de monitorización. Puedes obtener más información sobre estos mecanismos en las siguientes secciones.

Con Active Data Guard (ADG)

Una vez que hayas licenciado y activado ADG, no necesitas hacer ningún cambio en la configuración del plugin de agente, ya que puedes leer desde una instancia en espera en cualquier momento sin tener que interrumpir la sincronización con la instancia primaria.

Sin Guardia de Datos Activa (GD)

Si las instancias no tienen ADG, el usuario con el que se van a obtener los datos de monitorización de las instancias en espera necesita el rol SYSDBA. Este permiso permite al usuario obtener al menos parte de los datos, aunque falle la instancia primaria y la instancia en el servidor de espera aún no se haya cambiado de MOUNTED a OPEN.

Asigna el permiso al usuario autorizado a recuperar los datos de las instancias.Importante: El funcionamiento puede diferir del ejemplo siguiente. Aquí el rol se asigna al usuario tal y como se creó en el ejemplo de configuración inicial:

sqlplus> grant sysdba to checkmk;

Para que el plugin de agente pueda consultar los datos en el servidor en espera en caso de error, crea el usuario en la instancia primaria y, a continuación, copia el archivo de contraseñas en el servidor en espera. Por último, en el archivo de configuración del Plugin, establece el rol del usuario en SYSDBA:

/etc/check_mk/mk_oracle.cfg
# Syntax:
# DBUSER='USER:PASSWORD:ROLE:HOST:PORT:TNSALIAS'
DBUSER='checkmk:myPassword:sysdba'

Ten en cuenta que especificar un host, un puerto o un alias TNS es opcional, y puede omitirse. Además, el plugin de agente debe estar instalado, por supuesto, en el host de la instancia primaria, así como en los hosts de las instancias en espera.

Configurar los servicios del clúster

Por parte de Checkmk, es necesario -independientemente de si utilizas ADG o DG- personalizar los servicios y asignarlos a un host de clúster. Los correspondientes check plugin ya han sido preparados hasta el punto de que también pueden configurarse como servicios de clúster. Crea un host de clúster en Checkmk y añádele como nodos los hosts individuales de Oracle en los que se ejecutan las instancias primaria y en espera. A continuación, asigna los siguientes servicios a este host de clúster:

  • ORA .* RMAN Backup

  • ORA .* Job

  • ORA .* Tablespaces

De este modo, ya no tendrás que preocuparte de la instancia de la que proceden los datos, y habrás garantizado una monitorización sin fisuras de los servicios mencionados, incluso en caso de conmutación de la instancia primaria.

6.2. Clúster de Aplicaciones Reales (RAC)

Dado que en un RAC existe un almacenamiento central de los datos, en este caso basta con crear una sola vez el usuario para el plugin de agente. Sólo es necesario instalar y configurar el plugin de agente en cada nodo del clúster de Oracle.

Importante: Configura siempre tú mismo los nodos del clúster, y no consultes al listener de Oracle SCAN. Sólo así te asegurarás de que el acceso a través del plugin de agente funciona correctamente.

Configurar los servicios del clúster

También tiene sentido configurar los servicios del clúster para un RAC. Además de los servicios que asignes al host de clúster en un Data Guard (Activo), asigna también los siguientes servicios al host de clúster para garantizar una monitorización sin interrupciones en caso de conmutación:

  • ASM.* Diskgroup

  • ORA .* Recovery Area

7. Consultas SQL personalizadas (Custom SQLs)

7.1. ¿Por qué consultas SQL personalizadas?

Con su plugin de agente, Checkmk ya proporciona un gran número de consultas SQL con las que puedes monitorizar tus instancias de base de datos. Para que se adapten a la gama más amplia posible de requisitos técnicos y de contenido, se mantienen, por supuesto, de forma muy generalizada.

Para poder satisfacer los requisitos individuales de cada empresa para la monitorización de una base de datos concreta, Checkmk ofrece la posibilidad de crear tus propias consultas SQL personalizadas(SQL personalizadas para abreviar) y recuperarlas con el plugin de agente. Estas consultas SQL personalizadas se reconocen y monitorizan automáticamente como servicios propios en la interfaz web.

Tip

Sólo es posible utilizar consultas SQL personalizadas en Linux, Solaris y AIX. Esta opción no está disponible en Windows.

7.2. Consultas SQL personalizadas sencillas

Escribir consultas SQL

La forma más sencilla de conectar un SQL de este tipo es utilizar el complemento de comprobación Base de datos Oracle: Custom SQLs check plugin. Para ello, crea primero el archivo MyCustomSQL.sql en el directorio de configuración del agente en el host en el que se va a ejecutar el SQL.

A continuación se muestra un archivo ficticio que ilustra la sintaxis:

/etc/check_mk/MyCustomSQL.sql
/*Syntax help in comments. The first word is alwyas the key word and ends with a ":"*/

/*details:Text to display in the service detail output*/
prompt details: Some details for the service output;

/*perfdata:METRIKNAME=CURRENTVALUE;WARN;CRIT;MAX METRIKNAME=CURRENTVALUE2;WARN;CRIT;MAX*/
prompt perfdata:MyMetricName1=10;15;20;30 MyMetricName2=16;15;20;30;
prompt perfdata:MyMetricName3=21;15;20;30 MyMetricName4=15;15;20;30;

/*long:Text to display in the long output of the service*/
prompt long: Here comes some long output for the service;
prompt long: Here comes some more long output for the service;

/*exit:Status of the service as a number*/
prompt exit:2;

El ejemplo muestra, por un lado, que puedes definir cualquier número de sentencias en un archivo de este tipo. Por otro, la sintaxis es muy similar a la de un check local, especialmente en lo que respecta a las métricas. En detalle, esta sintaxis es mucho más potente en este caso, porque puedes generar una salida de varias líneas, que luego se procesa en el servidor Checkmk como un servicio. En principio, todas las líneas son opcionales y no es necesario rellenarlas.

Las palabras clave posibles son detalladas:

  • details: Aquí puedes determinar lo que debe salir en el Summary del servicio generado. Esta línea se introduce con la palabra clave y dos puntos. El resto de la línea es la salida.

  • perfdata: Las métricas se introducen con esta palabra clave. Dentro de una línea, puedes crear cualquier número de métricas, cada una separada por un espacio. También puedes distribuir la salida de las métricas en varias líneas. Sólo tienes que empezar siempre con la palabra clave perfdata:.

  • long: Si el servicio debe tener una salida larga para el campo Details, puedes especificarlo aquí. También puedes utilizar esta palabra clave varias veces para crear varias líneas en el campo Details.

  • exitLas asignaciones conocidas 0, 1, 2, 3 están disponibles para los estados OK, WARN, CRIT, UNKNOWN.

Tip

No tienes que definir manualmente la palabra clave elapsed. Se genera automáticamente en tiempo de ejecución para comprobar cuánto tiempo tardaron en procesarse las sentencias que definiste.

Configurar el plugin de agente

Ahora que has definido tu primer SQL, muy sencillo, dáselo a conocer al plugin de agente mk_oracle. Esto se hace mediante el conocido archivo de configuración, que puedes ampliar según convenga:

/etc/check_mk/mk_oracle.cfg
SQLS_SECTIONS="mycustomsection1"

mycustomsection1 () {
    SQLS_SIDS="INST1"
    SQLS_DIR="/etc/check_mk"
    SQLS_SQL="MyCustomSQL.sql"
}

Con la primera opción (SQLS_SECTIONS) determinas qué secciones individuales quieres que se ejecuten. Ten en cuenta que sección significa aquí una parte de la salida del plugin de agente, y no una parte de una instancia de base de datos. En el ejemplo, sólo hemos especificado una sección (mycustomsection1) y la hemos descrito con más detalle directamente después. Cada sección es en realidad una pequeña función llamada por el plugin de agente.

En esta función puedes determinar más detalles y especificar para qué instancias (SQLS_SIDS) se aplica esta sección. Además, también defines dónde se encuentra el archivo con las sentencias SQL (SQLS_DIR), y el nombre de este archivo (SQLS_SQL).

Esta sencilla configuración es suficiente para poder ver el resultado en Checkmk. Para ello, realiza un descubrimiento de servicios y activa el nuevo servicio. Después verás este nuevo servicio con los demás servicios en la vista general del host:

The new service created by custom SQL queries in the service list.

7.3. Opciones avanzadas

Las posibilidades de monitorización con consultas SQL personalizadas van, por supuesto, más allá del sencillo ejemplo mostrado anteriormente. A continuación encontrarás una Vista general de las variables disponibles que puedes utilizar en el archivo de configuración mk_oracle.cfg. Para una descripción detallada, también puedes llamar al plugin de agente mk_oracle con la opción --help.

Tip

Las variables que sólo pueden establecerse fuera o sólo dentro de una función de sección están marcadas en consecuencia. Todas las demás pueden definirse en ambas secciones. Si se establecen fuera de una sección, se aplicarán globalmente a todas las secciones.

Variable Descripción breve Opcional

SQLS_SECTIONS

Las funciones de sección autodefinidas que ejecutará el plugin de agente.
Esta variable sólo puede establecerse globalmente (fuera de una función de sección).

No

SQLS_SIDS

Las instancias que deben ejecutar la(s) sección(es).

No

SQLS_DIR

El nombre de la ruta del directorio en el que se almacenan los archivos con las consultas SQL personalizadas.

No

SQLS_SQL

El archivo que contiene las sentencias SQL para una sección.

No

SQLS_SECTION_NAME

El nombre de la sección que evalúas con un propio check plugin para las consultas SQL personalizadas.

SQLS_SECTION_SEP

El separador de los elementos individuales en una línea de la salida, definido como un ID ASCII decimal. Esta variable sólo se puede utilizar junto con la variable SQLS_SECTION_NAME. Te recomendamos que definas tu propio separador para tus propias secciones y utilices el ID ASCII 124 para el carácter de tubería (|), ya que el plugin de agente siempre separa los elementos de la salida en caso de error con |, en el formato <SID>|FAILURE|<error description>. Los siguientes caracteres no se pueden utilizar como separador: ; [ ] =

SQLS_ITEM_NAME

Especifica una parte del nombre del servicio generado. Por defecto, el nombre del servicio está compuesto por el SID y el nombre del archivo con las consultas SQL personalizadas. El valor de esta variable sustituye al nombre del archivo en el nombre del servicio.
Esta variable sólo se puede establecer localmente (dentro de una función de sección). No se puede utilizar junto con la variable SQLS_SECTION_NAME.

SQLS_MAX_CACHE_AGE

Realiza la misma tarea que CACHE_MAXAGE- pero para las consultas SQL personalizadas.

SQLS_DBUSER

Define un usuario individual para una sección.

SQLS_DBPASSWORD

Define la contraseña del usuario definido con SQLS_DBUSER.

SQLS_DBSYSCONNECT

Sólo si el usuario definido con SQLS_DBUSER es SYSDBA o SYSOPER debes definir el rol asociado (SYSDBA o SYSOPER) con esta variable.

SQLS_TNSALIAS

Define un alias TNS individual para una sección.

7.4. Utilizar tus propios plugins de check

Si las posibilidades de la sintaxis descrita anteriormente no son suficientes, también puedes utilizar la variable SQLS_SECTION_NAME para dar salida a tus propios nombres de sección para una o varias consultas SQL y definir tu propio separador con SQLS_SECTION_SEP. Sin embargo, esto requiere que también hayas escrito un check plugin apropiado y lo hayas incluido en tu site Checkmk.

Si has escrito un plugin de comprobación de este tipo, tienes total libertad para evaluar la salida de las secciones autodefinidas del plugin de agente y puedes seguir tu propio camino. Como este método es el más completo, y también el más difícil, sólo se menciona aquí para completarlo. Supone que sabes cómo escribir un plugin de comprobación basado en agente e integrarlo en el site. Después, asignas las consultas SQL personalizadas con las variables a este plugin de comprobación.

8. Opciones de diagnóstico

En Linux, el diagnóstico se realiza llamando al plugin de agente mk_oracle con varias opciones. Con mk_oracle --help puedes mostrar un resumen de todas las opciones disponibles.

8.1. Prueba de conexiones

Tip

La prueba de conexión que se describe a continuación también comprueba si se han establecido los derechos de acceso necesarios durante la ejecución en Linux o Windows. Si faltan derechos de acceso, éstos se muestran con sugerencias específicas para su rectificación. El procedimiento exacto para diagnosticar y corregir los derechos de acceso se puede encontrar en la Base de conocimientos de Checkmk.

Linux, Solaris, AIX

Si tienes problemas para conectarte a una o varias instancias de un servidor Oracle, lo primero que puedes hacer es comprobar los parámetros básicos. Si inicias el plugin de agente con la opción -t, se mostrarán los detalles de una conexión. Ten en cuenta que, previamente, hay que proporcionar al plugin de agente las rutas a su archivo de configuración y a los datos en caché del plugin. En la salida se han omitido las secciones ficticias para facilitar la lectura.

El siguiente ejemplo corresponde a un servidor Linux con systemd, en el que el plugin de agente se ejecuta de forma asíncrona cada 60 segundos:

root@linux# export MK_CONFDIR="/etc/check_mk/"; export MK_VARDIR="/var/lib/check_mk_agent"
root@linux# /usr/lib/check_mk_agent/plugins/60/mk_oracle -t --no-spool
---login----------------------------------------------------------------
    Operating System:       Linux
    ORACLE_HOME (oratab):   /u01/app/oracle/product/11.2.0/xe
    Logincheck to Instance: XE
    Version:                11.2
    Login ok User:          checkmk on ORA-SRV01 Instance XE
    SYNC_SECTIONS:          instance dataguard_stats processes longactivesessions sessions recovery_status undostat logswitches recovery_area performance
    ASYNC_SECTIONS:         tablespaces rman jobs ts_quotas resumable
------------------------------------------------------------------------

En un servidor Linux con xinetd, llama en su lugar a mk_oracle para la prueba de conexión de la siguiente forma:

root@linux# /usr/lib/check_mk_agent/plugins/mk_oracle -t

Como es más probable que esta llamada se realice en caso de error, también recibirás más información: tanto la cadena de conexión que se utilizó para la conexión como los 100 primeros caracteres del mensaje de error que se devolvió durante el intento de conexión. Con ayuda de esta información, puedes identificar rápidamente problemas sencillos de configuración y corregirlos en consecuencia.

Windows

El plugin de agente no acepta ningún parámetro en Windows. Por eso, para probar la conexión aquí, limita temporalmente las secciones a recuperar a instance y activa la opción DEBUG:

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1
# Syntax:
# $DBUSER = @("USERNAME", "PASSWORD")
$DBUSER = @("checkmk", "myPassword")

SYNC_SECTIONS = @("instance")
ASYNC_SECTIONS = @("")
DEBUG = 1

A continuación, ejecuta manualmente el plugin de agente. De nuevo, obtendrás información sobre cómo el plugin intenta acceder a las instancias. La salida puede ser, por ejemplo, la siguiente:

PS C:\ProgramData\checkmk\agent\plugins\> .\mk_oracle.ps1
2020-08-23T12:48:20.3930944+02:00 DEBUG:value of DBVERSION software = xxx112020xxx
<<<oracle_instances>>>
2020-08-23T12:48:20.3930944+02:00 DEBUG:value of inst_name = xxxXExxx
2020-08-23T12:48:20.3930944+02:00 DEBUG:value of DBVERSION database = xxx112020xxx
2020-08-23T12:48:20.3930944+02:00 DEBUG:value of the_section = sql_instance
2020-08-23T12:48:20.3930944+02:00 DEBUG:now calling multiple SQL
2020-08-23T12:48:20.3930944+02:00 DEBUG:value of sql_connect in dbuser = checkmk/myPassword@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SID=XE))) as sysdba
<<<oracle_instance>>>
XE|FAILURE|...

8.2. Registro

Linux, Solaris, AIX

Si no se puede encontrar el error comprobando una simple conexión, el siguiente paso es crear un archivo de registro, que registre todos los pasos del plugin de agente. Tampoco olvides aquí las variables del entorno necesarias. En el siguiente ejemplo, también se ha omitido la salida de las secciones para mejorar la legibilidad.

Aquí está la llamada para un servidor Linux con systemd, en el que el plugin de agente se ejecuta de forma asíncrona cada 60 segundos:

root@linux# export MK_CONFDIR="/etc/check_mk/"; export MK_VARDIR="/var/lib/check_mk_agent"
root@linux# /usr/lib/check_mk_agent/plugins/60/mk_oracle -l --no-spool
Start logging to file: /var/lib/check_mk_agent/log/mk_oracle.log

Aquí está la llamada de mk_oracle para el registro en un servidor Linux con xinetd:

root@linux# /usr/lib/check_mk_agent/plugins/mk_oracle -l

Puedes utilizar el archivo de registro generado para identificar con gran precisión en qué línea del script se ha producido el problema.

Windows

El registro en Windows funciona de forma similar a la prueba de conexión descrita anteriormente. Si la conexión en sí es estable, puedes volver a añadir las secciones reales al archivo de configuración y obtener así una salida de registro completa.

8.3. Depuración

Linux, Solaris, AIX

Si no puedes llegar al problema, ni siquiera con la ayuda del registro, como última opción el plugin de agente proporciona la salida completa de todos los pasos para el análisis de errores. Esta salida es, por tanto, el método más completo, y sin duda el más difícil de leer, para llegar a la causa de un problema, por lo que sólo debe utilizarse como último recurso.

A continuación se muestra un ejemplo de depuración en un servidor Linux con systemd, en el que el plugin de agente se ejecuta de forma asíncrona cada 60 segundos:

root@linux# export MK_CONFDIR="/etc/check_mk/"; export MK_VARDIR="/var/lib/check_mk_agent"
root@linux# /usr/lib/check_mk_agent/plugins/60/mk_oracle -d --no-spool

He aquí la llamada de mk_oracle para depurar en un servidor Linux con xinetd:

root@linux# /usr/lib/check_mk_agent/plugins/mk_oracle -d

Importante: En esta salida no se enmascaran los datos sensibles, como las contraseñas, por lo que todo es legible en texto plano.

Windows

En Windows existe una funcionalidad similar. Sin embargo, como no puedes pasar ningún argumento al plugin de agente, tendrás que activar el rastreo manualmente:

PS C:\ProgramData\checkmk\agent\plugins\> Set-PSDebug -Trace 1
PS C:\ProgramData\checkmk\agent\plugins\> .\mk_oracle.ps1

8.4. Mensajes de error en los archivos de registro de Oracle

El usuario de la base de datos para la monitorización no suele necesitar el rol SYSDBA. Sin embargo, ten en cuenta que el plugin de agente mk_oracle puede generar mensajes de error (no relevantes para la monitorización) con bases de datos multi-tenant que pueden no escribirse en los archivos de registro de la base de datos Oracle debido a la falta del privilegio SYSDBA. Esto puede dar lugar, por ejemplo, a mensajes de error de Oracle del tipo ORA-01031: insufficient privileges en un archivo de registro de alerta.

9. Ficheros y directorios

9.1. En el host Oracle bajo Linux, Solaris, AIX

Ruta del archivo Descripción

/usr/bin/check_mk_agent

El agente Checkmk que recoge todos los datos sobre el host.

/usr/lib/check_mk/plugins/mk_oracle/

El plugin de agente de Oracle en el directorio habitual para los plugins de agente. Ten en cuenta que el nombre de la ruta en AIX es ligeramente distinto: /usr/check_mk/lib/plugins/mk_oracle

/etc/check_mk/oracle.cfg

El archivo de configuración del plugin de agente. De nuevo, AIX es diferente: /usr/check_mk/conf/mk_oracle.cfg

/etc/check_mk/sqlnet.ora

El archivo de configuración necesario para la Cartera Oracle.

/etc/check_mk/tnsnames.ora

El archivo de configuración que contiene los alias TNS. Los archivos de ejemplo también se encuentran en la instalación de Oracle, pero como la ruta difiere de una instalación a otra, no se puede especificar de forma estandarizada.

9.2. En el host de Oracle bajo Windows

Ruta del archivo Descripción

C:\Program Files (x86)\checkmk\service\check_mk_agent.exe

El agente Checkmk que recoge todos los datos sobre el host.

C:\ProgramData\checkmk\agent\plugins\mk_oracle.ps1

El Plugin de agente Oracle en el directorio habitual para plugins de agente.

C:\ProgramData\checkmk\agent\config\mk_oracle_cfg.ps1

El archivo de configuración del Plugin de agente.

C:\ProgramData\checkmk\agent\config\sqlnet.ora

El archivo de configuración necesario para la Cartera Oracle.

C:\ProgramData\checkmk\agent\config\tnsnames.ora

El archivo de configuración que contiene los alias TNS. Los archivos de ejemplo también se encuentran en la instalación de Oracle, pero como la ruta difiere de una instalación a otra, no se puede especificar de forma estandarizada.

9.3. En el servidor Checkmk

Ruta del archivo Descripción

~/share/check_mk/agents/plugins/mk_oracle

Plugin de agente para sistemas tipo Unix, que obtiene los datos en el host de Oracle.

~/share/check_mk/agents/plugins/mk_oracle_crs

Este plugin de agente para sistemas Unix proporciona datos a un gestor de clústeres de Oracle.

~/share/check_mk/agents/windows/plugins/mk_oracle.ps1

Plugin de agente para Windows, que obtiene los datos en el host de Oracle.

~/share/check_mk/agents/cfg_examples/

Aquí tienes ejemplos de archivos de configuración para sistemas tipo Unix en los archivos mk_oracle.cfg, sqlnet.ora y tnsnames.ora.

~/share/check_mk/agents/windows/cfg_examples/mk_oracle_cfg.ps1

Un archivo de configuración de ejemplo para Windows.

En esta página