Mostrando entradas con la etiqueta Monitorización. Mostrar todas las entradas
Mostrando entradas con la etiqueta Monitorización. Mostrar todas las entradas

miércoles, 22 de julio de 2009

Appliance Redmine con Ubuntu JeOS (2-Configurando Webmin)


Esta es la 2ª parte de cómo crear un appliance de Redmine 0.8.4 con Ubuntu Jeos 8.04.3 y Webmin usando el Bitnami Redmine Stack. Este artículo se centra en la integración de los tres para obtener una plataforma estable y manejable. Todos los pantallazos de Webmin son usando el tema Stressfree.

Una vez creada y funcionando la máquina virtual (ver entrada anterior), hay que asegurarse de que dure dura, asi que vamos a "endurecerla" mediante Webmin, una herramienta para manejar servidores que, bien manejada, ayuda mucho a la administración. Primero vamos a borrar los módulos que no se usan en el appliance, desde Webmin ==> Configuración de Webmin ==> Modulos de Webmin ==> Delete (ojo, por dependencias entre sí no se pueden borrar de golpe):
  • Linux Bootup Configuration
  • LDAP Users and Groups
  • PHP Configuration
  • Kerberos5
  • LDAP Client
  • SMART Drive Status
  • Sendmail Mail Server
  • System Logs NG
  • Shoreline Firewall
  • TCP Wrappers
  • SpamAssassin Mail Filter
  • WU-FTP Server
  • Webalizer Logfile Analysis
  • Squid Proxy Server
  • Squid Report Generator
  • Usermin Configuration
  • Voicemail Server
  • idmapd daemon
  • Security Sentries
  • QMail Mail Server
  • ProFTPD Server
  • Procmail Mail Filter
  • SSL Tunnels
  • Samba Windows File Sharing
  • Postfix Mail Server
  • PostgreSQL Database Server
  • NIS Client and Server
  • OpenSLP Server
  • PPP Dialin Server
  • PPP Dialup Client
  • PPTP VPN Client
  • PPTP VPN Server
  • Printer Administration
  • MON Service Monitor
  • NFS Exports
  • Exim Mailserver
  • Filter and Forward Mail
  • Majordomo List Manager
  • Frox FTP Proxy
  • HTTP Tunnel
  • Heartbeat Monitor
  • IPsec VPN Configuration
  • Jabber IM Server
  • LDAP Server
  • Extended Internet Services
  • MySQL Database Server
  • Fetchmail Mail Retrieval
  • Cluster Usermin Servers
  • Cluster Users and Groups
  • Cluster Webmin Servers
  • Cluster Copy Files
  • Configuration Engine
  • Cluster Cron Jobs
  • DHCP Server
  • Cluster Shell Commands
  • Disk Quotas
  • Cluster Software Packages
  • Dovecot IMAP/POP3 Server
  • BIND DNS Server
  • Bacula Backup System
  • CD Burner
  • CVS Server
  • Cluster Change Passwords
  • ADSL Client
Luego, como hay que enterarse si pasa algo "anormal" y tener prueba de ello en la Bandeja de Entrada, se crean las alertas básicas de aviso entrando en Otros ==> Estado de Sistema y Servidor:


Lo primero de todo es configurar el envío de alertas mediante email y que revise cada x tiempo los monitores que añadiremos a continuación:


El primer monitor que añadimos es Alive System, que indica los encendidos/apagados,


luego añadimos el de Espacio en disco, para indicarle sobre "\" (todo el disco) que avise cuando haya menos de 1 Gb. libre (por ejemplo),


Estado de Interfaz de Red indica si hay conexión de red,


Media de Carga indica cuando hay un consumo de recursos (CPU) excesivo,


Memoria Libre no tiene mayor explicación,


Chequear Proceso sirve para comprobar si hay un comando en ejecución; usaremos /opt/ruby/bin/.ruby.bin /opt/ruby/bin/mongrel_rails start para comprobar que el clúster de Mongrel está activo, indicando en Número de procesos que deben existir para que el monitor lo considere como ejecutándose el nº de nodos de Mongrel que tengamos iniciados,


y ya sólo falta el Servidor Web Apache,


con lo que nos tiene que quedar esta bonita pantalla


donde se puede apreciar de un rápido vistazo el estado del sistema. Por cierto, Apache figura mal porque no se ha configurado... en Servidores ==> Servidor Web Apache ==> Configuración del módulo, se pueden establecer los parámetros para que apunte al servidor web Apache que está instalado con Redmine:


