Bien para hoy tenemos un script de monitoreo que me encontré hace tiempo en el foro de cpanel creado por Jeff Petersen, un script bastante útil si queremos un monitoreo de la carga del server y otros factores como el uso de swap.
Bien primero les dejo el script y luego les explico un poco:
Script para monitorear la carga del server, memoria usada y procesos
NOTA: este script fue diseñado para servidores con WHM/cPanel
#!/bin/sh
export PATH=/bin:/usr/bin
######################################################
# Copyright Jeff Petersen, 2009 – 2013
# 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, either version 3 of the License, or
# (at your option) any later version.
# 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, see .
#####################################################
#####################################################
# START USER CONFIGURABLE VARIABLES
#####################################################
EMAIL=»[email protected]»
# 1 minute load avg
MAX_LOAD=3
# kB
MAX_SWAP_USED=1000
# kB
MAX_MEM_USED=500000
# packets per second inbound
MAX_PPS_IN=2000
# packets per second outbound
MAX_PPS_OUT=2000
# max processes in the process list
MAX_PROCS=400
#######################################################
# END USER CONFIGURABLE VARIABLES
#######################################################
IFACE=`grep ETHDEV /etc/wwwacct.conf | awk ‘{print $2}’`
if [[ «$IFACE» =~ «venet» ]] ; then
IFACE=venet0
fi
IFACE=${IFACE}:
######################################################
# 1 min load avg
######################################################
ONE_MIN_LOADAVG=`cut -d . -f 1 /proc/loadavg`
echo «1 minute load avg: $ONE_MIN_LOADAVG»
#######################################################
# swap used
######################################################
SWAP_TOTAL=`grep ^SwapTotal: /proc/meminfo | awk ‘{print $2}’`
SWAP_FREE=`grep ^SwapFree: /proc/meminfo | awk ‘{print $2}’`
let «SWAP_USED = (SWAP_TOTAL – SWAP_FREE)»
echo «Swap used: $SWAP_USED kB»
########################################################
# mem used
########################################################
MEM_TOTAL=`grep ^MemTotal: /proc/meminfo | awk ‘{print $2}’`
MEM_FREE=`grep ^MemFree: /proc/meminfo | awk ‘{print $2}’`
let «MEM_USED = (MEM_TOTAL – MEM_FREE)»
echo «Mem used: $MEM_USED kB»
########################################################
# packets received
########################################################
PACKETS_RX_1=`grep $IFACE /proc/net/dev | awk ‘{print $2}’`
sleep 2;
PACKETS_RX_2=`grep $IFACE /proc/net/dev | awk ‘{print $2}’`
let «PACKETS_RX = (PACKETS_RX_2 – PACKETS_RX_1) / 2»
echo «packets received (2 secs): $PACKETS_RX»
########################################################
# packets sent
########################################################
PACKETS_TX_1=`grep $IFACE /proc/net/dev | awk ‘{print $10}’`
sleep 2;
PACKETS_TX_2=`grep $IFACE /proc/net/dev | awk ‘{print $10}’`
let «PACKETS_TX = (PACKETS_TX_2 – PACKETS_TX_1) / 2»
echo «packets sent (2 secs): $PACKETS_TX»
let «SWAP_USED = SWAP_TOTAL – SWAP_FREE»
if [ ! «$SWAP_USED» == 0 ] ; then
PERCENTAGE_SWAP_USED=`echo $SWAP_USED / $SWAP_TOTAL | bc -l`
TOTAL_PERCENTAGE=`echo ${PERCENTAGE_SWAP_USED:1:2}%`
else
TOTAL_PERCENTAGE=’0%’
fi
##########################################################
# number of processes
#########################################################
MAX_PROCS_CHECK=`ps ax | wc -l`
send_alert()
{
SUBJECTLINE=»`hostname` [L: $ONE_MIN_LOADAVG] [P: $MAX_PROCS_CHECK] [Swap Use: $TOTAL_PERCENTAGE ] [pps in: $PACKETS_RX pps out: $PACKETS_TX]»
ps auxwwwf | mail -s «$SUBJECTLINE» $EMAIL
exit
}
if [ $ONE_MIN_LOADAVG -gt $MAX_LOAD ] ; then send_alert
elif [ $SWAP_USED -gt $MAX_SWAP_USED ] ; then send_alert
elif [ $MEM_USED -gt $MAX_MEM_USED ] ; then send_alert
elif [ $PACKETS_RX -gt $MAX_PPS_IN ] ; then send_alert
elif [ $PACKETS_TX -gt $MAX_PPS_OUT ] ; then send_alert
elif [ $MAX_PROCS_CHECK -gt $MAX_PROCS ] ; then send_alert
fi
Lo más importante es editar estos valores:
EMAIL=»[email protected]» -> Nuestro email
# 1 minute load avg
MAX_LOAD=3 -> La carga del servidor, si el servidor durante el último minuto a tenido una carga de más de 3 nos avisará.
# kB
MAX_SWAP_USED=1000 -> Si el servidor esta usando Swap y la cantidad es mayor o igual a lo que pongamos nos avisará lo mismo con las siguientes 3 opciones que es RAM, y paquetes entreantes y salientes por segundo, OJO que la RAM y el swap van en KiloBytes, si no saben calcular bien usen esta herramienta: calculadora bits
# kB
MAX_MEM_USED=500000
# packets per second inbound
MAX_PPS_IN=2000
# packets per second outbound
MAX_PPS_OUT=2000
# max processes in the process list
MAX_PROCS=400 -> cantidad de procesos que ejecuta el server, aveces muchos procesos pueden sigfinicar que estamos bajo DDOS, así que todo es útil.
Cuando el server nos mande un email veremos algo como esto en el asunto:
hostname [L: 8] [P: 500] [Swap Use: 2% ] [pps in: 124 pps out: 689]
Esto significa que:
– L – La carga media _( load average ) del último minuto.
– P – Número de procesos que ejecuta el servidor en el momento
– Swap Usage – Porcentaje del uso de swap.
– pps in – Paquetes entrantes por segundo.
– pps out – Paquetes salientes por segundo.
Se preguntarán ustedes que valores poner en la configuración, pues eso ya no se lo puedo decir a nadie y no por que sea o muy malo si no por que cada servidor es diferente, algunos con más ram, otros con mejor cpu, algunos por defecto ejecutan muchos procesos por que así lo requieren las aplicaciones que corren.
Les pongo unos ejemplos;
Hay servidores que ejecutan entre 50 y 80 procesos, a veces 100 luego de eso puede considerarse que hay algo anormal por que la media es eso entre 50 y 80 procesos, hay otros que ejecutan hasta 800 y lo anormal sería 1500, esto es solo para darles un ejemplo.
Lo mismo pasa con la carga del servidor, si tenemos un servidor pequeño de 2 o 4 cores, una carga media de 4 ya sería una carga alta, pero si tenemos un servidor de 16 o 24 cores no creo que nos moleste mucho que la carga este en 4, 6, 8 o poco más, ya que para algo tenemos un server potente.
Así que, los valores que tienen que poner los sabrán ustedes que tienen que conocer su servidor, saber cuanto es lo máximo que consume en RAM, CPU, SWAP, Paquetes entrantes y salientes y con base en eso deducir que valor sería alto o alarmante o mejor dicho que requiera atención y por ende decirle al script que nos mande un email.
Bien eso es todo, solo tienen que hacer un cron, puede ser cada minuto o cada 5 o como deseen, ahora no voy a explicar como hacer un cron, ya lo he hecho en otras ocasiones, así que pueden ver una de ellas en este enlace: cron parahacer backup de mysql