miércoles, 12 de diciembre de 2012







Comentando un poco lo que logramos con este proyecto, en principio con nagios se logra tener un monitoreo de la cantidad de computadoras que necesitemos, este programa chequea servicios como la carga del cpu, el espacio en el disco, el estado del explorer.exe, etc.. estos servicios se agregan en unos de los txt's en forma manual, mediante codigo (ya nos meteremos en el tema mas adelante).
Por otro lado OCS permite tener como lo llaman ellos un inventario... esto es tener la información de hardware (como el modelo del microprocesador) y software (como las actualizaciones de windows) en un servidor... podemos tener la información de las maquinas que quisiéramos tan solo instalando un cliente en la maquina a la cual le pedimos la info.

Datos del servidor utilizado:

Se utilizo una notebook HP DV7 - 3067CL, con las siguientes especificaciones:

-AMD Turion II Ultra Dual-Core M600 2.40 Ghz
-Ati Radeon HD 4650 1GB
-HD 500 GB (7200RPM)
-Memoria RAM 4GB DDR2

Programas/paquetes a descargar: 

-Nagios 3.3.1
-Nagios plugins 1.4.15
-NagiosQL 3.1.1
-PHP5
-apache2
-PNP4
-NRPE
-NSClient ++ 0.3.9
-OCS Inventory NG Server 2.0.5
-OCS Inventory NG Agents 2.0.5

Comenzando con la monitorización por nagios nos guiamos en esta página:

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=nagios_nagiosql_pnp4nagios#04

De aca sacamos como instalar la base de nagios, nagiosql y PNP4, y asi poder ver las monitorizaciones que existen por defecto para el host de nagios, con sus respectivas graficas. No es mas que eso basicamente.
Luego si, nos fuimos a la parte donde más hay que configurar que es al establecer los datos de las máquinas que vamos a monitoriar, en este caso maquinas con windows.

http://nagios.sourceforge.net/docs/3_0/monitoring-windows.html

Comenzamos instalando el nsclient ++ en todas las maquinas windows que queriamos monitorear (descarga:
x32 http://files.nsclient.org/x-0.3.x_STABLE/NSClient%2B%2B-0.3.9-Win32.msi
x64 http://files.nsclient.org/x-0.3.x_STABLE/NSClient%2B%2B-0.3.9-x64.msi), el proceso de instalacion es facil:

Pantalla de bienvenida del asistente de instalación. Pulsamos Next.


Aceptamos la licencia GNUv2 y pulsamos Next.


Seleccionamos todo para instalar (por defecto). Pulsamos Next.


Creamos un fichero de configuración nuevo. Si ya teníamos instalado otra versión antigua de NSClient++ que usara archivos de configuración antiguos, debemos leer lo que nos pone aquí sobre los ficheros de configuración.


En esta ventana debemos poner la dirección IP del servidor Nagios donde vayamos a enviar los datos. La contraseña la dejamos en blanco. Si pusiéramos contraseña, deberíamos cambiar el comando check_nt del servidor nagios para que usara la contraseña que hemos puesto (añadir la opcion -s). Marcamos las opciones que se ven en pantalla. Pulsamos Next.


En las siguientes pantallas pulsamos Install para que se instale la aplicación y, después de la instalación de los ficheros, marcamos que se inicie el servicio y pulsamos Finish. Si queremos podemos donar algo al proyecto marcando la casilla correspondiente.




Por último comprobamos que el servicio está iniciado. Vamos a Inicio --> Click del Botón Derecho en Equipo --> Administrar --> Servicios y Aplicaciones --> Servicios. Vamos al servicio NSClient++ (x64)

En nuestro caso no estaba iniciado. Lo configuramos para que se inicie automáticamente y para que interactue con el escritorio. Después pulsamos Iniciar.




Ahora solo queda por editar el NSC.ini que esta en su respectiva carpeta de instalación (por defecto: C:\Archivos de programa\NSClient++) y ahi es donde hay que editarlo de manera que quede asi (archivo nsc.ini propio): 



[modules]
NRPEListener.dll
NSClientListener.dll
CheckWMI.dll
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
CheckEventLog.dll
CheckHelpers.dll
;# NSCLIENT++ MODULES
;# A list with DLLs to load at startup.
;  You will need to enable some of these for NSClient++ to work.
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
; *                                                               *
; * N O T I C E ! ! ! - Y O U   H A V E   T O   E D I T   T H I S *
; *                                                               *
; ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
FileLogger.dll
CheckSystem.dll
CheckDisk.dll
NSClientListener.dll
NRPEListener.dll
SysTray.dll
CheckEventLog.dll
CheckHelpers.dll
;CheckWMI.dll
CheckNSCP.dll
;
; Script to check external scripts and/or internal aliases.
;CheckExternalScripts.dll
;
; NSCA Agent if you enable this NSClient++ will talk to NSCA hosts repeatedly (so dont enable unless you want to use NSCA)
;NSCAAgent.dll
;
; LUA script module used to write your own "check deamon".
;LUAScript.dll
;
; RemoteConfiguration IS AN EXTREM EARLY IDEA SO DONT USE FOR PRODUCTION ENVIROMNEMTS!
;RemoteConfiguration.dll
; Check other hosts through NRPE extreme beta and probably a bit dangerous! :)
;NRPEClient.dll
; Extreamly early beta of a task-schedule checker
;CheckTaskSched.dll