Ahora vamos a tocar el Firewall por encima. Entramos en Red ==> Cortafuegos Linux y dejamos la siguiente configuración (ojo al orden de las reglas):


Ahora a mantener la hora sincronizada con un servidor externo, para que no haya problemas... Hardware ==> Hora del Sistema ==> Time Server Sync:


Ahora vamos a crear una serie de Comandos Personalizados que nos faciliten la vida, entrando en Otros ==> Comandos personalizados:


Estado de Redmine, comprobar el estado de los servicios: /opt/ctlscript.sh status
Parar Redmine, detener los procesos de Mongrel: /opt/ctlscript.sh stop redmine
Arrancar Redmine, iniciar los procesos de Mongrel: /opt/ctlscript.sh start redmine
Parar Apache, detener el servidor web: /opt/ctlscript.sh stop apache
Arrancar Apache, iniciar el servidor web: /opt/ctlscript.sh start apache
Contenido de carpeta files, ficheros subidos a Redmine: dir /opt/apps/redmine/files

Y también crearemos Editores de Archivo para facilitar las modificaciones a mano de archivos de configuración de Redmine:
  • Editar redmine.conf:


  • Editar database.yml:



Editar mongrel_cluster.yml:


Con esto se facilitan las modificaciones puntuales de Redmine, que luego viene el jefe con prisas y ya se sabe...

Y por supuesto, no olvidarse de rotar los logs de Redmine ni de Apache... ¿Que qué son los logs? Son los registros de la aplicación, muy útiles para analizar el uso y los errores de una aplicación, pero si no se hace nada con ellos pueden crecer hasta llenar el disco y eso es un problema. Aquí, una vez más, nos apoyamos en Webmin y la utilidad de rotación de logs, que cogerá esos ficheros cada n días, los comprimirá y, tras truncarlos (borrar su contenido), dejará los anteriores comprimidos (n copias) en la carpeta que le digamos. Es más, antes de ello parará la aplicación y a continuación la reiniciará (segundos), tanto en el caso de Apache como en el de Redmine. Vamos a ver cómo entrando en Sistema ==> Rotación de históricos (Logs) y añadiendo la de Apache en Agregar un nuevo archivo de bitácora para rotar:


Luego añadimos la rotación de logs para Redmine:


Con esto tenemos la rotación de logs controlada y sabemos que por aquí no va a romperse. Los ficheros quedan en una carpeta desde donde los podremos mover, enviar por email o dejarles que se borren (guarda un histórico de n rotaciones):


Y si nos queremos asegurar que funciona correctamente, abajo hay un botón de Rotar Ahora. Este es el aspecto de la carpeta de logs de Redmine antes de rotar:


Durante la rotación de los ficheros observamos la salida de los comandos que se ejecutan antes y después, en este caso parando Redmine antes de rotar e iniciándolo tras acabar el proceso (asi no se escapa nada):



El aspecto de la carpeta de logs de Redmine después de la rotación es este, donde puede apreciarse que los ficheros han quedado vacios:


¿Y dónde están ahora...? Comprimidos, en la carpeta que hemos indicado antes:


Por cierto, ejecutando esto diariamente se minimiza el uso de disco y se reciclan los procesos (al reiniciar los servicios), liberando memoria.

Si la política de la empresa te pide almacenar 6 meses de logs, ya sabes, a hacer copia de la carpeta todas las semanas; no recomiendo almacenar muchos logs dentro del appliance por la posible falta de espacio en disco y porque se almacenan mejor en un servidor de ficheros.

Y lo último que nos queda es comprobar que la rotación de logs está activa entrando en Sistema ==> Tareas Planificadas:


Y hasta aquí hemos llegado por hoy, consiguiendo que el appliance de Redmine gane en seguridad, estabilidad y facilidad de administración gracias a la integración con Webmin. En la próxima entrega veremos como optimizar el funcionamiento de Redmine para poder exprimirlo al máximo.

domingo, 15 de marzo de 2009

Monitorizando tu equipo en Linux con CONKY

Yo, que soy muy curioso, gusto de monitorizar constantemente el uso de red y CPU, asi como la memoria gastada por los programas. En Linux viene un programa tipo el Administrador de Tareas de Windows, llamado Monitor del sistema:


