![]() |
|
|
#1 |
|
Miembro
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
|
Hola,
Leí una idea muy interesante de tolai sobre el uso de Google Calendar con su sistema de notificación por SMS gratuito: http://foros.ovh.es/showpost.php?p=28253&postcount=6 Y con esa idea me he hecho un script que me controla la carga del servidor. Me envía un email para sobrecarga baja. Y crea un evento en mi Google Calendar si la sobrecarga es mayor. El Google Calendar lo tengo configurado para que me envíe SMS a la hora de cada evento (sin adelanto). El script lo he hecho en PHP (Es el único lenguaje que manejo con algo de soltura) El script se ejecuta cada 15 minutos mediante cron: */15 * * * * /root/scripts/alarma_sobrecarga.php >/dev/null 2>&1 Y el script es éste: Código:
<?php
// Script para generar alarmas por sobrecarga del servidor
// Configuración
$email = "xxxxxxxxx@gmail.com";
$password = "xxxxxxxxx";
$nivel_email = 3;
$nivel_sms = 5;
$servidor = "servidorcillo";
// Carga librerías Zend_Gdata
ini_set('include_path', '/root/scripts/ZendGdata/library');
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
// Función para crear evento en Google Calendar
function createQuickAddEvent ($client, $quickAddText) {
$gdataCal = new Zend_Gdata_Calendar($client);
$event = $gdataCal->newEventEntry();
$event->content = $gdataCal->newContent($quickAddText);
$event->quickAdd = $gdataCal->newQuickAdd('true');
$newEvent = $gdataCal->insertEvent($event);
}
// Comprueba carga
$contenido = file_get_contents("/proc/loadavg");
$matriz = explode(" ", $contenido); // divide con separador espacio
$carga = $matriz[0] + 0;
// Email
if($carga > $nivel_email){
mail($email, "Alarma de sobrecarga (".$carga.") del servidor ".$servidor, "");
}
// Envento en Google Calendar
if($carga > $nivel_sms){
$texto = "Alarma de sobrecarga (".$carga.") del servidor ".$servidor;
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME; // nombre del servicio de Google Calendar
$client = Zend_Gdata_ClientLogin::getHttpClient($email,$password,$service);
// Hora y minuto con retardo de 2 minutos
$hora = date("H");
$minutos = date("i")+2;
// Creación del evento en Google Calendar
createQuickAddEvent($client, $texto." ".$hora.":".$minutos);
}
?>
No modifiqué el php.ini ni creé un .htaccess sino que las incluyo mediante un ini_set('include_path', '/root/scripts/ZendGdata/library'); Aunque el servidor sincroniza su hora regularmente mediante NTP, pongo el evento creado en Google Calendar para dentro de dos minutos, por si acaso la hora de Google va adelantada algún minutillo. Me funciona de perlas. Además, aunque en el SMS se ponga un texto largo, parece que Google Calendar ya se encarga de enviar SMSs apendizados. Se admiten sugerencias de otros servicios que se le puedan dar a este servicio de SMSs gratuitos. Saludos |
|
|
|
|
|
#2 |
|
Miembro
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
|
¡¡¡¡ ERES DIOS !!!!
Voy a revisarlo, y si encuentro algo que comentarte, te lo sugiero. Como tu dices, muchas gracias, maestro.
__________________
Administración de servidores especializado en httpd Contacto Sysadmin Servidores Dedicados Administrados |
|
|
|
|
|
#3 |
|
Miembro
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
|
Por cierto, solo una duda, cuando hablamos de sobercarga de servidor, hablamos de un load determinado? Si es asi, ¿Cual?
__________________
Administración de servidores especializado en httpd Contacto Sysadmin Servidores Dedicados Administrados |
|
|
|
|
|
#4 | |
|
Miembro
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
|
Hola kennysamuerto,
Cita:
$nivel_email - Esta es la carga que disparará un email $nivel_sms - Esta es la carga que disparará un evento en Google Calendar (con el consiguiente SMS). Utilizo el primer valor de /proc/loadavg que es la carga en el último minuto. Me alegra que te guste la idea. Seguro que tú puedes aportar otros usos útiles. (A mí se me están ocurriendo, por ejemplo, la ocupación excesiva de particiones, la temperatura de los discos duros, extraída mediante SMART, la transferencia alta, número de procesos httpd excesivos, etc). Saludos |
|
|
|
|
|
|
#5 | |
|
Miembro
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
|
Cita:
Por cierto, imagino que el proc/loadavg sera para los servidores con cpanel (desconozco). Voy a aportar mi granito de arena para la gente que no encuentre un archivo similar: Código PHP:
__________________
Administración de servidores especializado en httpd Contacto Sysadmin Servidores Dedicados Administrados |
|
|
|
|
|
|
#6 |
|
Miembro
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
|
Corrigeme si me equivoco... pero el ZendGData se instala... simplemente subiendo los archivos?
__________________
Administración de servidores especializado en httpd Contacto Sysadmin Servidores Dedicados Administrados |
|
|
|
|
|
#7 | |
|
Miembro
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
|
Hola kennysamuerto,
Cita:
También puedes obtener la carga de la máquina con el comando uptime Muy útil tu script, sí señor. (Por cierto, en él utilizas también el fichero /proc/loadavg) Ahora estoy probando los comandos de SMART para obtener la temperatura de los discos duros. smartctl -a -d ata /dev/sda - Me da los datos del disco A del RAID-1 smartctl -a -d ata /dev/sdb - Me da los datos del disco B del RAID-1 El parámetro 194 me da la temperatura en grados centígrados. Saludos y gracias, de nuevo, por tu aportación. |
|
|
|
|
|
|
#8 | |
|
Miembro
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
|
Cita:
Es cierto, tienes toda la razon.
__________________
Administración de servidores especializado en httpd Contacto Sysadmin Servidores Dedicados Administrados |
|
|
|
|
|
|
#9 | |
|
Miembro
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
|
Hola,
Cita:
Lo único a tener en cuenta es añadir en el path el directorio library del paquete. Puedes hacerlo modificando el php.ini, creando un .htaccess o añadiendo un ini_set('include_path', '/camino_al_directorio/library'); en el script PHP (que es el método que yo utilizo) Saludos Última edición por Power fecha: 19-09-2009 a las 20:18:04 Razón: Aclaración |
|
|
|
|
|
|
#10 |
|
Miembro
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
|
Algo estoy haciendo mal...
Imagino que las primeras lineas: $email = "xxxxxxxxx@gmail.com"; $password = "xxxxxxxxx"; Son mis datos de google para el calendar. Voy a ver si averiguo que falla. Un Saludo
__________________
Administración de servidores especializado en httpd Contacto Sysadmin Servidores Dedicados Administrados |
|
|
|
![]() |
| Herramientas | |
|
|