Cómo instalar el agente de Pandora FMS (para monitorización de equipo Linux) en un PC con sistema operativo Linux Debian 11. Usaremos apt-get y mostraremos las opciones básicas de configuración del agente. Indicamos cómo agregar una sonda/módulo/monitor de ping y de latencia (módulo de servidor) y otra de RAM usada (módulo de cliente). Monitorizaremos el estado de la RAM, CPU, número de procesos, espacio en unidades de disco, último usuario que inició sesión, etc.
- Instalar agente de Pandora FMS en Linux Debian 11.
- Configuración básica de agente de Pandora FMS en Linux Debian.
- Vista del agente Linux Debian 11 en la consola web del servidor Pandora FMS.
- Agregar módulo/sensor/sonda de servidor ping y latencia desde consola web Pandora FMS.
- Agregar módulo/sensor/sonda de cliente información de memoria RAM con script y módulo module_plugin.
Instalar agente de Pandora FMS en Linux Debian 11
Para instalar el agente de Pandora FMS en un equipo con Linux Debian 11 únicamente necesitaremos que el equipo tenga conexión a Internet y ejecutaremos el siguiente comando:
1 |
apt-get install pandorafms-agent |
Conectará con el repositorio y descargará el paquete de la última versión disponible. Escribiremos «S» y pulsaremos INTRO:
La instalación del agente de Pandora FMS, como vemos, es muy sencilla. En unos segundos habrá concluido.
Configuración básica de agente de Pandora FMS en Linux Debian
Una vez instalado el agente editaremos el fichero de configuración /etc/pandorafms/pandora_agent.conf:
1 |
nano /etc/pandorafms/pandora_agent.conf |
Y estableceremos, al menos, los siguientes valores:
- server_ip: IP del servidor de Pandora FMS al que se le enviarán los datos.
- debug: normalmente a valor 0, salvo que queramos depurar los datos enviados. Si establecemos este parámetro a valor 1, Pandora FMS almacenará en ficheros XML los datos enviados al servidor, para su depuración.
- interval: intervalo de tiempo entre cada comprobación de monitores y envío de datos al servidor. Por defecto 300 segundos (5 minutos).
- address: por defecto en «auto», es la IP del equipo cliente. Si no va a cambiar podemos establecerla manualmente en este parámetro.
- server_port: puerto por defecto para la conexión con el servidor y el envío de datos mediante tentacle. Por defecto 41121.
- transfer_mode: modo de conexión (protocolo) para envío de datos al servidor. Por defecto «tentacle». Admite ftp y ssh.
- remote_config: si disponemos de la versión de pago de Pandora FMS podremos usar el modo de configuración remota. Estableciendo este parámetro a valor 1, se podrá configurar el cliente desde el servidor. En nuestro caso, al ser versión community de Pandora FMS, estableceremos este parámetro a 0.
- Dejaremos los módulos que aparecen por defecto, para obtener información básica del cliente Linux Debian:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
module_begin module_name cpu_user module_type generic_data module_interval 1 module_exec vmstat 1 2 | tail -1 | awk '{ print $13 }' module_max 100 module_min 0 module_description User CPU Usage (%) module_min_warning 70 module_max_warning 90 module_min_critical 91 module_max_critical 100 module_unit % module_end module_begin module_name Load Average module_type generic_data module_exec cat /proc/loadavg | cut -d' ' -f1 module_description Average process in CPU (Last minute) module_end module_begin module_name Cache mem free module_type generic_data module_exec free -m | grep buffers/cache | awk '{print $4}' module_description Free cache memory in MB module_min_warning 500 module_max_warning 600 module_min_critical 100 module_max_critical 499 module_unit MB module_end module_begin module_name proctotal module_type generic_data module_exec ps -A | tail --lines=+5 | wc -l module_description Total processes module_min_warning 150 module_max_warning 249 module_min_critical 250 module_max_critical 300 module_unit processes module_end module_begin module_name sshDaemon module_type generic_proc module_exec ps -Af | grep sshd | grep -v "grep" | wc -l module_description Check ssh service module_end module_begin module_name LastLogin module_type async_string module_exec last | head -1 module_description Monitor last user loggin module_end # This plugin detects all disk partitions and monitor the free spaces module_plugin pandora_df |
Una de las grandes ventajas del sistema de monitorización Pandora FMS es que podremos monitorizar cualquier cosa que queramos del equipo, es muy flexible. Será suficiente con obtener esa información a monitorizar usando comandos linux o script y enviarla al servidor mediante un módulo (como los mostrados de ejemplo anteriormente).
Guardaremos los cambios realizados en el fichero pandora_agent.conf pulsando Control + O y cerraremos la edición con Control + X.
Ahora podremos reiniciar el servicio de Pandora Agent en el equipo Linux Debian para que se apliquen los cambios. Lo detenemos:
1 |
systemctl stop pandorafms-agent |
Lo iniciamos:
1 |
systemctl start pandorafms-agent |
Revisamos que el servicio está correctamente iniciado:
1 |
systemctp status pandorafms-agent |
Vista del agente Linux Debian 11 en la consola web del servidor Pandora FMS
Una vez que hayamos configurado e iniciado el demonio de Pandora Agent en el equipo cliente Linux Debian, en unos minutos, aparecerá automáticamente en el servidor de Pandora FMS. Si accedemos a la consola de administración web y lo buscamos (por el nombre o por la IP):
Por defecto, Pandora FMS monitorizará los siguientes módulos del agente Linux Debian:
- Espacio libre en los volúmenes.
- Uso de CPU.
- Usuario de último inicio de sesión en el servidor.
- Número total de procesos en ejecución.
- Carga de CPU en el último minuto.
- Verificación del estado del servicio SSH.
Agregar módulo/sensor/sonda de servidor ping y latencia desde consola web Pandora FMS
Para agregar un nuevo módulo (sensor/sonda/monitor) de servidor (ping, latencia, …) pulsaremos en «Gestionar»:
Pulsaremos en «Módulos»:
Elegiremos el tipo de módulo que crearemos, por ejemplo «Crear un nuevo módulo de servidor de red» y pulsaremos en «Crear»:
Para agregar el monitor de ping seleccionaremos «Network Management» y «Host Alive»:
Esto agregará un monitor básico de ping, que se realizará desde el servidor de Pandora FMS al agente (equipo Linux Debian) mediante la IP indicada en el agente (se puede modificar en este módulo):
Para agregar un sensor/módulo de latencia, elegiremos «Network Management» y «Host Latency»:
En el caso de la latencia podremos configurar los umbrales en los que queramos que pase a estado warning o crítico. Por ejemplo, para que pase a estado crítico si la latencia es superior a 25 introduciremos en Min. el valor 25 y en Máx. el valor 10000 (un valor que nunca supere):
De esta forma el módulo pasará a estado crítico si el valor de la latencia es 25 o superior.
Agregar módulo/sensor/sonda de cliente información de memoria RAM con script y módulo module_plugin
Para agregar un monitor desde el equipo cliente, por ejemplo obtener información del uso de la memoria RAM del equipo, seguiremos los siguientes pasos. En función de la distribución de Linux y de la versión del agente de Pandora FMS, puede que en la instalación ya nos haya creado una carpeta plugins con varios script para obtener información del equipo y módulos (CPU, uso de disco, procesos, RAM, etc.). Pero en determinadas distribuciones Linux y versiones del agente de Pandora FMS puede que no agregue algunos scripts. Por ello explicamos cómo agregarlos desde cero.
El instalador de Pandora Agent habrá creado una carpeta con los scripts en:
/usr/share/pandorafms/agent/plugins
En algunas versiones/distribuciones creará un enlace simbólico a esta carpeta en:
En el caso de la instalación realizada en Linux Debian 11, no se ha creado este enlace simbólico. Si bien no es necesario. Para ver los scripts de los que disponemos por defecto listaremos el contenido de esta carpeta:
En esta instalación no hay scripts para obtener información de la memoria RAM del equipo. Por ello, tendremos que crearlo manualmente. Podremos crear nosotros mismos el script o bien descargar alguno existente. En el sitio web de Pandora FMS hay varios ficheros de scripts para obtener información del uso de la memoria RAM del equipo, uno de ellos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
#!/bin/bash # Info about swap memory - all retrieved with one query, later it's going to be appropiately parsed MEM_INFO=`free -m | grep Mem:` # Info about swap memory - all retrieved with one query, later it's going to be appropiately parsed MEMAPP_INFO=`free -m | grep cache:` # Info about swap memory - all retrieved with one query, later it's going to be appropiately parsed SWP_INFO=`free -m | grep Swap:` # Info about memory - from the kernel's standpoint MEM_SPACE=`echo $MEM_INFO | awk '{print $2}'` MEM_USAGE=`echo $MEM_INFO | awk '{print $3}'` MEM_FREE=`echo $MEM_INFO | awk '{print $4}'` MEM_SHARED=`echo $MEM_INFO | awk '{print $5}'` MEM_BUFF=`echo $MEM_INFO | awk '{print $6}'` MEM_CACHE=`echo $MEM_INFO | awk '{print $7}'` MEM_USAGE100=`echo $MEM_USAGE $MEM_SPACE | awk '{if ($2>0) {print int(10000*$1/$2)/100} else {print 0}}'` MEM_BUFF100=`echo $MEM_BUFF $MEM_SPACE | awk '{if ($2>0) {print int(10000*$1/$2)/100} else {print 0}}'` MEM_CACHE100=`echo $MEM_CACHE $MEM_SPACE | awk '{if ($2>0) {print int(10000*$1/$2)/100} else {print 0}}'` # Info about memory - from the application's standpoint MEMAPP_USAGE=`echo $MEMAPP_INFO | awk '{print $3}'` MEMAPP_FREE=`echo $MEMAPP_INFO | awk '{print $4}'` MEMAPP_FREE100=`echo $MEMAPP_FREE $MEM_SPACE | awk '{if ($2>0) {print int(10000*$1/$2)/100} else {print 0}}'` # Info about swap SWP_SPACE=`echo $SWP_INFO | awk '{print $2}'` SWP_USAGE=`echo $SWP_INFO | awk '{print $3}'` SWP_USAGE100=`echo "$SWP_USAGE $SWP_SPACE" | awk '{print ($1*100/$2)}'` # Module to get the total RAM echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Total (MB)]]></name>" echo -e "\t<description><![CDATA[Total memory in megabytes]]></description>" echo -e "\t<type>async_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_SPACE]]></data>" #echo -e "\t<crontab>0 * * * *</crontab>"" echo -e "\t</module>" # Module to get the used RAM from the kernel standpoint echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Used (MB)]]></name>" echo -e "\t<description><![CDATA[Used memory in megabytes from the kernel standpoint]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_USAGE]]></data>" echo -e "\t</module>" # Module to get the free RAM from the kernel standpoint echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Free (MB)]]></name>" echo -e "\t<description><![CDATA[Free memory in megabytes from the kernel standpoint]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_FREE]]></data>" echo -e "\t</module>" # Module to get the shared RAM echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Shared (MB)]]></name>" echo -e "\t<description><![CDATA[Shared memory in megabytes]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_SHARED]]></data>" echo -e "\t</module>" # Module to get the RAM used by buffers echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Buffers (MB)]]></name>" echo -e "\t<description><![CDATA[Memory for buffers in megabytes]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_BUFF]]></data>" echo -e "\t</module>" # Module to get the RAM used by cache echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Cache (MB)]]></name>" echo -e "\t<description><![CDATA[Memory for cache in megabytes]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_CACHE]]></data>" echo -e "\t</module>" # Module to get the percentage of used RAM from the kernel standpoint echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Performance - Used (%)]]></name>" echo -e "\t<description><![CDATA[Percentage of used memory from the kernel standpoint]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>%</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>100</max>" echo -e "\t<min_warning>95</min_warning>" echo -e "\t<max_warning>98.99</max_warning>" echo -e "\t<min_critical>99</min_critical>" echo -e "\t<max_critical>100</max_critical>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_USAGE100]]></data>" echo -e "\t</module>" # Module to get the percentage of RAM used by buffers echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Performance - Buffers (%)]]></name>" echo -e "\t<description><![CDATA[Percentage of memory for buffers]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>%</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>100</max>" echo -e "\t<min_critical>0</min_critical>" echo -e "\t<max_critical>1</max_critical>" echo -e "\t<min_warning>1.01</min_warning>" echo -e "\t<max_warning>5</max_warning>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_BUFF100]]></data>" echo -e "\t</module>" # Module to get the percentage of RAM used by cache echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Performance - Cache (%)]]></name>" echo -e "\t<description><![CDATA[Percentage of memory for cache]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>%</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>100</max>" echo -e "\t<min_critical>0</min_critical>" echo -e "\t<max_critical>1</max_critical>" echo -e "\t<min_warning>1.01</min_warning>" echo -e "\t<max_warning>5</max_warning>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEM_CACHE100]]></data>" echo -e "\t</module>" # Module to get the used RAM from the applications standpoint echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: FAS Used (MB)]]></name>" echo -e "\t<description><![CDATA[Used memory in megabytes from the applications standpoint]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEMAPP_USAGE]]></data>" echo -e "\t</module>" # Module to get the free RAM from the applications standpoint echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: FAS Free (MB)]]></name>" echo -e "\t<description><![CDATA[Free memory in megabytes from the applications standpoint]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$MEM_SPACE</max>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEMAPP_FREE]]></data>" echo -e "\t</module>" # Module to get the percentage of free RAM from the applications standpoint echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Performance - FAS Free (%)]]></name>" echo -e "\t<description><![CDATA[Percentage of free memory from the applications standpoint]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>%</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>100</max>" echo -e "\t<min_critical>0</min_critical>" echo -e "\t<max_critical>5</max_critical>" echo -e "\t<min_warning>5.01</min_warning>" echo -e "\t<max_warning>15</max_warning>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$MEMAPP_FREE100]]></data>" echo -e "\t</module>" # Module to get the total swap space echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Total swap space (MB)]]></name>" echo -e "\t<description><![CDATA[Total swap in megabytes]]></description>" echo -e "\t<type>async_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$SWP_SPACE]]></data>" #echo -e "\t<crontab>0 * * * *</crontab>"" echo -e "\t</module>" # Module to get the used swap space echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Used swap space (MB)]]></name>" echo -e "\t<description><![CDATA[Used swap in megabytes]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>MB</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>$SWP_SPACE</max>" echo -e "\t<min_warning>100</min_warning>" echo -e "\t<max_warning>499</max_warning>" echo -e "\t<min_critical>500</min_critical>" echo -e "\t<max_critical>$SWP_SPACE</max_critical>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$SWP_USAGE]]></data>" echo -e "\t</module>" # Module to get the % of used swap space echo -e "\t<module>" echo -e "\t<name><![CDATA[Memory: Used swap space (%)]]></name>" echo -e "\t<description><![CDATA[Percentage of used swap space]]></description>" echo -e "\t<type>generic_data</type>" echo -e "\t<unit>%</unit>" echo -e "\t<min>0</min>" echo -e "\t<max>100</max>" echo -e "\t<min_warning>40</min_warning>" echo -e "\t<max_warning>89.9</max_warning>" echo -e "\t<min_critical>90</min_critical>" echo -e "\t<max_critical>100</max_critical>" echo -e "\t<disabled>0</disabled>" echo -e "\t<data><![CDATA[$SWP_USAGE100]]></data>" echo -e "\t</module>" |
Por supuesto, podremos modificar el script y personalizarlo a nuestro gusto para que obtenga más o menos datos. Cuando lo tengamos preparado, desde Linux, crearemos el fichero de script con el comando:
1 |
nano /usr/share/pandorafms/agent/plugins/memory_plugin |
En el fichero memory_plugin copiaremos y pegaremos el script anterior:
Guardaremos los cambios con Control + O y cerraremos con Control + W. Es conveniente establecer el atributo de ejecutable al script, con el comando:
1 |
chmod +x memory_plugin |
Lo comprobaremos antes de agregarlo a Pandora, debe funcionar ejecutándolo desde la línea de comandos, devolverá los valores establecidos en el script (con el formato propio XML de Pandora):
1 |
./memory_plugin |
Si el script funciona correctamente y devuelve los datos deseados, editaremos el fichero de configuración del agente de Pandora FMS para que ejecute este móludo de plugin:
1 |
nano /etc/pandorafms/pandora_agent.conf |
Agregaremos la siguiente línea:
1 |
module_plugin memory_plugin |
En cuanto reiniciemos el servicio del agente de Pandora en el equipo Linux, se ejecutará el módulo «memory_plugin» que ejecutará en la carpeta de plugin el fichero memory_plugin y el resultado obtenido en formato XML se enviará al servidor de Pandora FMS, mostrando los nuevos módulos (sensores/sondas) para este agente:
Si no nos interesa alguno de los módulos podremos o bien deshabilitarlo para que no se muestre, desde la consola web de pandora, en la gestión de módulos, pulsando en el icono de la bombilla (deshabilitar módulo):
Puede que haya módulos en estado «No inicializado» (color azul), esto puede ser por diversos motivos, el habitual es que el módulo no tenga efecto en el sistema operativo actual. Estos módulos, si no los necesitamos, los deshabilitaremos.
También podemos editar el script anterior y quitar el código que haga referencia a estos módulos que queramos deshabilitar, es otra forma más eficiente de quitar estos módulos. Dado que el deshabilitarlos en el servidor (con el icono de la bombilla) no impide que se ejecuten en el cliente.