Este programa no me acaba de gustar porque el mero hecho de tenerlo abierto consume bastantes recursos. En cambio uso CONKY, un sencillo software que me permite hacer justo lo que quiero:


Esta representación es justo lo que a mi me interesa y la consiguo usando un fichero de configuración en el que es posible indicar línea a línea qué quiero mostrar:

# CONFIGURACIÓN DEL PROGRAMA Y VENTANA
# http://adminsq3.blogspot.com
# Para ver una lista de opciones ver: http://conky.sourceforge.net/config_settings.html
background yes
font Zekton:size=8
xftfont Zekton:size=8
use_xft yes
xftalpha 0.5
update_interval 1.0
total_run_times 0
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
double_buffer yes
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
minimum_size 220 5
maximum_width 220
default_color d7d7d7
default_shade_color black
default_outline_color black
alignment top_right
gap_x 10
gap_y 30
no_buffers yes
cpu_avg_samples 2
override_utf8_locale no
uppercase no
use_spacer no

# Cabeceras (Anarajando)
color0 FF8C00
# Resaltado (amarillo)
color1 ffff00
# separadores
color2 98C2C7
# rojo
color3 ff0000
# verde
color4 00ff00
# amarillo
color5 ffff00
# verde oscuro
color6 42ae4a
TEXT

# APARTADO SISTEMA
${color1}SISTEMA ${color6}${hr 1 } $color

# Información del sistema
Nombre Host: ${color1}$alignr$nodename $color
Kernel: $alignr$kernel
Encendido: $alignr$uptime
Procesos: ${alignr}$processes ($running_processes en ejecución)

# Datos de CPU
CPU ${alignc} ${freq}MHz ${alignr}(${cpu cpu0}%)
# Barra de uso para la CPU 0
${color 00ffff}${cpubar 4 cpu0}${color}
# Gráfico para la CPU 0
${cpugraph cpu0 42AE4A 42AE4A}
# Indicadores de uso para cada Core
${color6}Core 1: ${color6} ${freq_dyn_g cpu1}Ghz ${color lightgrey}${cpu cpu1}% $alignr ${color6}Core 2:${color6} ${freq_dyn_g cpu2}Ghz ${color lightgrey}${cpu cpu2}%$color

# Indicadores de uso máximo de CPU
Max CPU $alignr CPU% MEM%
${top name 1}$alignr${top cpu 1} ${top mem 1}
${top name 2}$alignr${top cpu 2} ${top mem 2}
${top name 3}$alignr${top cpu 3} ${top mem 3}

# Indicadores de uso máximo de memoria
Max MEM $alignr CPU% MEM%
${top_mem name 1}$alignr${top_mem cpu 1} ${top_mem mem 1}
${top_mem name 2}$alignr${top_mem cpu 2} ${top_mem mem 2}
${top_mem name 3}$alignr${top_mem cpu 3} ${top_mem mem 3}

# APARTADO MEMORIA
${color1}MEMORIA ${color6}${hr 1 } $color

RAM ${alignr}$mem / $memmax ($memperc%)
# Barra de uso de memoria
${color 00ff00}${membar 4}${color}
SWAP ${alignr}$swap / $swapmax ($swapperc%)
# Barra de uso de memoria de intercambio
${swapbar 4}

# APARTADO SISTEMA DE ARCHIVOS
${color1}SISTEMA DE ARCHIVOS ${color6}${hr 1}${color}

# Información del disco 0 (/)
HD-0: ${alignr}libre ${fs_free /} / ${fs_size /} total
${color1}${fs_bar 4 /}${color}

# Información del disco 1 (media/disk-1)
HD-1: ${alignr}libre ${fs_free /media/disk-1} / ${fs_size /media/disk-1} total
${color1}${fs_bar 4 /media/disk-1}${color}

# Información del disco 2 (media/disk)
HD-2: ${alignr}libre ${fs_free /media/disk} / ${fs_size /media/disk} total
${color1}${fs_bar 4 /media/disk}${color}

# APARTADO RED
${color1}RED ${color6}${hr 1}${color}

Dirección IP: $color1 ${addr eth0} $color

Down ${downspeed eth0} k/s ${alignr}Up ${upspeed eth0} k/s
# Gráficos de descarga y subida
${color4}${downspeedgraph eth0 25,107} ${color3}${alignr}${upspeedgraph eth0 25,107}
${color}Total ${totaldown eth0} ${alignr}Total ${totalup eth0}


