quarta-feira, 30 de maio de 2012

NMON capturing data to Excel SpreadSheet nMonAnalyzerSpreadSheet


1) Download the correct binary

1.1) Find out your S.O. and CPU processor version


1.2) Download Nmon Analyzer SpreadSheet



1.3) Donwload

$ cd /opt
$ mkdir /opt
$ mkdir /opt/nmon
$ cd /opt/nmon
$ wget http://nmon.sourceforge.net/docs/nmon_x86_12a.zip              #RedHat
$ wget http://sourceforge.net/projects/nmon/files/nmon_x86_ubuntu1004 #Ubuntu
$ unzip nmon_x86_12a.zip
$ chmod 777 nmon_x86*

1.4) Build a symbolic link to appropriated SO version of nmon in system path

$ echo $PATH
$ ln -s /opt/nmon/nmon_x86_rhel45 /usr/sbin/nmon    # RedHat
$ ln -s /opt/nmon/nmon_x86_ubuntu810 /usr/sbin/nmon # Ubuntu

1.5) Test if nmon is working properly 

$ nmon


2) Create and configure nmon script to capture SpreadSheet format

2.1) Create nmon scripts

$ vim /root/nmon_spreadsheet.sh


# file  : nmon_spreadsheet.sh
# author: Josemar Silva
# obs   : run nmon in background and capture output to spreadsheet
#
#
echo $0 $1 $CURRENT_DATETIME
#
# Chechking parameters ...
#
MODE=weekly #default
if [ "$1" = "-d" ]; then
  MODE=dayly
elif [ "$1" = "-w" ]; then
  MODE=weekly
elif [ "$1" = "-m" ]; then
  MODE=monthly
else
  echo "usage: $0 \<mode\>"
  echo -e "mode:"
  echo -e "\t -d: dayly - refresh every 5 min until end of current day (process)"
  echo -e "\t -w: weekly - refresh every 15 min until end of current week"
  echo -e "\t -m: montly - refresh every 60 min until end of current month"
  exit 1
fi
#
# Setting up options ...
#
echo "Setting Up options - Mode($MODE)..."
PATH=$PATH:/usr/sbin:/usr/bin
CURRENT_DATETIME=`date +"%D %R"`
DAY_OF_WEEK_TODAY=$(date +%u)
DAYS_REMAINING_WEEK=$(expr 7 - $DAY_OF_WEEK_TODAY)
CURRENT_HOUR=$(date +%H)
CURRENT_DAY=$(date +%d)
CURRENT_MONTH=$(date +%m)
CURRENT_LASTDAYOFMONTH=31
if [ $CURRENT_MONTH -eq 2 ]; then
  CURRENT_LASTDAYOFMONTH=28
elif [ $CURRENT_MONTH -eq 4 ] || [ $CURRENT_MONTH -eq 6 ] || [ $CURRENT_MONTH -eq 9 ] || [ $CURRENT_MONTH -eq 11 ] ; then
  CURRENT_LASTDAYOFMONTH=30
else
  CURRENT_LASTDAYOFMONTH=31
fi
HOURS_REMAINING_DAY=$(expr 24 - $CURRENT_HOUR)
DAYS_REMAINING_MONTH=$(expr $CURRENT_LASTDAYOFMONTH - $CURRENT_DAY)
REMAINING_DAYLY=$(expr $HOURS_REMAINING_DAY)
REMAINING_WEEKLY=$(expr 24 \* $DAYS_REMAINING_WEEK + $HOURS_REMAINING_DAY )
REMAINING_MONTHLY=$(expr 24 \* $DAYS_REMAINING_MONTH + $HOURS_REMAINING_DAY )
NMON_LOG_ROOT_PATH=/var/log/nmon/
#
# Create log directory ...
#
echo "Checking log directory ..."
if [ ! -d "$NMON_LOG_ROOT_PATH" ]; then
  mkdir $NMON_LOG_ROOT_PATH
fi
if [ ! -d "$NMON_LOG_ROOT_PATH$MODE" ]; then
  mkdir $NMON_LOG_ROOT_PATH$MODE
fi
#
# Changing Current Directory to Log ...
#
NMON_LOG_PATH=$NMON_LOG_ROOT_PATH$MODE
echo "Changing Current directory to $NMON_LOG_PATH ..."
cd $NMON_LOG_PATH
#
# Set command line ...
#
echo "Setting up command line ..."
if [ "$1" = "-d" ]; then
  NMON_COMMAND_LINE='nmon -f -s 300 -t -c '$(expr $REMAINING_DAYLY \* 12 )
