Pandora: Documentation es: Inventario

From Pandora FMS Wiki
Revision as of 10:24, 20 June 2018 by Agallardo (talk | contribs) (Asignar módulos remotos)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Volver a Indice de Documentacion Pandora FMS

1 Inventario

1.1 Introducción

La versión Enterprise de Pandora FMS permite mantener un inventario de los dispositivos monitorizados por Pandora FMS. Con dicho inventario es posible mantener un listado con la CPU, tarjetas, Memoria RAM, parches, software, etc … de los servidores de la compañía.

El inventario es independiente de la monitorización y puede ser obtenido de forma local ( a través de los agentes de Pandora FMS) o de forma remota.

1.2 Recogida de datos para el inventario

La recogida de los datos para el inventario de los sistemas se realiza de dos maneras de forma remota mediante módulos de inventario, a través de scripts integrados en Pandora FMS que ejecutan queries WMI, o scripts ejecutados a través de SSH con Expect o métodos similares.

Cuando la recogida de datos es local, con el agente de Pandora FMS, se realiza mediante plugins en el agente.

1.2.1 Módulos de inventario

Los módulos de inventario son módulos remotos que ejecutar un comando contra una máquina remota, dichos módulos funcionan de forma similar a un plugin. Los mismos módulos se pueden definir como "locales" cuando obtienen los datos a través de un agente.

1.2.2 Inventario remoto

1.2.2.1 Creación de módulos remotos

La creación por parte del administrador de un modulo de inventario remoto no es habitual, estos vienen "precargados" ya con Pandora FMS Enterprise. No obstante Pandora FMS le permite construir sus propios módulos de inventario o modificar los que ya existe por medio del editor de módulos de inventario.

Para crear un módulo remoto se va a Configuration > Inventory Modules donde aparecen todos los módulos de inventario que se han creado.



In1.png



Para Crear un módulo nuevo se pulsa en “Create”.



In2.png



A continuación se describen los campos que hay:

Name

Campo donde se pone el nombre del Módulo

Description

Campo donde se pone la descripción del Módulo

OS

Combo donde ese elige el Sistema Operativo para el que se crea el módulo.

Interpreter

Campo donde se pone el interprete de comandos que se usa en el módulo. Puede ser Shellscript, Perl u otro intérprete válido para el servidor de inventario que se ejecuta sobre un sistema Linux.

Format

Campo donde se ponen los campos separados por ; que devolverá el módulo.

Code

Código del módulo, generalmente es código Perl o ShellScript. Si fuera código binario necesitaría un procedimiento de carga diferente que ha de ser introducido mediante scripts auxiliares.

Template warning.png

Es muy importante elegir bien el sistema operativo porque al añadir módulos de inventario en un agente sólo aparecerán aquellos módulos en los que coincide el sistema operativo del módulo con el sistema operativo del agente

 


Una vez se ha creado el módulo se pulsa en “Create”.



In3.png



1.2.2.2 Edición de módulos remotos

Para editar un módulo remoto se va a Configuration > Inventory Modules donde aparecen todos los módulos de inventario que se han creado. Se pulsa sobre el módulo que se quiere editar o sobre el icono de la llave de la columna Action

In4.png



Aparece de nuevo la página de creación de módulo.



In5.png



Se modifican los campos deseados y se pulsa en el botón “Update”

1.2.2.3 Eliminación de módulos remotos

Para borrar un módulo remoto se va a Configuration > Inventory Modules donde aparecen todos los módulos de inventario que se han creado. Se pulsa en el icono de la papelera de la columna action del módulo que se quiere borrar.



In6.png



1.2.2.4 Asignar módulos remotos

La asignación de módulos de Inventario se realiza en el propio agente en la pestaña de administración del Agente.

Se pulsa sobre la pestaña Inventory.



In8.png



Aparece la página donde se pueden añadir los módulos de Inventario.



In9.png



A continuación, se describen los campos que hay que completar para añadir un módulo de inventario.

  • Module: Combo donde se elige el módulo de inventario que se quiere añadir. Sólo aparecerán los módulos cuyo Sistema Operativo coincide con el del agente.
  • Target: IP o nombre del servidor del que se quiere sacar el inventario.
  • Interval: Combo donde se elige el intervalo de tiempo en que se ejecutará el módulo de inventario.
  • Username: Usuario que se usara para ejecutar el módulo de inventario.
  • Password: Password del usuario que se usara para ejecutar el módulo de inventario.

