Monitorizar nuestro servidor MySQL desde Cacti


Siguiendo con la serie de posts dedicados a cacti, en este os contaré cómo podemos monitorizar un servidor MySQL con Cacti, lo cual nos puede venir bien para detectar cuellos de botella y mal funcionamientos.
Esta configuración está bastante bien explicada en http://code.google.com/p/mysql-cacti-templates/, pero os la resumo en unas pocas líneas:

  1. Descargar las plantillas de GoogleCode, http://mysql-cacti-templates.googlecode.com/files/mysql-cacti-templates-1.1.1.tar.gz
  2. Importar la plantilla cacti_host_template_x_db_server_ht_0.8.6i.xml en Cacti como Administrador, y copiar el script ss_get_mysql_stats.php al directorio /var/www/cacti/scripts/ del servidor.
  3. Crear en MySQL un usuario cactimon, con contraseña cactipwdmon, al gusto, que será el que usaremos desde cacti para monitorizar el servidor de base de datos.
    GRANT PROCESS ON *.* TO \
    cactimon@'SERVIDOR_CACTI' \
    IDENTIFIED by 'cactipwdmon';

    GRANT SUPER ON *.* TO \
    cactimon@'SERVIDOR_CACTI' \
    IDENTIFIED BY 'cactipwdmon';

    flush privileges;
  4. Ahora en Cacti desde la consola del administrador, Console->DataTemplates, buscar todas las gráficas que sean: X MySQL lo_que_sea, y en todas ellas editar y marcar en Custom Data, el username y el password, y fijar: Username=cactimon y Password=cactipwdmon
Ya podremos dar de alta un nuevo dispositivo de tipo MySQL Server para que empiece a pintarnos gráficas.
La foto la he sacado del album de groovehouse en flickr

Monitorizar Microsoft SQLServer desde Nagios


A menudo, en nuestra infraestructura IT, no sólo tenemos servidores de base de datos corriendo en el supereficiente Linux, si no que tenemos que vérnoslas con servidores Microsoft Windows ejecutando SQLServer.
Los administradores de Nagios podemos monitorizar si SQLServer está funcionando o no, y podemos conectarnos, siguiendo los siguientes pasos:

  1. Conectarnos como root al servidor de Nagios. Luego descargar el plugin que ha desarrollado la gente de Consulting & Solutions
    cd /opt/software

    URL="http://www.consol.de/fileadmin/opensource"
    URL="$URL/Nagios/check_mssql_health-1.5.1.tar.gz"

    wget $URL
  2. Después, debemos instalar el paquete perl-DBD-Sybase. Es posible que encontremos alguna versión en RPM que nos pueda servir para nuestro sistema operativo en http://dag.wieers.com/rpm/packages/perl-DBD-Sybase/. Luego instarlarlo ejecutando:
    yum install freetds perl-DBD-Sybase
  3. Compilar e instalar el plugin que ha desarrollado la gente de Consulting & Solutions.
    cd /opt
    tar -xzvf /opt/software/check_mssql_health-1.5.1.tar.gz

    ./configure --prefix=/usr/local/nagios
    make
    make install
Ya podemos realizar la prueba de conectar a SQLServer, para lo que necesitaremos una cuenta de acceso de base de datos:
/usr/local/nagios/libexec/check_mssql_health \
--hostname=SERVIDOR_SQLSERVER \
--username=LOGIN_SQLSERVER \
--password=PASSWD_SQLSERVER \
--mode=connection-time
Este comando implementa otros modificadores que nos permitirán comprobar otros indicadores de SQLServer.

Google Reader

