Check_mk. Chequeos. Primeros pasos (II)

Siguiendo con la introducción a la configuración de objetos de Nagios con check_mk vamos a avanzar un poco más en las posibilidades que nos ofrece continuando el articulo anterior, (check_mk. Chequeos. Primeros pasos).

Definición de equipos a monitorizar.

Vimos que la sintaxis más sencilla para definir Hosts era la siguiente:

 all_hosts = [ 'localhost', 'srv_windows’ ]

Recordad también que era necesario que el host tuviera el agente check_mk instalado previamente (o que tenga snmp, ya veremos este tema posteriormente) y que responda adecuadamente por nombre.
En el array denominado all_hosts pondremos todos los equipos a monitorizar con la sintaxis especificada: dentro del array, contenidos entre comillas simples y separados por comas.

Tags.
En la definición de los hosts también podemos incluir “tags” que nos servirán posteriormente para referenciar todos los objetos que contengan ese tag. Veámoslo como conjuntos pensados para referirse a todos los hosts que pertenezcan a dicho conjunto. Esto nos facilitará mucho la vida posteriormente en la configuración de otros parámetros. Podemos definir tantos tags como queramos a cada hosts pero solo podemos usar letras, números y subrayado bajo. Por ejemplo (marcados los tags en rojo):

 all_hosts = [ 'localhost|linux|cpd1', 'srv_windows|windows|cpd1']

Vemos que la sintaxis es separar los tags con un “pipe” del host y entre ellos.
Hemos agregado los tags “linux” y “windows” para poder distinguir el Sistema Operativo de los hosts. También hemos añadido un tag “cpd1” para reflejar que ambos equipos están en la misma ubicación. Posteriormente podremos modificar chequeos y propiedades de estos en función del Sistema Operativo y de la ubicación, en lugar de tener que referenciar a todos los hosts en una lista.
Para mejorar la legibilidad podemos también separar los elementos del array.

 all_hosts = [ 'localhost|linux|cpd1', 'srv_windows|windows|cpd1' ]

Solo por el hecho de definir los hosts a chequear, check_mk ya creará en estos una serie de servicios por defecto a chequear como vimos previamente. Las directivas que veremos a continuación son para definir más chequeos que no realiza por defecto, para alterar estos, decirle que no los realice o para añadir funcionalidades y parámetros de configuración adicionales.

Chequeo de servicios en servidores windows.

Empezamos con las directivas que nos serán de utilidad a la hora de definir chequeos adicionales. Esta nos permitirá chequear el estado de servicios en servidores Windows que tenga el agente check_mk instalado claro.
En este caso la directiva implicada es “inventory_services” y define los servicios que queremos chequear. Ejemplo:

 inventory_services = ['Sophos_Agent','AVP',]

Este es un ejemplo sencillo, define unos servicios a inventariar (distintos servicios de antivirus) siempre que aparezcan en cualquier Host (Windows). Si detecta alguno de estos servicios en cualquier Host inventariado lo añadirá como servicio a chequear. OJO, debemos usar el nombre corto del servicio Windows (Nombre de servicio) no la descripción.

Actualizar el inventario.
Después de realizar una modificación siempre tendremos que actualizar el inventario y recargar la configuración. Con la opción –I inventariábamos un equipo, con –II lo “reinventaríamos” (para añadir o para eliminar chequeos que ya no existen). En este caso le decimos que vuelva a inventariarlos.

check_mk –II
check_mk -O

Si vamos al interface de visualización de check_mk y vemos los servicios de nuestro Host habrá detectado y añadido el de AVP (antivirus Kaspersky).

check_mk_Service_Windows

La forma expuesta aquí es la más sencilla. Nos permite realizar muchas más cosas como tener en cuenta si el servicio está en auto o no, usar expresiones regulares para definir los servicios, usar tags para incluir / excluir equipos,… En la documentación oficial explica concisamente todos los ejemplos. Puedes hacer prácticamente lo que se te ocurra para chequear servicio Windows.

Pertenencia a grupos.

Para definir la pertenecía a grupos de determinados Host usamos la directiva de configuración “host_groups”. Ejemplo:

 host_groups = [( "Servidores_Windows", ["windows"], all_hosts),]

Explicación:

“Servidores_Windows”
Grupo de hosts de Nagios (debe existir en la configuración de Nagios !!!)
[“win”] Incluir en este grupo todos los equipos con el tag “win”…
all_hosts Del grupo (array) de all_host

Llegados a este punto por tanto necesitaremos tener creados los grupos en formato Nagios. Si estás iniciándote con estos artículos no tendrás ni idea así que rápidamente sería:

Crear un nuevo fichero:
/
opt/omd/sites/foo/etc/nagios/conf.d/grupos.cfg

Con el contenido:

define hostgroup{
hostgroup_name    Servidores_Windows
alias            Servidores Windows
}

Y ejecutar la recarga de los ficheros de config de Nagios con los comandos OMD (como el usuario de OMD recuerda).

OMD[foo]:~$ omd restart

Para aplicar los cambios, en este caso valdría con recargar la configuración de check_mk ya que no hemos modificado servicios a chequear si no definición de objetos de Nagios:
check_mk –R.

Aparecerá nuestro grupo en la vista “Hostgroups” con nuestro host.

Nagios_Grupos_Servidores

Como siempre, podemos ampliar información en la documentación de check_mk relativa a variables de configuración (sección “host_groups”).

Chequeos de procesos (Windows / Linux).

Podemos decirle también que nos chequee procesos activos, tanto en servidores Windows como en Linux/NIX. Hay que decirle que procesos tiene que incluir y en qué casos. Para ello se usa la directiva checks. Ejemplo:

# CHEQUEOS CONCRETOS DE PROCESOS LEVANTADOS
 checks = [
 # PARA Servidores Windows
 ( ["windows"], all_hosts, "ps", "Antivirus Kas", ( "avp.exe", 1, 1, 1, 1 ) ),
 ( ["windows"], all_hosts, "ps", "Explorer", ( "explorer.exe", 1, 1, 1, 1 ) ),
 ]

Cogiendo una de las líneas vemos la configuración:

( [“windows”], Indica que tags deben tener los Host para incluir el chequeo de este proceso.
all_hosts Indica sobre que grupo de Host vamos a buscar, en principio será siempre all_host.
“ps” Indicador fijo que define que chequeamos un proceso en ejecución.
“Antivirus Kas” El nombre con el que aparecerá el servicio chequeado en Nagios.
( “avp.exe”, 1, 1, 1, 1 ) ) Tupla que define el proceso a chequear, el resto de valores numéricos indican cuantas veces puede aparece min/max y para que valores será Warning/Critical. En este caso son procesos Windows que solo aparecen un vez y que hay que alertar en el momento que no aparezcan.

check_mk_procesos

Vemos que ha encontrado dos procesos ejecutándose por lo que debemos ajustar nuestra definición.

Ignorar chequeos.

Como comenté, por defecto check_mk tiene definido una serie de chequeos que incorporará siempre que los detecté en un Host. Mediante estas entradas podemos hacer que ignore ciertos chequeos para todos los equipos, algunos, por tags,…

Es muy importante inicialmente que los LOGs de Windows ya que por defecto añadirá todos los logs del equipo a chequear (Sistema, aplicación, AD) y nos ocasionará muchas alarmas. Posteriormente podemos comentar la línea para que lo haga pero sabiendo lo que nos vamos a encontrar.

ignored_services = [
 # IGNORA LOGS DE WINDOWS (chequeos “LOG” de todos los equipos con el tag ‘windows’
 ( [ "windows" ], all_hosts, [ "LOG" ] ),
 # OTROS
 # Ignora chequeo servicio DHCP Stats de todos los equipos con el tag ‘windows’
 ( [ "windows" ], all_hosts, [ "DHCP Stats" ] ),
 # Ignora chequeo fs home de todos los equipos con el tag ‘linux’
 ( [ "linux" ], all_hosts, [ "fs_/home$" ] )
 ]

Como vemos la sintaxis es muy sencilla. Podemos ser mucho más específicos e ignorar solo logs concretos, por expresiones regulares,…
Como siempre después de hacer cambios:
check_mk –O

OJO: Es muy “pijo” con los caracteres usados en el fichero de configuración. Es habitual que nos pueda dar errores al ejecutar el “-“R” relativos a esto dándonos la línea. Normalmente será un acento (eliminarlos), unas comillas o unas comillas dobles (borrarlas y ponerlas de nuevo, el copy/ paste cambia caracteres a veces). Tampoco nos los dejará usar ni en los comentarios..

Encontraremos mucha más información en la documentación en línea.

Si te interesan estos artículos y quieres saber que mas puedes hacer con check_mk no te pierdas:

Otros artículos de interés relacionados

12 thoughts on “Check_mk. Chequeos. Primeros pasos (II)

  1. francisco

    Buenos días tengo un sistema check_mk instalado gracias a tus explicaciones , “GRACIAS” , y tengo que monitorizar una serie de procesos de maquinas windows , he probado :

    # CHEQUEOS CONCRETOS DE PROCESOS LEVANTADOS
    checks = [
    # PARA Servidores Windows
    ( [“windows”], all_hosts, “ps”, “Antivirus Kas”, ( “avp.exe”, 1, 1, 1, 1 ) ),
    ( [“windows”], all_hosts, “ps”, “Explorer”, ( “explorer.exe”, 1, 1, 1, 1 ) ),
    ]

    Pero no me muestra nada ….

    Cual puede ser mi problema ? He relizado un cmk -I y luego un cmk -UR

    Reply
  2. ElDespistado

    Que tal Franciso.
    1.- Mira que procesos Windows está “viendo” check_mk. Puedes obtener una lista de todos los chequeos que obtiene cmk del servidor Windows (incluidos procesos) con: cmk -d servidor_win
    Echa un ojo a ver si están listados los procesos que buscas. Si no obtienes salida es que no puedes contactar con el agente check_mk en el host (Servicio levantado?, Firewall?)
    2.- El Host que quieres chequear… ¿tiene asignado el tag “windows”?

    Un saludo.

    Reply
  3. Eva

    Hola, dónde puedo añadir una descripción del host monitorado para que aparezca en la monitorizción?
    Por otra parte en los servicios, en el archivo config.mk por ejemplo :
    service_descriptions = {
    “RtcSrv” : “Live Communications Service
    }
    No me coje la descripción. El servicio sí, lo tengo incluído en el archivo winservices.mk

    Gracias por tu ayuda

    Reply
    1. eldespistado1 Post author

      Puedes añadir la propiedad “alias” al host que te valdrá para buscarlo y para usar la macro pero no te va a mostrar el host por alias por defecto en las vistas pero… PUEDES EDITARLAS para mostrar esa columna también o en lugar de la de Hostname!!!! :-). Un ejemplo:
      extra_host_conf[“alias”] = [
      (“Descricion extendida de mi localhost”, [“localhost”], ),
      ]
      Si editas una vista en el gui check_mk multisite podrás añadir una columna “host alias”.

      En cuanto al tema de los servicios me temo que no permite ese uso. Puedes renombrar uno de los servicios “tipo” de check_mk pero no hacer eso en concreto me temo. Con el siguiente ejemplo sustituyes los “service_XXXX” por “Servicio XXXX” pero no te permite cambiar el XXXXXX.
      service_descriptions = {
      “services” : “Servicio %s”,
      }
      Puedes probar también con “extra_service_conf” y cambiando columnas en las vistas….

      Un saludo

      Reply
  4. CGR

    Hola,

    He heredado la gestion de una maquina Centos con Nagios, pnp4nagios, navgvis, check_mk y centreon. Hace un año alguien actualizo el check_mk y desde entonces no se chequean correctamente los POOLs de DHCP. La he actualizado a la ultima version estable y sigue sin hacerlo.

    Cuando checkeo lo que obtengo del Servidor Windos con cmk -d SRV-WIN-DHCP:


    <<>>

    Cuentas MIB:
    Descubre = 201065.
    Ofrece = 200896.
    Solicita = 377018.
    Acks = 410853.
    Naks = 559.
    Declina = 0.
    Libera = 1188.
    ServerStartTime = mi‚rcoles, 15 de enero de 2014 18:16:15
    µmbitos = 5.
    Subred = 212.x.x.x.
    N§ de direcciones en uso = 138.
    N§ de direcciones libres = 367.
    N§ de ofertas pendientes = 0.

    He editado el scrit win_dhcp_pools en /check_mk/checks/win_dhcp_pools (ANSI por los caracteres especiales):


    win_dhcp_pools_stats_translate = {
    'Descubre': 'Discovers',
    'Ofrece': 'Offers',
    'Solicita': 'Requests',
    'Acks': 'Acks',
    'Naks': 'Nacks',
    'Declina': 'Declines',
    'Libera': 'Releases',
    'µmbitos': 'Scopes',
    'Subred': 'Subnet',
    'N§ de direcciones en uso': 'No. of Addresses in use',
    'N§ de direcciones libres': 'No. of free Addresses',
    'N§ de ofertas pendientes': 'No. of pending offers',
    }

    Pero cuando hago el inventario de los servicios que puede checkear:

    [root@xxxx ~]# cmk -II SRV-WIN-DHCP
    ad_replication 2 new checks
    df 1 new checks
    mem.win 1 new checks
    services 3 new checks
    uptime 1 new checks
    win_dhcp_pools.stats 1 new checks
    winperf_phydisk 1 new checks
    winperf_processor.util 1 new checks

    No se me ocurreo que puede ser lo que esté fallando, viendo que habia un win_dhcp_pools.old en la carpeta anterior, creia que seria esto, pero ya no se me ocurre que mas hacer

    Reply
    1. eldespistado1 Post author

      Que tal. Pues así en frio… no tengo a mano ningún servidor dhcp windows para probar.
      Yo miraría que el agente de check_mk en el servidor Windows esté actualizado a la misma versión que el check_mk del servidor y también el bat que tiene que ejecutar y que debe estar por el dir en Windows.
      La salida tiene pinta de estar mezclada con el otro plugin de dhcp (win_dhcp_pools.stats).Será ese el problema?? Echa un ojo a este FIX a ver si fuera eso…
      https://github.com/opinkerfi/check_mk/blob/master/agents/windows/plugins/win_dhcp_pools.bat

      Un saludo,

      Reply
    2. eldespistado1 Post author

      ¿Probaste a activar el debug de check_mk? Con este tipo de chequeos con problemas te suele dar información interesante.
      debug_log = “/var/log/nagios/check_mk_debug.log”

      Reply
  5. CGR

    Buenas,

    Revisando un poco en la maquina (es heredada y tenia unos archivos precomplidados) he encontrado que la forma correcta del escript es win_dchp_pools es:


    win_dhcp_pools_stats_translate = {
    ‘Descubre’: ‘Discovers’,
    ‘Ofrece’: ‘Offers’,
    ‘Solicita’: ‘Requests’,
    ‘Acks’: ‘Acks’,
    ‘Naks’: ‘Nacks’,
    ‘Declina’: ‘Declines’,
    ‘Libera’: ‘Releases’,
    ‘Subred’: ‘Subnet’,
    ‘Xmbitos’: ‘Scopes’,
    ‘NX de direcciones en uso’: ‘No. of Addresses in use’,
    ‘NX de direcciones libres’: ‘No. of free Addresses’,
    ‘NX de ofertas pendientes’: ‘No. of pending offers’,
    }

    Dejo el aporte por si a alguien más le resulta util.

    Gracias y un saludo.

    PS: No aparecia nada especial en los logs y el fix anterior ya lo revisé gracias

    Reply
  6. Alejandro

    Hola,
    Estoy usando WATO para configurar los servicios de Windows a chequear. Al agregar una regla para chequeos inventareados puedo ver todos los servicios activos al escanear el servidor. El único problema que estoy teniendo es con los Windows en Español ya que las descripciones de los servicios que poseen tildes salen mal:
    OK – Mensajer���entre sitios: running (start type is auto)

    Si bien para check_mk esto no es un problema (más allá de lo visual) al agregar el host en Nagvis el mapa se rompe con un error JSON invalid UTF8

    Cabe destacar que si hago un telnet al servidor en el puerto 6556 desde un equipo Windows la descripción se ve bien pero si lo hago desde un equipo Linux no.

    ¿Se te ocurre como solucionar este problema?

    Reply
  7. Jorge

    Hola, muy buena info, quería saber si existe la posibilidad de monitorear el ancho de banda de un switch cisco, pero el valor real con check_mk u otra opción, porque me muestra Traffic OK – Max. In = 1.4 MB/s, Max. Out = 4.0 MB/s , esto es en la interface web de nagios
    Pero en the dude me muestra que tengo 40/15 megas, en una determinada interface, ahora si lo veo con mrtg me muestra correctamente el consumo.
    Abrá que cambiar algún parámetro o puedo usar otra herramienta?

    Reply
    1. eldespistado1 Post author

      Normalmente esto que indicas suele ser un problema de usar snmp v1 que es lo que usa cmk por defecto. Snmp V2 permite contadores más grandes. Busca la regla que te permita forzarle a usar snmp v2

      Reply

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.