Monitoring Weblogic with Munin

Primero de todo tenemos que extraer los datos de HEAP, CPU y Daemons & Threads del adminserver de nuestro dominio Weblogic. Posteriormente dejamos estos datos en un fichero para que el script de munin (3 en total) recoja dichos datos y sean enviados al servidor.

Extraer datos de Weblogic.

Para hacer esto usaremos el conocido jython. Para hacerlo crearemos un script en el cron que se ejecute cada 5 min;

 

crontab -l

*/5 * * * * /usr/share/munin/scripts/weblogic_plugin.sh > /dev/null 2>&1

 

Este script se conectará al Admin, ira por cada uno de los managed server (incluso el Admin). Y sacara los datos dejándolos en un fichero de texto. En nuestro caso;

/wls/export_wls_status.sh

El script weblogic_plugin.sh es;

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN1.py  > /wls/export_wls_status

/opt/jrmc/bin/java -cp /opt/bea/wls/weblogic.jar weblogic.WLST /usr/share/munin/scripts/weblogic_py_script_DOMAIN2.py >> /wls/export_wls_status

 

Nota!!

Quizás tendréis que modificar el directorio del binario de java (/opt/jrmc/bin/) así como del fichero weblogic.jar (/opt/bea/wls/) en función de vuestra configuración.

 

Este script de cron sacará todos los datos, pero el que realmente se conecta al Weblogic es el script weblogic_py_DOMAIN.py Este script es;

username = ‘usuario’

password = ‘password’

URL=’t3://localhost:1111′

connect(username,password,URL)

domainConfig()

domini=cmo.getName()

serverList=cmo.getServers();

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

for server in serverList:

name=server.getName()

cd(name)

serverState=cmo.getState()

cd(“/ServerRuntimes/”+server.getName()+”/JVMRuntime/”+server.getName())

sizeHP=cmo.getHeapSizeCurrent()

usedHP=cmo.getUsedHeap()

proces=cmo.getAllProcessorsAverageLoad()

timegc=cmo.getLastGCEnd()

daemon=cmo.getNumberOfDaemonThreads()

thread=cmo.getTotalNumberOfThreads()

 

print domini,’PRO’,  name,’SizeHPWLS ‘,sizeHP

print domini,’PRO’,  name,’UsedHPWLS ‘,usedHP

print domini,’PRO’,  name,’ProcesWLS ‘,proces

print domini,’PRO’,  name,’TimeGCWLS ‘,timegc

print domini,’PRO’,  name,’DaemonWLS ‘,daemon

print domini,’PRO’,  name,’ThreadWLS ‘,thread

 

domainConfig()

domainRuntime()

cd(‘/ServerLifeCycleRuntimes/’)

 

Una vez tenemos los datos en un fichero de texto podremos tratarlo. Dejo un ejemplo de cómo se queda el fichero con los datos:

 

DOMAIN1 PRO AdminServer SizeHPWLS  536870912

DOMAIN1 PRO AdminServer UsedHPWLS  454807648

DOMAIN1 PRO AdminServer ProcesWLS  0.0806008984095334

DOMAIN1 PRO AdminServer TimeGCWLS  1380632745493

DOMAIN1 PRO AdminServer DaemonWLS  51

DOMAIN1 PRO AdminServer ThreadWLS  52

DOMAIN1 PRO DOMAIN1_01 SizeHPWLS  1610612736

DOMAIN1 PRO DOMAIN1_01 UsedHPWLS  1199548792

DOMAIN1 PRO DOMAIN1_01 ProcesWLS  0.08062796813666061

DOMAIN1 PRO DOMAIN1_01 TimeGCWLS  1380629744340

DOMAIN1 PRO DOMAIN1_01 DaemonWLS  42

DOMAIN1 PRO DOMAIN1 _01 ThreadWLS  43

 

Para tratar el fichero crearemos un script en /usr/share/munin/plugins/ con el nombre que se quiera, en mi caso MANAGED_DOMAIN1_HEAP