Una vez completado el formulario se pulsa en “Add” para que el módulo se añada a los módulos de inventario.



In10.png



A partir de la versión v7.0NG.724, es posible definir campos en lugar de los de usuario y contraseña que existen normalmente. Para ello es necesario activar el siguiente checkbox:

Custom fields checkbox.png

Tras hacer esto, aparecerá un control para agregar campos nuevos:

Inventory module new custom field.png

En este control habrá que introducir el nombre deseado antes de añadirlo. Si indicamos que el campo va a pertenecer a una contraseña, el valor se guardará en base de datos de forma ofuscada.

Tras crear los campos, podremos darles un valor y añadir finalmente el módulo. Estos campos serán aplicados en orden de creación en la ejecución del script de inventario remoto.

Inventory module with custom fields.png



1.2.2.5 Edición de un módulo de inventario remoto asignado

Es posible editar los módulos de inventario, esta edición se realiza en la misma pagina donde se crean.

Para editar un módulo de inventario se pulsa en el nombre del módulo o en el icono llave que se ve en la imagen.



In20.png



1.2.2.6 Eliminación de un módulo de inventario remoto asignado

Es posible borrar los módulos se inventario, el borrado se realiza en la misma pagina donde se crean.

Para borrar un módulo de inventario se pulsa en el icono papelera que hay en la columna Action del módulo.

1.2.2.7 Ejemplo completo del proceso de creación de un módulo remoto de inventario

Supongamos que necesitamos sacar la lista de direcciones físicas de un adaptador de un servidor, en este caso de un servidor Unix. Esta información se obtiene generalmente con el uso del comando "arp -a -n", que si lo ejecutamos en el servidor nos da algo parecido a esto:

[email protected]:~$ arp -a -n
? (192.168.70.74) at 08:00:27:39:BF:6F [ether] on eth2
? (192.168.70.162) at B4:74:9F:94:98:84 [ether] on eth2
? (192.168.50.30) at 08:00:27:10:D1:1A [ether] on eth0
? (192.168.70.90) at 98:0C:82:54:2F:DE [ether] on eth2
? (192.168.50.2) at 08:00:27:EA:B2:FF [ether] on eth0
? (192.168.70.135) at C8:60:00:4B:96:67 [ether] on eth2
? (192.168.60.182) at FE:26:C5:91:B1:DA [ether] on tap0

Lo que buscamos es la dirección IP, la MAC y el nombre del adaptador.

En shellscript esto se podría hacer de la siguiente manera, usando " " para separar los campos:

arp -a -n | sort | grep -v incomplete | awk '{ print $2,$4,$7 }'

Ya tenemos prácticamente lo necesario para "importar" esta información en el servidor de Inventario Remoto de Pandora. Para ello usaremos de base el módulo de inventario remoto "CPU" y lo modificaremos ligeramente. Este script se conecta vía SSH con el servidor destino, y le ejecuta el comando. La salida del comando debe devolver cada campo separado por el carácter ";"

Llegado a este punto, necesita tener conocimientos programación para desarrollar o modificar los scripts. Los scripts de inventario remoto si bien no son complejos, necesita algo de conocimiento de perl, shellscript u otro lenguaje interpretado: también los podría hacer en java, c++, e invocar su ejecución desde el módulo, siempre y cuando devuelva los valores de cada campo definido separados por ";" y un salto de línea para cada dato.

#!/usr/bin/perl
##########################################################################
# pandora_linux_arptable.pl
##########################################################################
# Copyright (c) 2012 Sancho Lerena <[email protected]>
#           (c) 2012 Artica Soluciones Tecnologicas S.L
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
##########################################################################

use strict;
use warnings;

# Check for ssh
my $ssh_client = "ssh";
if (system("$ssh_client -v > /dev/null 2>&1") >> 8 != 255) {
	print "[error] $ssh_client not found.\n";
	exit 1;
}

if ($#ARGV < 1) {
	print "Usage: $0 <target ip> <username>\n";
	exit 1;
}

my $target_ip = $ARGV[0];
my $username = $ARGV[1];

# Retrieve ARP table
my ($ip, $mac, $iface);
my $command = '/usr/sbin/arp -a -n | sort | grep -v incomplete | awk \'{ print \$2,\$4,\$7 }\'';

