Foros OVH  

Retroceder   Foros OVH > Foros Particulares > Servidores dedicados
Registrarse Preguntas Frecuentes Guias Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas
Antiguo 19-09-2009, 18:48:21   #1
Power
Miembro
 
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
Predeterminado SMS gratuito de alerta de sobrecarga del servidor

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);
}    
?>
Utiliza las librerías Zend Gdata (http://framework.zend.com/download/gdata/) que instalé siguiendo las indicaciones de las API de Google (http://code.google.com/intl/es-ES/ap...lient_lib.html)
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
Power no está en línea   Responder Con Cita
Antiguo 19-09-2009, 18:59:46   #2
kennysamuerto
Miembro
 
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

¡¡¡¡ 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
kennysamuerto no está en línea   Responder Con Cita
Antiguo 19-09-2009, 19:01:36   #3
kennysamuerto
Miembro
 
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

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
kennysamuerto no está en línea   Responder Con Cita
Antiguo 19-09-2009, 19:27:55   #4
Power
Miembro
 
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

Hola kennysamuerto,
Cita:
Empezado por kennysamuerto Ver Mensaje
Por cierto, solo una duda, cuando hablamos de sobercarga de servidor, hablamos de un load determinado? Si es asi, ¿Cual?
En la parte de configuración están las variables:
$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
Power no está en línea   Responder Con Cita
Antiguo 19-09-2009, 19:36:22   #5
kennysamuerto
Miembro
 
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

Cita:
Empezado por Power Ver Mensaje
Hola kennysamuerto,

En la parte de configuración están las variables:
$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
Yo habia pensado precisamente eso, la ocupacion excesiva de una particion.

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:
<?php

error_reporting
(0);

if (
ini_get('disable_functions')) {
    
$disabled_funcs=array_map('trim',explode(',',ini_get('disable_functions')));
}

$action=$_GET["action"];

if (
$action=="phpinfo") {
    
/*
    Uncoment the line below to allow users to view PHP Info for your
    server. This potentially allows access to information a malicious
    user could use to find weaknesses in your server.
    */
    #phpinfo();
} else {
    
$users[0]="Unavailable";
    
$users[1]="--";
    
$loadnow="Unavailable";
    
$load15="--";
    
$load30="--";
    if (
in_array('exec',$disabled_funcs)) {
        
$load=file_get_contents("/proc/loadavg");
        
$load=explode(' ',$load);
        
$loadnow=$load[0];
        
$load15=$load[1];
        
$load30=$load[2];
    } else {
        
$reguptime=trim(exec("uptime"));
        if (
$reguptime) {
            if (
preg_match("/, *(\d) (users?), .*: (.*), (.*), (.*)/",$reguptime,$uptime)) {
                
$users[0]=$uptime[1];
                
$users[1]=$uptime[2];
                
$loadnow=$uptime[3];
                
$load15=$uptime[4];
                
$load30=$uptime[5];
            }
        }
    }
    if (
in_array('shell_exec',$disabled_funcs)) {
        
$uptime_text=file_get_contents("/proc/uptime");
        
$uptime=substr($uptime_text,0,strpos($uptime_text," "));
    } else {
        
$uptime=shell_exec("cut -d. -f1 /proc/uptime");
    }
    
$days=floor($uptime/60/60/24);
    
$hours=str_pad($uptime/60/60%24,2,"0",STR_PAD_LEFT);
    
$mins=str_pad($uptime/60%60,2,"0",STR_PAD_LEFT);
    
$secs=str_pad($uptime%60,2,"0",STR_PAD_LEFT);
    
$phpver=phpversion();
    
$mysqlver=mysql_get_client_info();
    
$zendver=zend_version();
    echo 
"<load>$loadnow</load>\n";
    echo 
"<uptime>$days Days $hours:$mins:$secs</uptime>\n";
    echo 
"<phpver>$phpver</phpver>\n";
    echo 
"<mysqlver>$mysqlver</mysqlver>\n";
    echo 
"<zendver>$zendver</zendver>\n";
}

?>
Esto, lo que hace, es medir la carga del servidor, y decirte los dias que esta online, y muchos mas datos (Horas online, versiones...)
__________________
Administración de servidores especializado en httpd
Contacto Sysadmin Servidores Dedicados Administrados
kennysamuerto no está en línea   Responder Con Cita
Antiguo 19-09-2009, 19:50:33   #6
kennysamuerto
Miembro
 
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

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
kennysamuerto no está en línea   Responder Con Cita
Antiguo 19-09-2009, 20:01:53   #7
Power
Miembro
 
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

Hola kennysamuerto,

Cita:
Por cierto, imagino que el proc/loadavg sera para los servidores con cpanel (desconozco).
En Centos, el fichero /proc/loadavg contiene, entre otros datos, la carga del servidor, pero creo que ese fichero existe en todas las distribuciones de Linux.
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.
Power no está en línea   Responder Con Cita
Antiguo 19-09-2009, 20:06:30   #8
kennysamuerto
Miembro
 
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

Cita:
Empezado por Power Ver Mensaje
Hola kennysamuerto,

En Centos, el fichero /proc/loadavg contiene, entre otros datos, la carga del servidor, pero creo que ese fichero existe en todas las distribuciones de Linux.
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.
Se me fue el santo al cielo con el directorio /proc/loadavg.

Es cierto, tienes toda la razon.
__________________
Administración de servidores especializado en httpd
Contacto Sysadmin Servidores Dedicados Administrados
kennysamuerto no está en línea   Responder Con Cita
Antiguo 19-09-2009, 20:07:29   #9
Power
Miembro
 
Fecha de Ingreso: Jan 2008
Mensajes: 2.608
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

Hola,
Cita:
Empezado por kennysamuerto Ver Mensaje
Corrigeme si me equivoco... pero el ZendGData se instala... simplemente subiendo los archivos?
Sí. Basta con subir el comprimido y descomprimirlo donde quieras.
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
Power no está en línea   Responder Con Cita
Antiguo 19-09-2009, 20:20:28   #10
kennysamuerto
Miembro
 
Fecha de Ingreso: Nov 2008
Mensajes: 1.095
Predeterminado Re: SMS gratuito de alerta de sobrecarga del servidor

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
kennysamuerto no está en línea   Responder Con Cita
Respuesta

Herramientas

Normas de Publicación
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 22:39:53.


© OVH 1999-2010