El fichero básicamente hace un grep del dato que se quiera y lo devuelve. Para el HEAP busca SizeHPWLS, para daemons y threads DaemonWLS  y ThreadWLS y para CPU busca ProcesWLS

 

#!/bin/sh

case $1 in

config)

cat <<‘EOM’

graph_title Managed Servers Heap DOMAIN1_1

graph_vlabel HEAP USE/MAX

DOMAIN1_1_Size.label DOMAIN1_1 Max

DOMAIN1_1_Use.label DOMAIN1_1 Use

graph_scale yes

graph_category weblogic

graph_info Grafica Weblogic DOMAIN1_1 Heap Managed Servers

EOM

exit 0;;

esac

echo -n “P DOMAIN_1_Size.value ”

grep SizeHPWLS /wls/export_wls_status | grep DOMAIN1_1 | awk ‘{print $5}’

echo -n ” DOMAIN_1_Use.value ”

grep UsedHPWLS /wls/export_wls_status | grep DOMAIN1_1| awk ‘{print $5}’

 

Creamos el enlace simbólico;

cd /etc/munin/plugins

ln –s MANAGED_DOMAIN1_HEAP  /usr/share/munin/plugins/MANAGED_DOMAIN1_HEAP

Reiniciamos el agente

/etc/init.d/munin-node restart

Y en unos minutos ya lo tenemos en nuestro servidor

 

HEAP

Descarga de scripts: Weblogic & Munin Scripts

 

Nagios Operations Dashboard

Buscando cosas de nagios he encontrado un Nagios Operations Dashboard

Es un dashboard pensado para entornos de Operación. Simplicidad al maximo.  Muestra solo las alertas Critical y Warning

Este Dashboard se basa en 2 ficheros;

nagios.php (que te muestra la web)

nagios_get.php (que revisa el estado de Nagios por el fichero status.dat, este es llamado por nagios.php)

Lo unico que tenemos que hacer es modificar el fichero nagios_get.php indicando donde tenemos el fichero status.dat

En la sección nagios dejo colgada la versión para la web. En caso de tener alguna alerta aparecerá en dicha sección Link

Dejo aqui un link de descarga del software dash y su web oficial

P.D. Parece que hay una versión 2 de esta herramienta, pero esta nueva versión es para Nagios con Mysql, ya que la ultima usa el status.dat. Nueva Versión

Nagios 3.2.3 + Nagios Theme + Cacti en Debian 6 Squeeze

Nagios

Instalamos Apache, PHP y librerias;
 
apt-get install apache2 libapache2-mod-php5 build-essential php5 libgd-graph-perl postfix
 
Creamos los usuarios y grupos;
 
/usr/sbin/useradd -m -s /bin/bash nagios
passwd nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -a -G nagcmd nagios
/usr/sbin/usermod -a -G nagcmd www-data
 
Descargamos el software de Nagiosmkdir ~/downloads
 
mkdir ~/downloads
cd ~/downloads
Compilamos e instalamos el software
 
tar xzf nagios-3.2.3.tar.gz
cd nagios-3.2.3
./configure –with-command-group=nagcmd
make all
make install
make install-init
make install-config
make install-commandmode
 
Editamos el fichero de contactos modificando el email definido actualmente por el nuestro;
 
vim /usr/local/nagios/etc/objects/contacts.cfg
 