Ojo, si copias y pegas el código en tu fichero conky.rc, borra el texto en verde o copialo de aquí.

El código no es difícil de entender, si uno quiere personalizarlo a su gusto. Además es posible mostrarlo tanto en ventana como integrado en el fondo del escritorio (lo más vistoso):


Esto es la pinta que tiene el mio, pero si quieres ver más pantallazos, tienes los oficiales aquí. Si necesitas una lista de las variables que puedes emplear, la tienes aquí, mientras que para la configuración general del programa debes usar estas.

viernes, 16 de enero de 2009

Monitorizando equipos (I)

Una de las tareas que te encargan nada más llegar a un puesto de trabajo es la de documentar todos los equipos lo que tienen funcionando: servidores, estaciones de trabajo, modificaciones en los mismos, software instalado, etc... Para registrar todo esto existen multitud de herramientas de pago, pero soluciones gratuitas también., empezaré por las "pequeñas".

Una que siempre me gustó bajo Windows fue SYDI (Script Your Documentation Instantly): unos scripts (.vbs) que recogen información de Windows (muy buena y completa), SQL Server (le hacen falta unos retoques al script), MS Exchange (beta) y Linux (nunca la probé, pero parece "very buggy"). Como se ve, la única que me gusta es la de Windows: Con una línea de comandos (y los privilegios necesarios) puedes documentar un Active Directory con equipos que corran Windows 2000 o superior usando consultas LDAP para especificar los equipos.
Los informes por equipo se pueden generar como XML (para ver individualmente como HTML o parsear varios en Excel y compa) y en formato Word para presentar al jefe:


Tal vez a alguien le interese combinarlo con Silent Runners, otro script (.vbs) que detecta lo que se ejecuta al arrancar Windows y genera un fichero de texto con ello. Comparando 2 ficheros veremos las diferencias, mejor si usas WinMerge:



En modo gráfico también existe Autoruns de Sysinternals, otra de las "imprescindibles" a la hora de revisar lo que ejecuta un equipo:


lunes, 5 de enero de 2009

Monitorizando programitas... (II)

Otra de las herramientas indispensables para realizar el seguimiento de programas es el Process Monitor de Sysinternals (ahora absorbido por Microsoft). Este programa permite escuchar todo lo que se hace en el equipo, además de poder guardarlo o filtrarlo para posteriores búsquedas. Muy útil cuando un programa intenta acceder a algún sitio y no genera ningún error que te de la pista.


Ojo, la cantidad de información que se genera es brutal, recomiendo filtrar primero por Nombre de usuario y Nombre de ejecutable para no sobrecargarlo, aunque todo depende del uso que se le quiera dar.

sábado, 27 de diciembre de 2008

Monitorizando programitas... (I)

Frecuentemente hay problemas con aplicaciones que dependen de varios servidores, y hay que buscar los problemas en multitud de sitios:
  • Visores de eventos de Windows.
  • Ficheros de LOG generados por los programas.
  • Nuevos registros en tablas (SQL Server).
  • Tráfico UDP.
  • RSS.
  • StdOut y StdErr.
Pues esto se simplifica bastante usando la herramienta LogView4NET (de Sourceforge, claro). Esta pequeña aplicación (requiere .NET 2.0 instalado) permite crear una serie de "escuchas" donde nosotros le digamos, para luego poder grabar estas configuraciones en un fichero XML de configuración en el que se definen qué palabras o frases hay que resaltar y cuales hay que obviar.


El resultado es una pantalla de fondo negro en la que van apareciendo todos los eventos que necesitemos para la depuración del problema. Esto resulta muy útil para depurar tanto aplicaciones de factura propia como aplicaciones comerciales haciendo doble-clic al fichero de configuración para abrir la pantalla de monitorización.


Yo lo uso para monitorizar todos los visores de eventos de una red de servidores en tiempo real, con un fichero para los servidores de Active Directory, otro para los servidores de SQL Server, otro para los servidores de IIS, etc... de tal manera que en una sola pantalla puedo ver todo lo que está pasando en el conjunto de servidores.


LogView4NET es una herramienta muy útil para la depuración de aplicaciones desarrolladas en la propia empresa, pero hace falta que los desarrolladores colaboren dando los puntos de control a examinar... Todavía no he encontrado ningún software que me ayude a ello, aunque puede que recurriendo al hardware lo consiga: