Monitorizar Oracle con Nagios y check_mk

Introducción

En un articulo previo vimos un plugin para monitorizar los grupos de discos ASM de un servidor de Oracle con Nagios. En este caso vamos a ver como monitorizar eso y mucho más con los plugins que incorpora de “serie” check_mk y que nos ofrecen monitorización de: tablespaces, logswitches, sessions y grupos de discos ASM (este último en un segundo plugin). Este es el aspecto que tendrá nuestro servidor de oracle monitorizado en nuestro check_mk.

check_mk_oracle_services

Este articulo está basado en la versión 1.2.3i6 de check_mk (i indica “experimental”, no estable vamos). Con lo rápido que avanza todo dicha versión en breve pasará a ser la 1.2.3 stable. Si tienes una versión inferior de check_mk debes revisar el changelog de versiones para ver si incluyen los plugins para Oracle. Por ejemplo en la versión 1.2.2 stable (omd distro 1.0) se incluye ya el plugin para Oracle pero no con todas las posibilidades aquí descritas (sin el de ASM).

Instalación del agente Linux para check_mk

La instalación del agente básico de check_mk es muy sencilla y la describíamos en el artículo “Check_mk. Primeros pasos”.

Instalación y configuración del plugin para Oracle.

Seguiremos las instrucciones de instalación de la página de check_mk pero aportando información adicional que no esté clara o bien documentada.
Para poder monitorizar nuestro Oracle con el plugin de check_mk además del cliente necesitamos un plugin adicional que este nos proporciona. En una instalación de check_mk clásica tanto en Debian como en Redhat/CentOS podemos ubicar dichos plugins adicionales y sus ficheros de config, adicionales en las siguientes rutas habitualmente:
/usr/share/check_mk/agents/plugins/mk_oracle y mk_oracle_asm
/usr/share/check_mk/agents/sqlplus.sh y asmcmd.sh (Ficheros de ejemplo necesarios para ambos plugins)
En una instalación realizada con OMD/OMDISTRO deben estar ubicados en una ruta similar dentro de /opt/omd/version tal que “/opt/omd/versions/1.00/share/check_mk/agents/plugins/”
Localizamos la ubicación en servidor destino echando un ojo a las variables de entorno del script de cliente de check_mk: PLUGINSDIR y MK_CONFDIR

# grep MK_LIBDIR /usr/bin/check_mk_agent
export MK_LIBDIR="/usr/lib/check_mk_agent"
PLUGINSDIR=$MK_LIBDIR/plugins
LOCALDIR=$MK_LIBDIR/local
# grep MK_CONFDIR= /usr/bin/check_mk_agent
export MK_CONFDIR="/etc/check_mk"

Copiamos los plugins mk_oracle y mk_oracle_asm a $MK_LIBDIR/plugins. Si no existiera el directorio lo creamos previamente. Los hacemos ejecutables para todos.

chmod 755 /usr/lib/check_mk_agent/plugins/*

Copiamos los ficheros de ejemplo sqlplus.sh y asmcmd.sh en nuestro directorio de configuración de check_mk MK_CONFDIR (/etc/check_mk). Debemos crear el directorio previamente si no existe.
Los hacemos ejecutables igualmente.

Editamos el fichero sqlplus.sh. Para que funcione debería ser similar al siguiente (las variables NLS las ponemos en este formato para no tener problemas con el plugin):

ORACLE_SID=$1
if [ -z "$ORACLE_SID" ] ; then
 echo "Usage: $0 ORACLE_SID" >&2
 exit 1
fi
export ORACLE_SID=$ORACLE_SID
export ORAENV_ASK=NO
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export NLS_LANG=american_america.AL32UTF8
export NLS_DATE_FORMAT=DD.MM.YYYY-HH24:MI:SS
export PATH=${PATH}:${ORACLE_HOME}/bin
su nagios -c "sqlplus -s /"

En el fichero “asmcmd.sh” para el plugin de asm necesitamos solo una única línea con nuestro usuario oracle de grid (para ASM). Tenemos que poner atención que las variables de entorno de dicho usuario en su profile sean correctas y pueda ejecutar asmcmd.

su - grid -c "asmcmd $@"

Creación del usuario nagios para conexión a BBDD

Nuestros plugins necesitan un usuario “nagios” del S.O. y un usuario ops$nagios (usuario especial identificado desde el S.O) en Oracle.
Creamos el usuario de S.O. y lo añadimos al grupo asmdba

useradd -m nagios
usermod -a -G asmdba nagios

En oracle 11gR2 (al menos) existe un problema si el usuario nagios no forma parte del grupo asmdba. En versiones previas si es posible que funcione sin añadirlo.

Creamos el usuario de Oracle accediendo p.e. con sqlplus.

SQL>
create user ops$nagios identified externally;
grant connect to ops$nagios;
grant dba to ops$nagios;

Sería más óptimo no darle permisos de dba al usuario y darle permisos solo de select en las tablas que vaya a usar. Si queremos realizarlo de esa manera tendríamos que mirar las sentencias SQL que ejecuta el plugin y limitar los permisos sobre las tablas y/o vistas que use.

Pruebas y configuración en check_mk/nagios.

Probamos desde nuestro check_mk en modo debug a listar la respuesta del cliente y veremos que además de todos la información de chequeos habituales nos pasa al final la información de Oracle:

cmk -d srv_oracle11
…..
<<<oracle_version>>>
DB11G Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Producti on
<<<oracle_sessions>>>
DB11G 32
<<<oracle_logswitches>>>
DB11G 0
<<<oracle_jobs>>>
DB11G SYS SM$CLEAN_AUTO_SPLIT_MERGE SCHEDULED 0 12 TRUE 11-NOV-13 12.00.00.60000 0 AM PST8PDT
DB11G -
DB11G SUCCEEDED
DB11G SYS RSE$CLEAN_RECOVERABLE_SCRIPT SCHEDULED 31 12 TRUE 11-NOV-13 12.00.00.5 00000 AM PST8PDT
DB11G -
DB11G SUCCEEDED
DB11G SYS BSLN_MAINTAIN_STATS_JOB SCHEDULED 82 8 TRUE 17-NOV-13 12.00.00.800000 AM -07:00
DB11G BSLN_MAINTAIN_STATS_SCHED
DB11G SUCCEEDED
DB11G SYS DRA_REEVALUATE_OPEN_FAILURES SCHEDULED 9 7 TRUE 01-JAN-70 12.00.00.000 000 AM +01:00
DB11G MAINTENANCE_WINDOW_GROUP
DB11G SUCCEEDED
DB11G SYS ORA$AUTOTASK_CLEAN SCHEDULED 3 11 TRUE 11-NOV-13 03.00.00.900000 AM PS T8PDT
DB11G DAILY_PURGE_SCHEDULE
DB11G SUCCEEDED
DB11G SYS PURGE_LOG SCHEDULED 95 11 TRUE 11-NOV-13 03.00.00.900000 AM PST8PDT
DB11G DAILY_PURGE_SCHEDULE
DB11G SUCCEEDED
DB11G ORACLE_OCM MGMT_STATS_CONFIG_JOB SCHEDULED 7 3 TRUE 01-DEC-13 01.01.01.000 000 AM -07:00
DB11G -
DB11G SUCCEEDED
DB11G ORACLE_OCM MGMT_CONFIG_JOB SCHEDULED 4 7 TRUE 01-JAN-70 12.00.00.000000 AM +01:00
DB11G MAINTENANCE_WINDOW_GROUP
DB11G SUCCEEDED
DB11G EXFSYS RLM$SCHDNEGACTION SCHEDULED 0 18 TRUE 10-NOV-13 10.38.36.000000 PM +01:00
DB11G -
DB11G SUCCEEDED
DB11G EXFSYS RLM$EVTCLEANUP SCHEDULED 0 23 TRUE 10-NOV-13 02.31.37.400000 PM -07 :00
DB11G -
DB11G SUCCEEDED
<<<oracle_rman_backups>>>
<<<oracle_tablespaces>>>
DB11G +ASMDATA/db11g/datafile/example.269.814659057 EXAMPLE AVAILABLE YES 12800 4194302 12672 80 ONLINE 8192 ONLINE 2760
DB11G +ASMDATA/db11g/datafile/sysaux.257.814658691 SYSAUX AVAILABLE YES 65280 41 94302 65152 1280 ONLINE 8192 ONLINE 4096
DB11G +ASMDATA/db11g/datafile/system.256.814658685 SYSTEM AVAILABLE YES 87040 41 94302 86912 1280 SYSTEM 8192 ONLINE 760
DB11G +ASMDATA/db11g/datafile/undotbs1.258.814658691 UNDOTBS1 AVAILABLE YES 7040 4194302 6912 640 ONLINE 8192 ONLINE 4264
DB11G +ASMDATA/db11g/datafile/users.259.814658691 USERS AVAILABLE YES 640 419430 2 512 160 ONLINE 8192 ONLINE 120
DB11G +ASMDATA/db11g/tempfile/temp.268.814659027 TEMP ONLINE YES 2560 4194302 24 32 80 TEMP 8192 ONLINE 1664
<<<oracle_asm_diskgroup>>>
MOUNTED NORMAL N 512 4096 1048576 8190 4172 0 2086 0 N ASMDATA/

Escaneamos con check_mk el hosts ya para incoporporar los chequeos a Nagios y nos deben aparecer en la lista

# check_mk -II srv_oracle11

check_mk_oracle_detected_services

Reiniciamos / recargamos check_mk para que nos añada el host a Nagios p.e.: cmk -R
Ya tenemos nuestros servicios de oracle monitorizados:

check_mk_oracle_services

Por supuesto hay muchas más cosas interesantes que monitorizar en Oracle pero de momento es lo que tenemos de serie que no está mal. Con esta “arquitectura” de plugins de CMK seguro que se irán incorporando versión a versión muchos más plugins interesantes.

Intervalos de alertas de check_mk para los plugins.

Como siempre los plugins / chequeos llevan por defecto unos valores de Warning / Critical que puede nos interese cambiar. En las páginas de ayuda de check_mk nos informa de algunos.
En la página de oracle_asm nos referencia que para cambiar los valores por defecto para los discos ASM tendremos que usar el valor general para Filesystems “filesystem_default_levels” o bien especificarlo explícitamente para el grupo de discos en el array check_parameters (Ver la página de ayuda de df que usa los mismos parámetros).
Para el espacio en los tablespaces usaremos también el array check_parameters. Un ejemplo para anular los umbrales de los tablespaces TEMP y UNDO. (Ver la documentación chequeo df de check_mk para usar enteros en Mb, porcentajes,…)

check_parameters += [
# Eliminamos los rangos de aviso por defecto para tablespaces undo y tmp ya que no es problema que esten llenos. 
( { "levels" : (-1, -1)} , ALL_HOSTS, [ "ORA orapro.TEMP Tablespace" ] ),
( { "levels" : (-1, -1)} , ALL_HOSTS, [ "ORA orapro.UNDOTBS1 Tablespace" ] ),
]

Posibles problemas

Errores ORA

Al escanear en modo debug nos aparecen errores ORA (si hacemos la prueba de acceso como usuario Nagios ejecutando sqlplus también):

ORA-00604: error occurred at recursive SQL level 1
ORA-01115: IO error reading block from file (block # )
ORA-01110: data file 1: '+ASMDATA/db11g/datafile/system.256.814658685'
ORA-15081: failed to submit an I/O operation to a disk

Como comentamos al menos en Oracle11 es necesario que nuestro usuario nagios forme parte del grupo de dbas de ASM:
usermod -a -G asmdba nagios

Debug (cmk -d) no dá salida.

Ejecutando el modo debug (cmk -d servidor_oracle) de pruebas de cmk no obtenemos salida de la parte de oracle (o obtenemos cabeceras vacías).

Lo más probable es que tengamos mal variables de entorno en los scripts.sh que usa en /etc/check_mk de nuestro oracle. Probar desde un shell  a ejecutarlo tal cual con el usuario Nagios.

 Más.

Si te ha parecido útil este artículo te interesará también ya puestos monitorizar con check_mk tus backups con RMAN. Echa un ojo a Instalación de packages de check_mk. Oracle RMAN package.

También pueden interesarte otros artículos relacionados con la monitorización de Oracle:

One thought on “Monitorizar Oracle con Nagios y check_mk

  1. Pingback: Instalación de packages de check_mk. Oracle RMAN package. | El Despistado.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Comment moderation is enabled. Your comment may take some time to appear.