define contact{
contact_name     nagiosadmin             ; Short name of user
use                generic-contact         ; Inherit default values from generic-contact template (defined above)
alias              Nagios Admin            ; Full name of user
email             nagios@osties.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
Seguimos con la instalación;
 
make install-webconf
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
/etc/init.d/apache2 reload
cd ~/downloads
tar xzf nagios-plugins-1.4.11.tar.gz
cd nagios-plugins-1.4.11
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install
 
Lo configuramos para iniciarse con el sistema;
 
ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios
 
El siguiente comando se utuliza para ver si el nagios (binario) funciona correctamente con el nagios.cfg (similar al apache2ctl -t en Apache) Asi veremos si funcionan nuestras modificaciiones
 
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
/etc/init.d/nagios start
 
Ya podemos acceder a nuestro servidor http://pre.osties.com/nagios/ User:nagiosadmin
Una virtud de Nagios no es su entorno grafico. Por eso vamos a modificarle el frontend.
cd ~/downloads
unzip vautour_style.zip -d ./vautour
cp -Rfa /usr/local/nagios/share /usr/local/nagios/share_OLD
cp -Rfa vautour/* /usr/local/nagios/share/
 
Ahora ya tenemos un Nagios mas “visible”.

CACTI:

En el caso del cacti, el procedimiento es el mismo que en Debian 5 Lenny. Dejo aqui el mismo procedimiento que ya colgue en su dia para Debian 5.
apt-get install mysql-server rrdtool snmp
 
Activaremos la extensión para el SNMP añadiendo la siguientes lineas;
 
 
vim /etc/php5/conf.d/snmp.ini
 
; Enable snmp extension module
 
extension=snmp.so
file_uploads = On
vim /etc/apache2/mods-enabled/php5.conf (Añadimos o modificamos los siguientes campos)
 
# PHP is an HTML-embedded scripting language which attempts to make it
 # easy for developers to write dynamically generated webpages.
 
LoadModule php5_module modules/libphp5.so
 
# Cause the PHP interpreter to handle files with a .php extension.
 
AddHandler php5-script .php
 AddType text/html .php
 # Add index.php to the list of files that will be served as director
# indexes.
 
DirectoryIndex index.php
 
vim /etc/apache2/httpd.conf
 
Include conf.d/*.conf
Vamos  a preparar la MySQL para la instalación de CACTI;
 
 
mysqladmin -u root –p create cacti
cd /tmp
tar xzvf cacti-0.8.7g.tar.gz
mv cacti-0.8.7g/var/www/cacti
cd /var/www/cacti/
mysql -u root -p cacti < cacti.sql
adduser cacti
mysql -u root -p mysql
mysql> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY ’somepassword’;
 
mysql> flush privileges;
 mysql> quit
 
 
Agregamos las siguientes lineas;
 
 
vim include/config.php
$database_type = “mysql”;
 $database_default = “cacti”;
 $database_hostname = “localhost”;
 $database_username = “cacti”;
 $database_password = “cacti”;
Con los passwords que hemos puesto y el usuario que toca.
chown -R cacti log
chown -R cacti rra
Agregamos;
vim /etc/crontab
*/5 *   * * *   cacti   php /var/www/cacti/poller.php > /dev/null 2>&1
Nos conectamos con http://pre.osties.com/cacti y pulsamos Next 2 veces y Finish
Cacti
Cacti
Cacti Resumen Instalación
Cacti Login
Nos logamos como Admin y passwd : admin. Luego cambiamos el password y ya podremos añadir los hosts
Ya tenemos nuestro entorno de gráficas ;)
Cacti Inside

Nagios + Cacti + MySQL + PHPMyAdmin + Centreon

Vamos a realizar la instalación de un sistema NAGIOS (3.2.1) con sus Plugins (1.4.14), PHP (5),  gráficas Cacti (0.8.7e), sistema CENTREON (2.1.5) para control GUI de Nagios, PHPMyAdmin (3.3.2) y MySQL (5.0.51).

Nuestro sistema es una Debian Lenny y sus source, por si alguien le interesa (se de uno que tenia problemas por eso :P) aquí las dejo.

PREPARACIÓN DEL SISTEMA

vim /etc/apt/sources.list

deb http://ftp.caliu.cat/debian/ lenny main
deb-src http://ftp.caliu.cat/debian/ lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Modificando o no las source vamos hacer un update para tener actualizado los paquetes a instalar;

apt-get update

Como tendremos que “crear paquetes” necesitamos los build-essential;

apt-get install build-essential