my @info = `$ssh_client $username\@$target_ip "$command" 2> /dev/null`;
foreach my $line (@info) {
	if ($line =~ /^(.+)\s(.+)\s(.+)/) {
		$ip = $1;
		$mac = $2;
		$iface = $3;
		print "$ip;$mac;$iface\n";
	} 
}
 
exit 0;

Para que la conexión SSH funcione de forma automática, debe copiar la llave publica del usuario "root" del servidor de pandora en el servidor de destino. Imagine que va a ejecutar este comando en 192.168.50.10, realice estos pasos:

1. Cree la llave en el servidor de pandora como root.

ssh-keygen

2. Utilice el comando ssh-copy-id para copiar la llave publica el servidor de destino (192.168.50.10) con el usuario de destino (en este caso el usuario artica):

ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

(Tendrá que meter una vez la password del usuario "artica" en 192.168.50.10 para instalar la llave publica en el servidor destino)

3. Pruebe a conectar, debería conectar sin que le pregunte la password:

ssh [email protected]

4. Si ha llegado hasta aquí, el mismo proceso será el que siga el módulo de inventario, así que pruebe a ejecutarlo desde línea de comando, grabando el script anterior a disco (temporal.pl) y ejecutándolo con la IP y el usuario como parámetro:

perl temporal.pl 192.168.50.10 artica
(192.168.50.1);00:0f:ea:27:ba:f0;eth0
(192.168.50.3);08:00:27:98:f8:48;eth0

Fíjese en que el script llama remotamente a /usr/sbin/arp. El comando debe estar en ese path, sino cambie el script. También puede advertir que llamamos a nuestro script con el comando "perl", que usualmente esta en /usr/bin/perl. Esto es lo que debe configurar a la hora de definir el módulo, como puede ver a continuación:



Inventory sample1 .png



A la hora de aplicarlo a un agente, fíjese que el SO coincide. Si tiene diferentes sistemas operativos, deberá crear un módulo diferente para cada uno de ellos, porque el mismo código no funcionará.



Inventory sample2 .png



Una vez ejecutado este módulo, desde de la consola podemos acceder a una visualización similar a la siguiente:



Inventory sample3 .png



1.2.3 Inventario local, a través de los agentes software

Mediante los agentes software es posible obtener los datos de inventario de una máquina. Bastara con aplicar los módulos de inventario correspondiente en la configuración del agente software. Al igual que en los módulos remotos también es necesario añadir estos módulos como módulo de inventario en Configuration > Inventory modules.

1.2.3.1 Creación de módulos locales

Para crear un módulo local se va a Configuration > Inventory modules donde aparecen todos los módulos de inventario que se han creado. Se deben crear aquí todos los módulos que haya definirán en la configuración del Agente, también debe coincidir el SO asignado al agente en la consola con el del módulo creado.



In22.png



Para Crear un módulo nuevo se pulsa en “Create”.



In23.png



Para los módulos locales no es necesario completar todos los campos. A continuación se describen los campos que hay que completar:

  • 'Name‘: Campo donde se pone el nombre del Módulo
  • Description: Campo donde se pone la descripción del módulo
  • OS: Combo donde ese elige el Sistema Operativo para el que se crea el módulo.
  • Format: Campo donde se ponen los campos separados por; que devolverá el módulo.

Una vez se ha creado el módulo se pulsa en “Create”.



In24.png



1.2.3.2 Configuración de inventario local para agentes software

Para adaptar la configuración del agente software a la nueva versión debemos:

1. Desplegar la colección de scripts (descargar de la librería de Pandora FMS http://pandorafms.com/Library/Library/) a través de colecciones.

nota: A partir de la versión 7 estos plugins vienen por defecto con la instalación del agente, aunque vienen comentados en el archivo de configuración.

2. Configurar la ejecución programada de scripts de inventario local en el archivo pandora_agent.conf, agregando la siguiente información al final:

nota: A partir de la versión 7 no hay necesidad de añadir solo hay que descomententar los plugins ya existentes en el fichero de configuración del Agente.

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\cpuinfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\moboinfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\diskdrives.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\cdromdrives.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\videocardinfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\ifaces.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\monitors.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\printers.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\raminfo.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\software_installed.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\userslogged.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\productkey.vbs"
#module_crontab * 12-15 * * 1
#module_end

#module_begin
#module_plugin cscript.exe //B //t:20 "%PROGRAMFILES%\Pandora_Agent\util\productID.vbs"
#module_crontab * 12-15 * * 1
#module_end


1.2.3.3 Módulo de Inventario en sistemas Unix mediante agente software.

El módulo del agente software de Unix usa, de forma local, un plugin para recoger información sobre diferentes aspectos de la máquina, tanto de Software como de Hardware.

La sintaxis del módulo es la siguiente:

module_plugin inventory 1 cpu ram video nic hd cdrom software init_services filesystem users route

El módulo se compone de una línea con los siguientes parámetros:

  • Activation del modulo
" module_plugin inventory " 1 cpu ram video nic hd cdrom software init_services filesystem users route
  • Campo donde se establece cada cuántos días se ejecutará el módulo. Si es 0 el inventario es devuelto en cada ejecución del agente.
module_plugin inventory " 1 " cpu ram video nic hd cdrom software init_services filesystem users route
  • Campo donde se definen los objetos de inventario que se recogen.
module_plugin inventory 1 " cpu ram video nic hd cdrom software init_services filesystem users route "

Al igual que en el agente Windows, es posible recoger los siguientes objetos:

  • CPU: recoge información sobre las CPUs
  • ram: recoge información sobre los módulos de RAM.
  • video: recoge información sobre las tarjetas de Video.
  • nic: recoge información sobre las tarjetas de red, Network Interface Controlers.
  • hd: recoge información sobre los discos duros.
  • cdrom: recoge información sobre los dispositivos de CDROM
  • patches: recoge información sobre los parches instalados.
  • software: recoge información sobre el software instalado.
  • init_services: recoge información sobre los procesos de auto inicio.
  • filesystem: recoge información sobre las particiones del sistema.
  • users: recoge información sobre usuarios.
  • Route: recoge información sobre la tabla de rutas del sistema.

El plugin que recoge el inventario está en el directorio /etc/pandora/plugins

También se puede especificar simplemente que recoja toda la información disponible. En este ejemplo, recogerá diariamente toda la información de inventario:

# Plugin for inventory on the agent (Only Enterprise)
module_plugin inventory 1


Para activar el módulo de inventario simplemente hay que copiar el código descrito anteriormente en el fichero pandora_agent.conf del agente software. Esta activación se puede hacer de forma local en la máquina o de forma remota desde la configuración remota del agente.



In32.png


1.2.3.4 Asignar módulos locales

No es necesario activar los módulos en los Agentes definidos en la consola. Si los módulos se han creado en Configuration > Inventory modules, el SO coincide y está definida la ejecución en el archivo de configuración del Agente software. Los datos recolectados aparecerán directamente en la sección de view > invetory del Agente en la consola.

In33.png



1.2.3.5 Creación de módulos de inventario locales (Agente Software)

Además de los sistemas de inventario que vienen "de serie" en el agente, usted puede crear fácilmente, módulos de inventario para sistemas Unix y Windows.

Básicamente, tiene que crear un script que genere un XML con la siguiente estructura:

<inventory>
<inventory_module>
<name>INVENTORY_MODULE_NAME</name>
<type>generic_data_string</type>
<datalist>
    <data>DATA1;DATA2;DATA3....</data>
</datalist>
</inventory_module>
</inventory>

"INVENTORY_MODULE_NAME": deberá poner el mismo nombre del módulo que registro en los módulos de inventario en la consola de Pandora.

"DATA1;DATA2..." son los datos que desea sacar y que se han definido en el módulo de inventario.

Supongamos que quiere sacar una tabla de ARP, IP con sus interfaces (ver el ejemplo anterior, de módulos de inventario remotos). Esto utilizaremos el comando arp -a y limpiaremos la salida para obtener los datos deseados.

Esta vez lo vamos a desarrollar en Windows, el pequeño script "C:\tmp\windows_arp_inventory.bat" con la siguiente definición:


@echo off

echo ^<inventory^>
echo ^<inventory_module^>
echo ^<name^>ARP^</name^>
echo ^<type^>generic_data_string^</type^>
echo ^<datalist^>
arp -a | sort | grep "[0-9]"  | grep -v ":" | gawk "{ print \"^<data^>\" $1\";\"$2\";\"$3 \"^</data^>\" }"
echo ^</datalist^>
echo ^</inventory_module^>
echo ^</inventory^>

Ahora necesita modificar pandora_agent.conf, y añadir la siguiente linea:

module_plugin cmd.exe /C C:\tmp\windows_arp_inventory.bat

Template warning.png

Este script se ejecutará cada 5 minutos (por defecto el intervalo del agente). Si desea que se ejecute cada X tiempo tendrá que implementar esa lógica en el propio script o hacer uso de la Monitorización programada

 


Recuerde que para que la ejecución del script local pueda almacenar información de inventario debe tener definido un módulo de inventario en la consola, especificando el SO, nombre del módulo y los datos a almacenar separados por ";". No olvide, antes de reiniciar el agente de pandora, para que coja los cambios, crear el modulo de inventario en Pandora:



Inventory sample4 .png



Fíjese que, al ser un módulo local, no tiene relleno el campo "interprete" ni el de "código", aunque si el de Sistema Operativo.

Los resultados obtenidos, son iguales que los que obtuvimos para el equivalente de modulo remoto sobre Linux:



Inventory sample5 .png



En la librería online de módulos de Pandora (http://pandorafms.com) hay más módulos de inventario, tanto remotos como locales. También puede desarrollarse fácilmente los suyos como ha podido ver en este capítulo.

1.3 Visualización de datos para el inventario

Los datos de inventario que se han recogido de un sistema, ya sea de forma local o de forma remota, se pueden ver desde el propio agente o desde el menú de Inventario de la consola.

1.3.1 Ver datos de Inventario en el menú de Inventario

Desde Monitoring > Inventory es posible ver los datos de inventario de todos los agentes, realizar búsquedas y exportar los datos a un CSV.



In37.png



Los campos que se pueden usar para las búsquedas son los siguientes.

  • Group: combo donde se puede elegir el grupo de agentes por los que se quiere filtrar.
  • Module: combo donde se puede elegir el módulo de inventario por el que se quiere filtrar.
  • Agent: campo donde se puede escribir el nombre del agente por el que se quiere filtrar.
  • Search: campo donde se puede escribir un texto para realizar una búsqueda por todos los campos del inventario.

Con las búsquedas es posible ver los módulos de todos los agentes que tienen inventario, eligiendo all en las opciones de búsqueda y pulsando en “Search”.



In38.png



O un módulo concreto de todos los agentes con inventario, eligiendo el módulo y pulsando en “Search”.



In39.png



1.3.2 Fechas y cambios en el inventario

En la vista detallada del inventario de un agente, a través de un combo, podremos escoger la fecha del informe de inventario concreto que queremos ver:

Vista inventario diff.png

Si observamos que faltan fechas será probablemente porque no hay cambios en los datos respecto a la última ejecución de inventario. Es decir, Pandora solo almacena datos de inventario cuando estos cambian respecto a la última ejecución.

1.3.3 Exportar los datos de inventario a CSV

Desde Monitoring > Inventory es posible exportar los datos del inventario, resultado de un filtro, a un archivo CSV.

Se elige el filtro y una vez que haya datos se pincha en “Export CSV”.



In40.png



Se crea un archivo con los datos de inventario separados por punto y coma.

1.3.4 Diferencias entre versiones de inventario

Modo bloque

Desde la versión de Pandora 5.1 se puede mostrar visualmente las diferencias entre dos configuraciones, mostrándolo en dos columnas para ver las diferencias. El modo bloque especifica que el resultado de un módulo de inventario es un único elemento, en vez de interpretar cada línea como elementos diferentes del mismo tipo como se ha hecho en los módulos de inventario vistos anteriormente.

El modo bloque se configura al definir un módulo de inventario local o remoto:



Block mode setup.png




Cuando tenemos un módulo configurado con el modo bloque, nos permite ver la vista partida (para ver visualmente los cambios).



Diff inventory.png



En la vista en dos columnas se muestra las diferencias entre una versión del inventario y otra, e incluso se puede elegir la versión por fecha.



Pandora FMS - the Flexible Monitoring System - 2014-07-01 19.09.10.png



Recuerde que cada vez que se detecta un cambio en un módulo de inventario, se generará un evento.



Events inv.png



Volver a Índice de Documentación Pandora FMS