[crash]
; Archive crash dump files if a crash is detected
;archive=1

; Submit crash reports to a crash report server (this overrrides archive)
;submit=0

; Restart service if a crash is detected
;restart=1

[Settings]
;# OBFUSCATED PASSWORD
;  This is the same as the password option but here you can store the password in an obfuscated manner.
;  *NOTICE* obfuscation is *NOT* the same as encryption, someone with access to this file can still figure out the 
;  password. Its just a bit harder to do it at first glance.
;obfuscated_password=Jw0KAUUdXlAAUwASDAAB
;
;# PASSWORD
;  This is the password (-s) that is required to access NSClient remotely. If you leave this blank everyone will be able to access the daemon remotly.
password=asd
;
;# ALLOWED HOST ADDRESSES
;  This is a comma-delimited list of IP address of hosts that are allowed to talk to the all daemons.
;  If leave this blank anyone can access the deamon remotly (NSClient still requires a valid password).
;  The syntax is host or ip/mask so 192.168.0.0/24 will allow anyone on that subnet access
;allowed_hosts=127.0.0.1/32
;
;# USE THIS FILE
;  Use the INI file as opposed to the registry if this is 0 and the use_reg in the registry is set to 1 
;  the registry will be used instead.
use_file=1
allowed_hosts=192.168.2.199
;
; # USE SHARED MEMORY CHANNELS
;  This is the "new" way for using the system tray based on an IPC framework on top shared memmory channels and events.
;  It is brand new and (probably has bugs) so dont enable this unless for testing!
;  If set to 1 shared channels will be created and system tray icons created and such and such...
;shared_session=0


[log]
;# LOG DEBUG
;  Set to 1 if you want debug message printed in the log file (debug messages are always printed to stdout when run with -test)
;debug=1
;
;# LOG FILE
;  The file to print log statements to
;file=nsclient.log
;
;# LOG DATE MASK
;  The format to for the date/time part of the log entry written to file.
;date_mask=%Y-%m-%d %H:%M:%S
;
;# LOG ROOT FOLDER
;  The root folder to use for logging.
;  exe = the folder where the executable is located
;  local-app-data = local application data (probably a better choice then the old default)
;root_folder=exe


[NSClient]
;# ALLOWED HOST ADDRESSES
;  This is a comma-delimited list of IP address of hosts that are allowed to talk to NSClient deamon.
;  If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# NSCLIENT PORT NUMBER
;  This is the port the NSClientListener.dll will listen to.
port=12489
;
;# BIND TO ADDRESS
;  Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
;  Leaving this blank will bind to all avalible IP adresses.
;bind_to_address=
;
;# SOCKET TIMEOUT
;  Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
;socket_timeout=30

[NRPE]
;# NRPE PORT NUMBER
;  This is the port the NRPEListener.dll will listen to.
;port=5666
;
;# COMMAND TIMEOUT
;  This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
;command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
;  This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
;allow_arguments=0
;
;# COMMAND ALLOW NASTY META CHARS
;  This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'"\[]{}) characters in arguments.
;allow_nasty_meta_chars=0
;
;# USE SSL SOCKET
;  This option controls if SSL should be used on the socket.
;use_ssl=1
;
;# BIND TO ADDRESS
;  Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
;  Leaving this blank will bind to all avalible IP adresses.
; bind_to_address=
;
;# ALLOWED HOST ADDRESSES
;  This is a comma-delimited list of IP address of hosts that are allowed to talk to NRPE deamon.
;  If you leave this blank the global version will be used instead.
;allowed_hosts=
;
;# SCRIPT DIRECTORY
;  All files in this directory will become check commands.
;  *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=scripts\
;
;# SOCKET TIMEOUT
;  Timeout when reading packets on incoming sockets. If the data has not arrived withint this time we will bail out.
;socket_timeout=30