Verdad verdadera es la que dice que necesitamos muchas cosas mas, ala a instalar;

apt-get install libdatetime-perl libdbi-perl libdbd-mysql-perl libclass-autouse-perl libmd5-perl libdigest-sha1-perl libhtml-template-perl libimage-size-perl libmime-lite-perl libmime-perl libcompress-zlib-perl libnet-dns-perl liburi-perl libhtml-tagset-perl libhtml-parser-perl libwww-perl libwww-perl libgd-gd2-perl libmailtools-perl libunicode-maputf8-perl libxml-simple-perl libio-stringy-perl libcaptcha-recaptcha-perl libdigest-hmac-perl libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev

Dicen que no hay Nagios sin Apache, pues vamos a fumar pipa de la paz con su php

apt-get install apache2 libapache2-mod-php5 libgd2-xpm-dev php5-common php5-cgi php5-cli php5-mysql

Con esto ya tenemos un apache con las librerías necesarias para hacer la instalación de NAGIOS. Ahora vamos a la intalación pura y dura del motor NAGIOS

INSTALACIÓN NAGIOS

Creamos los usuarios, grupos y modificamos sus características;

/usr/sbin/useradd -m nagios
/usr/sbin/usermod -G nagios nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -G nagcmd nagios
/usr/sbin/usermod -G nagcmd www-data

Nos descargamos Nagios, compilamos e instalamos;

cd /tmp
wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.1.tar.gz
tar xzf nagios-3.2.1.tar.gz

cd nagios-3.2.1

./configure –with-command-group=nagcmd
make all


make install
make install-init
make install-config
make install-commandmode
make install-webconf

Creamos un usuario para nuestro Nagios

NOTA! (El parametro -c es de CREATE, si queremos vamos usuarios el primero hacemos con el -c y los demás sin el!)

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin


/etc/init.d/apache2 reload

Vamos a por los plugins…

cd /tmp
wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.14.tar.gz
tar xzf

nagios-plugins-1.4.14.tar.gz

cd nagios-plugins-1.4.14
./configure –with-nagios-user=nagios –with-nagios-group=nagios
make
make install

Vamos a reiniciar apache y nagios. Si funciona crearemos un enlace para que se inicia Nagios con el inicio del  sistema.

/etc/init.d/apache2 restart

/etc/init.d/nagios restart

ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios

Nota! Para confirmar que funciona vamos hacer un check de la config (como un /etc/init.d/apache2ctl -t) y nos dirá si hay errores y donde.

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Total Warnings: 0
Total Errors: 0

Ya nos podemos conectar a la web http://servidor/nagios con el usuario y contraseña que hemos configurado.

Nagios Login

INSTALACIÓN PHPMYADMIN

Procedemos a la instalación del PhpMyAdmin (por si las moscas 😛 )

cd /tmp

wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.3.4/phpMyAdmin-3.3.4-all-languages.tar.gz?use_mirror=freefr

tar xzf phpMyAdmin-3.3.4-all-languages.tar.gz

mv phpMyAdmin-3.3.4-all-languages /var/www/phpmyadmin

Login PhpMyAdmin

Entramos en la web http://servidor/phpmyadmin

INSTALACIÓN CACTI


apt-get install mysql-server rrdtool snmp

Activaremos la extensión para el SNMP añadiendo la siguientes lineas;

vim /etc/php5/conf.d/snmp.ini

; Enable snmp extension module

extension=snmp.so

file_uploads = On

vim /etc/apache2/mods-enabled/php5.conf (Añadimos o modificamos los siguientes campos)

# PHP is an HTML-embedded scripting language which attempts to make it

# easy for developers to write dynamically generated webpages.

LoadModule php5_module modules/libphp5.so

# Cause the PHP interpreter to handle files with a .php extension.

AddHandler php5-script .php

AddType text/html .php

# Add index.php to the list of files that will be served as directory

# indexes.

DirectoryIndex index.php

vim /etc/apache2/httpd.conf