elif [ "$1" = "-w" ]; then
  NMON_COMMAND_LINE='nmon -f -s 900 -c '$(expr $REMAINING_WEEKLY \* 4)
else
  NMON_COMMAND_LINE='nmon -f -s 3600 -c '$(expr $REMAINING_MONTHLY)
fi
#
# Excute nmon command
#
echo $NMON_COMMAND_LINE
$NMON_COMMAND_LINE
#
# Remove older files
#
if [ "$1" = "-d" ]; then
  MTIME_OPTION="+7"
elif [ "$1" = "-w" ]; then
  MTIME_OPTION="+14"
else
  MTIME_OPTION="+60"
fi
echo "Cleaning old file ..."
find $NMON_LOG_ROOT_PATH$MODE/*.nmon -maxdepth 1 -mtime $MTIME_OPTION | xargs echo




2.2) Change Script permission

$ chmod 777 /root/nmon_spreadsheet.sh


3) Configure crontab to invoke nmon collect spreadsheet periodicaly

$ crontab -e


#+------------------ 1: min(0-59)
#|  +--------------- 2: hour(0-23)
#|  |  +------------ 3: day_of_month(1-31)
#|  |  |  +--------- 4: month_of_year(1-12)
#|  |  |  |  +------ 5: day_of_week(0-6)(Sun-Sat)
#|  |  |  |  |  +--- 6: command-line
#|  |  |  |  |  |
#v  v  v  v  v  v
00 00 01  *  *  /root/nmon_spreadsheet.sh -m > /root/nmon_spreadsheet.monthly.log 2>&1
00 00 *   *  1  /root/nmon_spreadsheet.sh -w > /root/nmon_spreadsheet.weekly.log 2>&1
00 00 *   * 1-5 /root/nmon_spreadsheet.sh -d > /root/nmon_spreadsheet.daylylog 2>&1


4) Referencias



quarta-feira, 16 de maio de 2012

Check database query by JDBC connection on Oracle, MySQL and SqlServer

1. Introduction

I've develped my own Nagios CheckByJdbc plugin allows you to check a SQL query from a script file on database ( Oracle, Microsoft SqlServer, Mysql ) by a JDBC connection.

2. Download Plugin

Download plugin here:
  • https://bitbucket.org/josemarsilva/checkbyjdbc

3. Installing Plugin


Unzip CheckByJdbc.zip and follow 'read-me.txt'  instructions

Your command.cfg should be like this

# 'check_by_jdbc' command definition
define command{
             command_name    check_by_jdbc
             command_line    java -cp $USER1$/CheckByJdbc/.:$USER1$/CheckByJdbc/$ARG1$ CheckByJdbc -d $ARG2$ -H $ARG3$ -p $ARG4$ -s $ARG5$ -l $ARG6$ -x $ARG7$ -m $ARG8$ -f $USER1$/CheckByJdbc/$ARG9$ -R "$ARG10$" -w $ARG11$ -c $ARG12$ -M "$ARG13$" -v $ARG14$
             }

Your localost.cfg should be like this:

# define a service to be checked by CheckByJdbc
define service{
        use                             local-service
        host_name                       vmwsrv01
        service_description             CheckByJdbc Oracle Tablespaces
        check_command                   check_by_jdbc!classes12.jar!orcl!192.168.133.2!1521!orcl!nagios!nagios!f!sqlfile1.sql!!80!90!CheckByJdbcTablespaces!0
        check_interval                  1
        retry_interval                  1
       }
define service{
        use                             local-service
        host_name                       vmwsrv01
        service_description             CheckByJdbc Oracle Invalid Objects
        check_command                   check_by_jdbc!classes12.jar!orcl!192.168.133.2!1521!orcl!nagios!nagios!f!sqlfile2.sql!&OWNERLIST='MANAGER','RM'!0!0!CheckByJdbc Invalid Objects!0
        check_interval                  1
        retry_interval                  1
       }
define service{
        use                             local-service
        host_name                       vmwsrv01
        service_description             CheckByJdbc Oracle LongTimeUserQuery
        check_command                   check_by_jdbc!classes12.jar!orcl!192.168.133.2!1521!orcl!nagios!nagios!f!sqlfile3.sql!!300!900!CheckByJdbc OrclLongTimeUserQuery!0
        check_interval                  15
        retry_interval                  15
       }

How to install PNP4Nagios in CentOs 5.6

1. Resolving dependencies

$ yum install rrdtool
$ yum install php-gd

2. Download and Install PNP4Nagios

$ mkdir /opt ; mkdir /opt/Nagios
$ cd /opt/Nagios
$ wget http://sourceforge.net/projects/pnp4nagios/files/latest/download?source=files
$ tar -xvzf pnp4nagios-0.6.17.tar.gz
$ cd ./pnp4nagios-0.6.17
$ ./configure
$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios
$ which rrdtool #
$ ./configure --with-rrdtool=/usr/bin/rrdtool
$ make all
$ make install
$ make install-webconf
$ make fullinstall


3. Configure PNP4Nagios

$ vim /usr/local/nagios/etc/nagios.cfg
:
process_performance_data=1
:
service_perfdata_command=process-service-perfdata
host_perfdata_command=process-host-perfdata
:

$ vim /usr/local/nagios/etc/objects/commands.cfg
:
define command {
command_name    process-host-perfdata
command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl -d HOSTPERFDATA
}
define command {
command_name    process-service-perfdata
command_line    /usr/bin/perl /usr/local/pnp4nagios/libexec/process_perfdata.pl
}
:

$ vim /usr/local/nagios/etc/objects/templates.cfg
:
#########################################################################
#########################################################################
#
# PNP4NAGIOS template
#
#########################################################################
#########################################################################

# PNP4Nagios host/service definitions

define host {
name       host-pnp
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_
register   0
}
define service {
name       srv-pnp
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
register   0
}

$ # Copy Javascript pop-ups to Nagios Web files
$ cp /opt/Nagios/pnp4nagios-0.6.17/contrib/ssi/status-header.ssi /usr/local/nagios/share/ssi/
$ chown nagios:nagios /usr/local/nagios/share/ssi/status-header.ssi
$ vim /usr/local/nagios/etc/objects/templates.cfg # reconfigure template for Javascripts pop-ups
:
define host {
name       host-pnp
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_ class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=_HOST_
register   0
}
define service {
name       srv-pnp
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ class='tips' rel='/pnp4nagios/popup?host=$HOSTNAME$&srv=$SERVICEDESC$
register   0
}
:
$
$ vim /usr/local/nagios/etc/objects/localhost.cfg # Use template on configuration
:
define host{
use                     linux-server,host-pnp
host_name               localhost
alias                   localhost - CentOs-5.6
address                 127.0.0.1
}
:
define service{
use                     local-service,srv-pnp
host_name               vmwsrv01
service_description     Root Partition
check_command           check_local_disk!20%!10%!/
       }
:
$
$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg # Check configuration files
$


4. Restarting services nagios and apache

$ service nagios restart
$ service httpd restart


5. Check PNP4Nagios WebInterface check Instalation

$ http://localhost/pnpw4nagios
$
$ mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/install_done.php


6. References



sexta-feira, 4 de maio de 2012

Installing Nagios 3.2.3 on Ubuntu Server 10.04

1. Pre-requisites

# sudo apt-get -y install apache2        # servidor web, caso não tenha instalado
# sudo apt-get install build-essential   # pacotes para compilacao
# sudo apt-get -y install openssl        # criptografia
# sudo apt-get -y install libssl-dev     # bibliotecas para criptografia
# sudo apt-get -y install mcrypt         # substituto UNIX crypt
# sudo apt-get -y install libgd2-xpm     # bibliotecas para gerar gráficos
# sudo apt-get -y install libgd2-xpm-dev # bibliotecas para gerar gráficos
# sudo apt-get -y install libpng12-0     # bibliotecas para imagem
# sudo apt-get -y install libpng12-dev   # bibliotecas para imagem


2. Installing

2.1. Download 

# sudo mkdir /opt/Nagios # download
# sudo wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.2.3.tar.gz
# sudo wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
# sudo wget http://prdownloads.sourceforge.net/sourceforge/nagios/nsca-2.7.2.tar.gz
sudo wget http://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.13.tar.gz/download
sudo wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
sudo wget http://nagios.manubulon.com/nagios-plugins-snmp-0.6.0.tgz
sudo wget http://nagios.manubulon.com/nagios-snmp-plugins.1.1.1.tgz
sudo wget http://nagios.manubulon.com/nagios-plugins-snmp-extras-1.1-1.noarch.rpm
sudo wget -O check_snmp_traffic.py http://checksnmptraffic.googlecode.com/files/check_snmp_traffic
sudo wget -O check_snmp_traffic "http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=1816&cf_id=24"

2.2. Create User


# sudo useradd -m nagios

# sudo groupadd nagios

# sudo groupadd nagcmd
# sudo passwd nagios

Enter new UNIX password: nagios
Retype new UNIX password: nagios
# sudo usermod -G nagios nagios
# sudo mkdir /usr/local/nagios
# sudo chown -R nagios.nagios /usr/local/nagios
# sudo usermod -G nagios www-data
# sudo usermod -G nagios nagios

# sudo usermod -G nagcmd nagios
# sudo usermod -G nagcmd www-data


2.3. Compile and Install Nagios

# cd /opt/Nagios
# tar xzf nagios-3.2.3.tar.gz
# cd nagios-3.2.3
sudo ./configure --prefix=/usr/local/nagios --with-cgiurl=/nagios/cgi-bin --with-htmurl=/nagios/ --with-nagios-user=/nagios --with-nagios-grp=/nagios --with-gd-lib=/usr/lib --with-gd-inc=/usr/lib 
# sudo make all
# sudo make install
# sudo make install-init
# sudo make install-config
# sudo make install-commandmode
# sudo make install-webconf
# sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin  # repeat pwd 2x
New password: nagiosadmin
Re-type new password: nagiosadmin
Adding password for user nagiosadmin

2.4. Compile and Install Nagios Plugins

# cd /opt/Nagios/
# tar xzf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins-1.4.15
#
# sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios
#
# sudo make
# sudo make install
# sudo chown -R nagios:nagios /usr/local/nagios

2.5. Installing Client E-mail SMTP

# cd /usr/local/bin
# sudo tar -xvf /opt/Nagios/sendEmail-v1.56.tar.gz
# /usr/local/bin/sendEmail-v1.56/sendEmail -f noreply@internet.com.br \
  -t josemar.furegatti@gmail.com \
  -s smtp.server.com.br \
  -u "SendEmail-v1.56 is working properly" \
  -m "Yes, It's working"


2.6. Configuring Nagios

# vim /usr/local/nagios/etc/object/inmetrics_command.cfg

          :

          :

          :

      # 'notify-host-by-email' command definition
      define command{
             command_name notify-host-by-email
             command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/sendEmail-v1.56/sendEmail -s cindy.inmetrics.com.br -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
             }
      # 'notify-service-by-email' command definition
      define command{
             command_name notify-service-by-email
             command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail-v1.56/sendEmail -s cindy.inmetrics.com.br -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
             }

2.7. Configuring Nagios Startup 

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

2.8. Checking Nagios

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



3. Post Configuring

3.1. Restart services

# sudo service nagios stop
# sudo service nagios start
# sudo service apache2 restart


4. Installing Nagios NRPE

4.1. Prerequisites

# sudo apt-get install build-essential
# sudo apt-get install libgd2-xpm-dev libsnmp-perl libssl-dev openssl
# sudo apt-get install xinetd

4.2. Compile and Install Nagios NRPE

# cd /opt/Nagios/
# tar xzf nrpe-2.12.tar.gz
# cd /opt/Nagios/nrpe-2.12
#
# sudo ./configure
# sudo make all
# sudo make install
# sudo make install-daemon
# sudo make install-daemon-config
# sudo make install-xinetd 
# sudo chown nagios:nagios /usr/local/nagios


4.3. Configuring Nagios NRPE

# mkdir /usr/local/nagios/etc  # caso "Nagios monitored machine" ..
                               # ... senao pode ignorar file exists
# cp sample-config/nrpe.cfg /usr/local/nagios/etc/
# chown -R nagios:nagios /usr/local/nagios/etc   # caso "Nagios monitored"
# vim /usr/local/nagios/etc/nrpe.cfg
                 :
            allowed_hosts=127.0.0.1,10.10.11.18
                 :
            dont_blame_nrpe=0
                 :
            command[check_users]=/usr/local/nagios/libexec/check_users -w 0 -c 5
            command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
            command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
            command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
            command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
                 :
#
# Iniciar servico do NRPE em modo deamon
# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
# echo "para finalizar killall nrpe"
#
# echo Testing nagios NRPE (somente se os plugins já estiverem instalado) ....
# ifconfig # obtenha o IP da propria maquina. vamos testar remotamente a propria maquina
# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_users
    USERS OK - 1 users currently logged in |users=2;5;10;0


5. Apendix

5.1. References