sk monitoring - Monitoreo de servicios.

Mensajes
21
Puntuación de reacción
0
Decir primero que el script no es la gran cosa, lo hice para uso personal ya que tenia servidores que solo tenían FTP y aveces se caían.
Código:
#!/bin/bash
# Monitoreo de servicios.
# Por Skamasle - Maks.
# Skamasle.com - kb.skamasle.com
# Contacto yo@skamasle.com
# Modificación: 29 dic 2013
# Versión 0.4
# Use bajo su propio riesgo, aunque el script no borra nada ;)

# Lista de servicios a monitorear.
servicios='proftpd mysql apache2 nginx varnish memcached lighttpd pureftpd pure-ftpd-mysql httpd'

# Aquí se guarda un log de servicios caídos.
report=/root/ReporteServicios.txt

fecha=$(date)
checkstatus () {
service $1 status > /dev/null 
status="$?"
# se me fue la mano, era cosa de ver si era diferente a 0 y reiniciar.. puse la lista entera 
# mas que nada para mejorar el log pero lo deje así..
if [ $status  -eq "1" ] || [ $status  -eq "2" ] || [ $status  -eq "3" ] || [ $status  -eq "4" ]; then
	echo "$1 esta caído" $fecha >> $report
	/etc/init.d/$1 start >> $report
fi
}

existe () {

if [ -e /etc/init.d/$1 ]; then
	checkstatus $1
fi
}

for servicio in $servicios
        do 
                existe $servicio
done

Código:
wget mirror.skamasle.com/scripts/sk-monitoring.sh

Se ejecuta con un cron:

Código:
*/5 * * * * sh /ruta/sk-monitoring.sh

La función existe no es necesaria en un principio, ya que bastaría con poner servicios que solo existen en el servidor pero es un extra para el que use el default... lo aclaro para las quejas de los grandes programadores xD

Si quieren algo complejo pueden usar:

SIM: https://www.rfxn.com/projects/system-integrity-monitor/
CSF | LDF : Index of /free/csf
WebMin: Webmin
 
Mensajes
21
Puntuación de reacción
0
Muy buen aporte ska :D

Que rápido responde la gente aquí xD aún me estaba cargando la web para revisar el tema y me llega el email ¬¬

Ah y me hace falta mejorar el script, para que envié email si no se levanta el servicio luego de 2 intentos.

Pero no time.
 

Zeokat

Oro
Usuario de Bronce
Mensajes
1,194
Puntuación de reacción
4
Necesitaba algo parecido a este script así que hice unos pequeños ajustes para que enviase un mail, bash no es uno de mis fuertes :sisi1:

Lo dejo por si a alguien le resulta util.

Código:
#!/bin/bash

# Lista de servicios a monitorear.
servicios='mysql apache2 varnish'

# Aqui se guarda un log de servicios caídos.
report=/root/servicesmonitor_log.txt

sendmail () {
	SUBJECT="Servicio $1 caido $(date)"
	EMAIL="[COLOR="#FF8C00"]pon_tu_correo@mail.com[/COLOR]"
	echo "$SUBJECT" | mail -s "$SUBJECT" "$EMAIL"
}

checkstatus () {
	#Redireccion al vacio
	service $1 status > /dev/null 2>&1
	#$? devuelve el codigo de estado del ultimo comando o script ejecutado (0=exito, otr numero significa error)
	status="$?"
	if [ $status -ne "0" ]; then
		#escribimos en archivo del log
		echo "$1 esta caído" $(date) >> $report
		#enviamos un mail
		sendmail $1
		#como está caido intentamos iniciarlo y logeamos los posibles errores
		/etc/init.d/$1 start >> $report
	fi
}

existe () {
	if [ -e /etc/init.d/$1 ]; then
		checkstatus $1
	fi
}

for servicio in $servicios
	do
		existe $servicio
done
 
Mensajes
21
Puntuación de reacción
0
Pues esta bastante bien ya en la otra versión quedaba así if [ $status -ne "0" ]; then jeje en vez de comparar todo :/

Cuando tenga tiempo lo pongo en mi blog también :)
 

aadrover

Piedra
Usuario de Piedra
Mensajes
66
Puntuación de reacción
0
Hace al menos 7 años que no toco bash en el trabajo:eek:

Enviado desde mi móvil usando Tapatalk 2
 
Mensajes
21
Puntuación de reacción
0
Necesitaba algo parecido a este script así que hice unos pequeños ajustes para que enviase un mail, bash no es uno de mis fuertes :sisi1:

Lo dejo por si a alguien le resulta util.

Código:
#!/bin/bash

# Lista de servicios a monitorear.
servicios='mysql apache2 varnish'

# Aqui se guarda un log de servicios caídos.
report=/root/servicesmonitor_log.txt

sendmail () {
	SUBJECT="Servicio $1 caido $(date)"
	EMAIL="[COLOR="#FF8C00"]pon_tu_correo@mail.com[/COLOR]"
	echo "$SUBJECT" | mail -s "$SUBJECT" "$EMAIL"
}

checkstatus () {
	#Redireccion al vacio
	service $1 status > /dev/null 2>&1
	#$? devuelve el codigo de estado del ultimo comando o script ejecutado (0=exito, otr numero significa error)
	status="$?"
	if [ $status -ne "0" ]; then
		#escribimos en archivo del log
		echo "$1 esta caído" $(date) >> $report
		#enviamos un mail
		sendmail $1
		#como está caido intentamos iniciarlo y logeamos los posibles errores
		/etc/init.d/$1 start >> $report
	fi
}

existe () {
	if [ -e /etc/init.d/$1 ]; then
		checkstatus $1
	fi
}

for servicio in $servicios
	do
		existe $servicio
done

Ah cabe mencionar que se necesita tener mail instalado que no viene por defecto muchas veces, ni en debian ni en centos :/

yun install mail - apt-get install mail
 

Zeokat

Oro
Usuario de Bronce
Mensajes
1,194
Puntuación de reacción
4
Ah cabe mencionar que se necesita tener mail instalado que no viene por defecto muchas veces, ni en debian ni en centos :/

yun install mail - apt-get install mail

Asi es, para enviar un mail pues se necesita algún MTA instalado, puede ser postfix también. En Debian/Ubuntu:
Código:
sudo apt-get install postfix
 
Mensajes
278
Puntuación de reacción
0
Sabeis esas veces que os leeis algo y no entendéis ni una palabra, pues eso Jaja ni zorra
 

Zeokat

Oro
Usuario de Bronce
Mensajes
1,194
Puntuación de reacción
4
En eso te doy la razón :mola:

- - - Actualización- - -
@Zeokat Por cierto, en el momento en el que me ponga a ello, ya te dare porsaco con las dudas jaja

Por mi no hay problema, aunque Google casi siempre da mejores resultados que yo en ese aspecto jeje
 
Arriba