Include conf.d/*.conf

Vamos  a preparar la MySQL para la instalación de CACTI;

mysqladmin -u root –p create cacti

cd /tmp

wget http://www.cacti.net/downloads/cacti-0.8.7e.tar.gz

tar xzvf cacti-0.8.7e.tar.gz

mv cacti-0.8.7e /var/www/cacti

cd /var/www/cacti/

mysql -u root -p cacti < cacti.sql

adduser cacti

mysql -u root -p mysql

mysql> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY ’somepassword’;

mysql> flush privileges;

mysql> quit

Agregamos las siguientes lineas;

vim include/config.php

$database_type = “mysql”;

$database_default = “cacti”;

$database_hostname = “localhost”;

$database_username = “cacti”;

$database_password = “cacti”;

Con los passwords que hemos puesto y el usuario que toca.

chown -R cacti log

chown -R cacti rra

Agregamos;

vim /etc/crontab

*/5 *   * * *   cacti   php /var/www/cacti/poller.php > /dev/null 2>&1

Nos conectamos con http://website_host/cacti y pulsamos Next 2 veces y Finish

Cacti

Cacti

Cacti Resumen Instalación

Cacti Login

Nos logamos como Admin y passwd : admin. Luego cambiamos el password y ya podremos añadir los hosts

Ya tenemos nuestro entorno de gráficas 😉

Cacti Inside

Procedemos al Centreon…

INSTALACIÓN CENTREON

Vamos a empezar…

apt-get install tofrodos php5-cli php-db php-date php5-gd php5-mysql php5-snmp php5-ldap php-mail php-mail-mime php-net-smtp php-net-socket php5-xmlrpc rrdtool librrds-perl libconfig-inifiles-perl

Si aparece el siguiente mensaje (debería…);