[Check System]
;# CPU BUFFER SIZE
;  Can be anything ranging from 1s (for 1 second) to 10w for 10 weeks. Notice that a larger buffer will waste memory 
;  so don't use a larger buffer then you need (ie. the longest check you do +1).
;CPUBufferSize=1h
;
;# CHECK RESOLUTION
;  The resolution to check values (currently only CPU).
;  The value is entered in 1/10:th of a second and the default is 10 (which means ones every second)
;CheckResolution=10
;
;# CHECK ALL SERVICES
;  Configure how to check services when a CheckAll is performed.
;  ...=started means services in that class *has* to be running.
;  ...=stopped means services in that class has to be stopped.
;  ...=ignored means services in this class will be ignored.
;check_all_services[SERVICE_BOOT_START]=ignored
;check_all_services[SERVICE_SYSTEM_START]=ignored
;check_all_services[SERVICE_AUTO_START]=started
;check_all_services[SERVICE_DEMAND_START]=ignored
;check_all_services[SERVICE_DISABLED]=stopped

[External Script]
;# COMMAND TIMEOUT
;  This specifies the maximum number of seconds that the NRPE daemon will allow plug-ins to finish executing before killing them off.
;command_timeout=60
;
;# COMMAND ARGUMENT PROCESSING
;  This option determines whether or not the NRPE daemon will allow clients to specify arguments to commands that are executed.
;allow_arguments=0
;
;# COMMAND ALLOW NASTY META CHARS
;  This option determines whether or not the NRPE daemon will allow clients to specify nasty (as in |`&><'"\[]{}) characters in arguments.
;allow_nasty_meta_chars=0
;
;# SCRIPT DIRECTORY
;  All files in this directory will become check commands.
;  *WARNING* This is undoubtedly dangerous so use with care!
;script_dir=c:\my\script\dir

[Script Wrappings]
vbs=cscript.exe //T:30 //NoLogo scripts\lib\wrapper.vbs %SCRIPT% %ARGS%
ps1=cmd /c echo scripts\%SCRIPT% %ARGS%; exit($lastexitcode) | powershell.exe -command -
bat=scripts\%SCRIPT% %ARGS%

[External Scripts]
;check_es_long=scripts\long.bat
;check_es_ok=scripts\ok.bat
;check_es_nok=scripts\nok.bat
;check_vbs_sample=cscript.exe //T:30 //NoLogo scripts\check_vb.vbs
;check_powershell_warn=cmd /c echo scripts\powershell.ps1 | powershell.exe -command -

[External Alias]
alias_cpu=checkCPU warn=80 crit=90 time=5m time=1m time=30s
alias_cpu_ex=checkCPU warn=$ARG1$ crit=$ARG2$ time=5m time=1m time=30s
alias_mem=checkMem MaxWarn=80% MaxCrit=90% ShowAll=long type=physical type=virtual type=paged type=page
alias_up=checkUpTime MinWarn=1d MinWarn=1h

alias_disk=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED
alias_disk_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED ignore-unreadable
alias_volumes=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED
alias_volumes_loose=CheckDriveSize MinWarn=10% MinCrit=5% CheckAll=volumes FilterType=FIXED ignore-unreadable 

alias_service=checkServiceState CheckAll
alias_service_ex=checkServiceState CheckAll "exclude=Net Driver HPZ12" "exclude=Pml Driver HPZ12" exclude=stisvc
alias_process=checkProcState "$ARG1$=started"
alias_process_stopped=checkProcState "$ARG1$=stopped"
alias_process_count=checkProcState MaxWarnCount=$ARG2$ MaxCritCount=$ARG3$ "$ARG1$=started"
alias_process_hung=checkProcState MaxWarnCount=1 MaxCritCount=1 "$ARG1$=hung"

alias_event_log=CheckEventLog file=application file=system MaxWarn=1 MaxCrit=1 "filter=generated gt -2d AND severity NOT IN ('success', 'informational') AND source != 'SideBySide'" truncate=800 unique descriptions "syntax=%severity%: %source%: %message% (%count%)"

alias_file_size=CheckFiles "filter=size > $ARG2$" "path=$ARG1$" MaxWarn=1 MaxCrit=1 "syntax=%filename% %size%" max-dir-depth=10
alias_file_age=checkFile2 filter=out "file=$ARG1$" filter-written=>1d MaxWarn=1 MaxCrit=1 "syntax=%filename% %write%"

alias_sched_all=CheckTaskSched "filter=exit_code ne 0" "syntax=%title%: %exit_code%" warn=>0
alias_sched_long=CheckTaskSched "filter=status = 'running' AND most_recent_run_time < -$ARG1$" "syntax=%title% (%most_recent_run_time%)" warn=>0
alias_sched_task=CheckTaskSched "filter=title eq '$ARG1$' AND exit_code ne 0" "syntax=%title% (%most_recent_run_time%)" warn=>0

alias_updates=check_updates -warning 0 -critical 0

check_ok=CheckOK Everything is fine!

[Wrapped Scripts]
;check_test_vbs=check_test.vbs /arg1:1 /arg2:1 /variable:1
;check_test_ps1=check_test.ps1 arg1 arg2
;check_test_bat=check_test.bat arg1 arg2
;check_battery=check_battery.vbs
;check_printer=check_printer.vbs
;check_updates=check_updates.vbs


; [includes]
;# The order when used is "reversed" thus the last included file will be "first"
;# Included files can include other files (be carefull only do basic recursive checking)
;
; myotherfile.ini
; real.ini


[NSCA Agent]
;# CHECK INTERVALL (in seconds)
;   How often we should run the checks and submit the results.
;interval=5
;
;# ENCRYPTION METHOD
;   This option determines the method by which the send_nsca client will encrypt the packets it sends 
;   to the nsca daemon. The encryption method you choose will be a balance between security and 
;   performance, as strong encryption methods consume more processor resources.
;   You should evaluate your security needs when choosing an encryption method.
;
; Note: The encryption method you specify here must match the decryption method the nsca daemon uses 
;       (as specified in the nsca.cfg file)!!
; Values:
; 0 = None (Do NOT use this option)
; 1 = Simple XOR  (No security, just obfuscation, but very fast)
;   2 = DES
;   3 = 3DES (Triple DES)
; 4 = CAST-128
; 6 = xTEA
; 8 = BLOWFISH
; 9 = TWOFISH
; 11 = RC2
; 14 = RIJNDAEL-128 (AES)
; 20 = SERPENT
;encryption_method=14
;
;# ENCRYPTION PASSWORD
;  This is the password/passphrase that should be used to encrypt the sent packets. 
;password=
;
;# BIND TO ADDRESS
;  Allows you to bind server to a specific local address. This has to be a dotted ip adress not a hostname.
;  Leaving this blank will bind to "one" local interface.
; -- not supported as of now -- 
;bind_to_address=
;
;# LOCAL HOST NAME
;  The name of this host (if empty "computername" will be used.
;hostname=
;
;# NAGIOS SERVER ADDRESS
;  The address to the nagios server to submit results to.
;nsca_host=192.168.0.1
;
;# NAGIOS SERVER PORT
;  The port to the nagios server to submit results to.
;nsca_port=5667
;

;# CHECK COMMAND LIST
;  The checks to run everytime we submit results back to nagios
;  Any command(alias/key) starting with a host_ is sent as HOST_COMMAND others are sent as SERVICE_COMMANDS
;  where the alias/key is used as service name.
;
[NSCA Commands]
;my_cpu_check=checkCPU warn=80 crit=90 time=20m time=10s time=4
;my_mem_check=checkMem MaxWarn=80% MaxCrit=90% ShowAll type=page
;my_svc_check=checkServiceState CheckAll exclude=wampmysqld exclude=MpfService
;host_check=check_ok

;# REMOTE NRPE PROXY COMMANDS
;  A list of commands that check other hosts.
;  Used by the NRPECLient module
[NRPE Client Handlers]
check_other=-H 192.168.0.1 -p 5666 -c remote_command -a arguments

;# LUA SCRIPT SECTION
;  A list of all Lua scripts to load.
;[LUA Scripts]
;scripts\test.lua


Solo que en la parte de "setting" variara en el "use this fail" la IP del servidor nagios y tambien variara la password (se recomienda poner password debido a que es posible que tire un error llamado ERROR password) que le vayan a poner, tambien en la parte settings.

Ahora si terminamos la parte de configuración en las maquinas windows a monitorear, ahora vamos por la parte de configuracion por parte del servidor nagios, en nuestro caso con UBUNTU 11.10.

Editaremos en la ruta /srv/nagios/etc/objects el archivo windows.cfg, definiendo el host con su respectiva IP
Ejemplo:

define host{

 use  windows-server ; Inherit default values from a Windows server template (make sure you keep this line!)

 host_name  winserver

 alias  My Windows Server

 address  192.168.2.199

 }

Tambien en este archivo definiremos los servicios a monitorizar, como por ejemplo la carga del micro donde en estos numeros "5,80,90" indicamos los porcentajes de carga 5%, 80% y 90% (CPULOAD), y asi otros servicios, nosotros establecimos los siguientes:

define service{

 use   generic-service

 host_name   winserver

 service_description NSClient++ Version

 check_command  check_nt!CLIENTVERSION

 }

define service{

 use   generic-service

 host_name   winserver

 service_description Uptime

 check_command  check_nt!UPTIME

 }
define service{

 use   generic-service

 host_name   winserver

 service_description CPU Load

 check_command  check_nt!CPULOAD!-l 5,80,90

 }
define service{

 use   generic-service

 host_name   winserver

 service_description Memory Usage

 check_command  check_nt!MEMUSE!-w 80 -c 90

 }
define service{

 use   generic-service

 host_name   winserver

 service_description C:\ Drive Space

 check_command  check_nt!USEDDISKSPACE!-l c -w 80 -c 90

 }
define service{

 use   generic-service

 host_name   winserver

 service_description W3SVC

 check_command  check_nt!SERVICESTATE!-d SHOWALL -l W3SVC

 }


Luego editaremos el archivo llamado commands.cfg situado en la misma ruta que windows.cfg, aqui en la parte de 'check_nt' editaremos la linea command_line, por ejemplo:

command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s asd -v $ARG1$ $ARG2$

aqui es donde establecemos la password que anteriormente indicamos en la máquina windows a monitorear en el NSC.ini.

y asi nos tendria que mostrar en nuestra página nagios (http://localhost/nagios), colocando el respectivo URL en el navegador, nos tendria que mostrar los respectivos servicios con un OK si estaba todo bien, aqui una screen de nuestro nagios funcionando:




OCS INVENTORY


Ahora pasaremos a explicar como hicimos para hacer funcionar OCS Inventory, (primero lo descargaremos : https://launchpad.net/ocsinventory-windows-agent/2.0/2.0.5/+download/OCSNG-Windows-Agent-2.0.5.zip) la pagina que se utilizo fue:

http://www.latindevelopers.com/articulos/misc/instalar-ocs-inventory.php

donde no es muy complicada su instalación si seguimos los pasos. Pasaremos a explicar el proceso a seguir en las maquinas windows a las cuales queremos pedir la información para el inventario:
Una vez descargado, ejecutaremos el OCS-NG-Windows-Agent-Setup.exe y le daremos siguiente (next) hasta llegar a la siguiente pantalla:



Ahi en server URL pondremos como aparece nuestra ip del servidor nagios y a continuacion lo que quieran nosotros dejamos el ocsinventory, aunque en la foto pusieron otra cosa. Seguiremos dandole al next:

Aqui indicaremos el proxy (en nuestro caso none), la address que es la IP del servidor nagios, (la que indicamos anteriormente en una parte de la URL), en el puerto pondremos "80", y lo opcional lo dejaremos en blanco. Y asi le daremos next hasta terminar con la instalacion. Ya con esto tendria que funcionar perfectamente y detectar en el servidor todos los datos de las pc establecidas en los usuarios creados en el OCS del servidor (User/add new user).

Aca unas imagenes de nuestro inventario con dos máquinas:



Integrantes del grupo: Julián Gómez y Martin Nieto.

Escuela/Curso: Instituto Industrial Luis.A Huergo/6to Computadoras '12.
Materia: Sistemas de procesamiento.
Profesor: Juan Jose Lopez.

http://huergo.edu.ar/