Google Reader es una herramienta muy útil de Google, que conocí gracias a Puche, y que he recomendado un motón de veces a la gente, en especial a mi hermano Pepe y mi hijo Jose Miguel... pero no consigo que lo usen ni obligándolos :(


GoogleReader es una simple herramienta de sindicación de noticias XML (RSS, OPML, etc), y como cualquier otra, tiene la gran ventaja de que ahorramos un montón de tiempo para ponernos al día de lo que pasa en aquellos blogs y sites que nos interesa seguir a diario: No tenemos que ir uno a uno, visitándolos, esperando que cargue la publicidad, y que al final nos despista y desconcentra. Al ser online, nos permite que podemos consultar nuestros feeds desde cualquier equipo conectado a la red, y al tratarse de Google, nos hace sugerencias de qué otros feeds pueden interesarnos, viendo el contenido de los que ya estamos suscritos. Como añadido, podemos compartir aquellas noticias de los feeds a los que estamos suscritos, para que les aparezca también a nuestros contactos de GMAIL, de forma que podemos ver aquellos que otros de nuestros contactos considera interesante, y así abrirnos nuevas espectativas. Una caña. Resulta muy, muy útil. Lo uso a diario desde hace un montón de tiempo.
Pero no todo son ventajas: Para mi gusto, creo que deberían revisar:
  • Las listas tardan unos segundos en cargar (a tramos) y se nota pesado
  • Cuando llevo dos o tres días sin leer mi reader, la aplicación me estresa: Me dice que tengo pendientes ¡400 mensajes! .. y eso me estresa ... deberían darse cuenta que dedico unos 15 a 30 minutos a leer el reader, y lo habitual es que lea de 50 a 90 post. Lo que supere eso, prefiero casi ni saberlo.
  • ¿Para qué nos colocan dos opciones Share? ¿Para qué sirve Like?

A pesar de esto, os recomiendo encarecidamente que lo useis si quereis ahorrar tiempo a diario.

Backups de Oracle con RMAN


Siempre tengo que buscar esto por Internet. La foto que he seleccionado para la ocasión, evoca la necesidad de tener buenos backups.

RMAN (Recovery Manager) es la herramienta de Oracle para poder hacer backups físicos de nuestra BBDD. Un backup físico, es a fín de cuentas, como copiar los ficheros DBFs que forman los TableSpaces de nuestra BBDD a un lugar seguro (de ahí, lo de copia de seguridad), pero claro, si lo hiciéramos con el comando COPY del sistema operativo, el estado de la copia de seguridad sería inconsistente, porque no todos los DBFs estarían sincronizados con los cambios en nuestra BBDD a la misma hora, por lo tanto, lo mejor es hacer esta copia con la base de datos parada.
Claro que no todas las bases de datos se pueden parar, para hacerles backup, por lo que para poder hacer un backup físico con Oracle arriba, necesitamos que la base de datos esté configurada en modo ArchiveLog. En ese caso, podremos hacer backup físico en caliente (que se dice).
Para ilustrar el procedimiento, vamos a lanzar un backup físico al directorio /opt/backups_oracle/backupset/, por lo que, lo primero será crear el directorio donde dejaremos la copia.

mkdir -p /opt/backups_oracle/backupset/controlfiles
chown -R oracle.oinstall /opt/backups_oracle

Nos convertimos en usuario oracle, y lanzamos RMAN usando el catálogo local (esto son los ControlFiles de la propia BBDD).
su - oracle
$ORACLE_HOME/bin/rman target / nocatalog

Ya en la consola de RMAN ejecutaremos los siguientes comandos:
RMAN>

-- Mostrar nuestr política de backup
SHOW RETENTION POLICY;

-- Configurar: solo conservaremos dos backups físicos
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

-- Hacer copia también de los controlFiles.
CONFIGURE CONTROLFILE AUTOBACKUP ON;

-- Decirle el directorio donde dejar los backups de estos
-- controlfiles...
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK \
TO '/opt/backups_oracle/backupset/controlfiles/BBDD_%F.ctl.bck';

-- Decirle que el dispositivo por defecto sera el disco
CONFIGURE DEFAULT DEVICE TYPE TO DISK;


-- Decirle el directorio donde dejar la copia de los Datafiles
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT \
'/opt/backups_oracle/backupset/%T__%d_%p_%s.bck';

-- No limitar el tamaño de la copia
CONFIGURE MAXSETSIZE TO UNLIMITED;

-- salir :)
RMAN> exit;

Con estos comandos estamos configurando nuestra política de backup, donde lo más significativo es que le decimos el directorio donde debe dejar los backups y que como máximo conservaremos dos copias físicas. Esto se guardará en los controlfiles de la BBDD, ya que no estamos usando un catálogo global. Esto es importante porque significa que tenemos que guardar copia de los controlfiles junto al backup de Oracle.
Una vez configurada nuestra política de copia, podremos lanzar el backup de Oracle ejecutando...
RMAN>

-- Hacer backup de los Datafiles
BACKUP DATABASE;

-- Borrar los archivelogs, obsoletos
BACKUP ARCHIVELOG ALL DELETE INPUT;

-- Hacer copia extra de los controlfiles
COPY CURRENT CONTROLFILE TO \
'/opt/backups_oracle/backupset/controlfiles/control%u.copia';

-- Borrar las copias obsoletas (según RETENTION POLICY REDUNDANCY)
DELETE NOPROMPT OBSOLETE;

-- salir :)
RMAN> exit;

Además, sería bueno conservar junto al backup el BDID de la BBDD...
su - oracle
sqlplus /nolog

SQLPLUS> connect /as sysdba;

SQLPLUS> select DBID from v$database;

... y una copia del SPFILE que usa la BBDD para arrancar (que podemos copiar usando el comando COPY del sistema Operativo)
su - oracle
sqlplus /nolog

SQLPLUS> connect /as sysdba;

SQLPLUS> show parameter pfile;

La foto la he sacado del album de godog en flickr

Configurar PHP para conectar a Oracle

En algunas ocasiones nos encontramos que la base de datos a la que tenemos que conectar desde PHP es Oracle en vez de MySQL, y el problema suele ser que no el yum install php-oracle o apt-get install php-oracle no nos funciona.
¿Qué podemos hacer? ... os cuento lo que yo hago:

  1. Lo primero que debemos hacer es descargar los RPMs del InstantClient de Oracle en /opt/software/oracle. Nos servirán oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm y oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm. Luego los instalaremos ejecutando:
    rpm -ivh /opt/software/oracle/oracle-instantclient11.1-*
  2. Añadir al entorno las variables que necesita Oracle para ejecutarse. Para ello, añadir las siguientes lineas al fichero /etc/profile:
    export ORACLE_HOME=/usr/lib/oracle/11.1/client
    export NLS_LANG=spanish_spain.WE8ISO8859P15
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/:/lib:$LD_LIBRARY_PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    export PATH=$PATH:$ORACLE_HOME/bin
    Sería recomendable cerrar sesión y volverla abrir para que se carguen estas variables en nuestro entorno.
  3. Lo siguiente será copiar un fichero tnsnames.ora al directorio $ORACLE_HOME/network/admin desde otro servidor de aplicaciones, en el que ya nos funcione la conexión a la BBDD de Oracle.
  4. Para instalar las librerías de Oracle, lo haremos mediante PECL, que es algo así como el CPAN para Perl, pero para PHP.
    yum install php-pear php-devel

    pecl install oci8
    Cuando nos pregunte, decirle que autodetecte la instalacion. Cuando instalamos lo hacemos desde los RPM lo hace automaticamente. Al terminar de compilar e instalar nos habrá dejado la libreria en /usr/lib/php/modules/. Ahora deberíamos incluirla en /etc/php.ini añadiendo la siguiente línea dentro de la sección de Dynamic Extensions, entorno a línea número 620:
    extension=oci8.so
  5. Reiniciar el servicio de Apache, para que PHP cargue las librerías de Oracle...
    /etc/init.d/httpd restart
  6. Crear un fichero /var/www/html/infophp.php con el siguiente contenido:
    <?php
    phpinfo();
    ?>
    Abrir la URL desde un navegador http://MISERVIDOR/infophp.php, para comprobar las variables de entorno y que PHP ha cargado la librería oci8.
  7. Cuando hayamos comprobado, que ya tenemos el PHP configurado para poder conectar a Oracle, podremos crear nuestra primera página:
    <?php

    # Inicializar la conexión a Oracle
    $conn = oci_connect('XXLOGINXX', 'XXCONTRASEÑAXX', 'XXSIDXX');

    # Preparar la Query
    $query = 'select table_name from user_tables';

    # Conectar realmente y lanzar la consulta...
    $stid = oci_parse($conn, $query);
    oci_execute($stid, OCI_DEFAULT);

    # Lanzar la consulta
    while ($row = oci_fetch_array($stid, OCI_ASSOC)) {

    # Recuperar las filas de la consulta
    foreach ($row as $item) {
    echo $item." ";
    }
    echo "<br>\n";
    }

    # Cerrar la conexión con Oracle
    oci_free_statement($stid);
    oci_close($conn);

Cuando reiniciemos el servidor seguramente nos habrá dejado de funcionar. Es importante añadir al script /etc/init.d/apache, después del bloque de comentarios inicial la línea:
. /etc/profile
Esto pasa porque el cliente Oracle necesita estas variables definidas en el entorno, y cuando se reinicia el servidor, el proceso init, no incializa este entorno y ejecuta estos ficheros. Al añadirlo al demonio de arranque de Apache, nos aseguramos que Apache las tenga inicializadas cuando init lo llame durante el inicio del servidor.

La foto la he sacado del album de CalEvans en flickr

Feliz navidad y próspero año nuevo



Felíz navidad a todos y próspero año nuevo. Mis mejores deseos para el año que viene haga que se cumplen vuestros sueños.

La imagen la he sacado de http://www.funny-potato.com/blog/category/christmas, vía google images.

Plugin aggregate para Cacti

Una vez se tiene instalada la arquitectura de plugins para nuestro Cacti, podremos empezar a instalar nuevos plugins. Entre los plugins disponibles nos encontramos con el plugin aggregate, que nos permitirá crear nuevas gráficas de agregados a partir de otras ya existentes: Yo, por ejemplo, suelo usarlo para aglutinar en una única gráfica, el consumos de RAM y CPU de todas las máquinas virtuales de un mismo servidor ESX.

En la misma página del plugin, el autor ha publicado un manual en PDF muy completo de cómo instalarlo y usarlo, pero básicamente esto consistirá en: descargarnos la última versión, descomprimir el tgz en la carpeta /var/www/cacti/plugins y añadir el nombre de la carpeta al array php de los plugins, en el fichero /var/www/cacti/include/global.php. Luego debemos asegurarnos de activarlo desde la interfaz web del administrador de Cacti.

La foto la he sacado del album de Hipopótominha en flickr