Fichero de configuración `/etc/php5/conf.d/snmp.ini’
==> Fichero en el sistema creado por usted o por algún script.
==> Fichero también en el paquete.
¿Qué quisiera hacer al respecto? Sus opciones son:
Y o I : instalar la versión del paquete
N o O : conservar la versión actualmente instalada
D : mostrar las diferencias entre versiones
Z : ir a un shell para examinar la situación
La acción por omisión es conservar la versión actual.
*** snmp.ini (Y/I/N/O/D/Z) [por omisión=N] ?

Le damos a D

Seguimos…

apt-get install snmp snmpd libnet-snmp-perl lsb-release mailx libconfig-inifiles-perl libcrypt-des-perl libdigest-hmac-perl libdigest-sha1-perl libgd-gd2-perl libnet-snmp-perl libsnmp-perl

vim /etc/snmp/snmpd.conf

Buscamos a linea #com2sec readonly default public y eliminamos la “#”. Guardamos y salimos

Reiniciamos

invoke-rc.d snmpd restart

Miramos si funciona

snmpget -v1 -c public localhost sysDescr.0

Actualizamos PEAR

pear channel-update pear.php.net

pear upgrade pear

pear install -f -a DB_DataObject DB_DataObject_FormBuilder MDB2 Numbers_Roman Numbers_Words HTML_Common HTML_QuickForm HTML_QuickForm_advmultiselect HTML_Table Auth_SASL HTTP Image_Canvas Image_Color Image_Graph Image_GraphViz Net_Traceroute Net_Ping Validate XML_RPC SOAP

y para finalizar antes de instalar… los ndo..

apt-get install nagios-nrpe-plugin ndoutils-nagios3-mysql

Nos va a pedir el WORKGROUP (por el SAMBA) y el  WINS. Dejamos los valores por defecto.

Nota! En la configuración de ndoutils (pantalla azul) le damos a SI

Descargamos…

cd /tmp

wget http://download.centreon.com/centreon/centreon-2.1.5.tar.gz

tar xzvf centreon-2.1.5.tar.gz

cd centreon-2.1.5

ln -s /usr/sbin/nagios2 /usr/sbin/nagios

bash ./install.sh -i

NOTA!! En mitad de la instalación nos pedirá el fichero de NDOUTILS, este por defecto esta en /usr/sbin/ndomod.o pero en la instalación esta en /etc/nagios3/ndomod.cfg por lo que aparecerá la siguiente pantalla.

El típico error de /usr/sbin/ndomod.o is not a valid file. 😉

NDO ERROR NAGIOS

Le pondremos que la ruta correcta es  /etc/nagios3/ndomod.cfg

NDO OK

Despues de muchos checks llegamos al final y ya podemos entrar en la web: http://servidor/centreon

Centreon Config

Seguimos confirmando la licencia

Centreon Config

Parece que ya esta todo ok…

Centreon Confirmado

De nuevo todo ok

Centreon Confirmado

Configuración Base de datos

Configuración Base de datos

Ya queda poco..

Confirmación Base de datos

La configuración de acceso a centreon…

Configuración de acceso

LDAP, a gusto del consumidor, seria aconsejable en un entorno “perfecto” pero no es el caso…

LDAP Config

Una de las ultimas y siguiente siguiente..

Mas...

Y ya lo tenemos…

Login

Por ultimo editamos el siguiente fichero

vim /etc/default/ndoutils

Modificamos “ENABLE_NDOUTILS=0” y lo dejamos como “ENABLE_NDOUTILS=1

Eliminar comentarios en nagios

Hola,

Dejo aquí un script  (bastante cutre) para eliminar los comentarios de los hosts que ya no tienen alerta, se tiene que decir que los comentarios de servicio se eliminan al reiniciar el nagios.

La verdad es que incluso tiene variables que no se usan etc… pero funciona 😉

Quien quiera depurarlo ya sabe, que lo haga y AVISE !!!!!!

$data_file=”/var/cache/nagios3/status.dat”;
open(DAT, $data_file);
my $locate = ‘current_state=2’;
my $host = ‘service_description’;
my $stat = ‘servicestatus’;
my $name = ”;
my $sumatori=0;
my $comment = ‘comment_id’;
my $comm = ‘hostcomment’;
my $hosterror = ”;
my $host_name = ‘host_name’;
my $host_with = ”;
my $locatestate= 0;
my @problems;
my $echocmd=”/bin/echo”;
@raw_data=<DAT>;
system(“/etc/init.d/nagios3 restart”);
foreach $wrestles(@raw_data)
{
if ( $wrestles =~ $comm)
{
$hosterror = “1”;
}
if ($hosterror == “1”)
{
if ($wrestles =~ $host_name)
{
$host_with = substr($wrestles,11,100);
}

if ($wrestles =~ $comment)
{
my $sto = substr($wrestles,12,100);

foreach $wrestler2 (@raw_data)
{
if ($wrestler2 =~ m/$stat/)
{
$name = $wrestler2;
}
if ($name =~ m/$stat/)
{
if($wrestler2 =~ m/$host_name/)
{
$hosting = $wrestler2;
$hosting = substr($hosting,11,100);
}
if ($wrestler2 =~ m/current_state=2/)
{
$locatestate = 1;
}
if ($locatestate == 1)
{
if ($hosting eq  $host_with)
{
print “HOST CON COMENTARIO Y CRITICAL: “;
print $host_with;
print $hosting;
$locatestate = 0;
print $sto;
print “#”;
$host_with = 8;
$already = $sto;
}
else{
if ($already ne $sto)
{
$che = ”;
$locatestate = 0;
print “COMENTARIO ELIMINAR:”;
print $sto;

$commandfile=’/var/lib/nagios3/rw/nagios.cmd’;
#system (“/usr/bin/printf ‘[%lu] DEL_SVC_COMMENT;$ston’ > $commandfile”);
system (“/usr/bin/printf ‘[%lu] DEL_HOST_COMMENT;$ston’ > $commandfile”);
}

}
}
}

}
}
}
}
close(DAT);

Muchos recuerdos a los amigos argentinos que leen este blog!!!