Estadísticas sobre uso de recursos en GNU/Linux
Si son sysadmins, necesitarán alguna forma de ver cómo se utilizan los recursos de nuestros sistemas, sobre todo cuando las cosas andan mal. Ver estadísticas sobre el uso de recursos permite tomar varias decisiones, como comprar hardware, separar servicios, virtualizar, o para solucionar errores en caso de procesos glotones, entre otras cosas.
Si bien en GNU/Linux todas las estadísticas se almacenan en el /proc, es necesario contar con alguna herramienta que las interprete y las haga más amigables. Para ello, contamos con sysstat, un paquete que provee varias herramientas para monitorear la performance del sistema y el uso de recursos.
Los componentes más interesantes de sysstat son:
- sar: reúne, reporta y almacena información de actividad del sistema (CPU, memoria, discos, interrupciones, interfaces de red, TTY, tablas del kernel, etc). Esta herramienta provee muchas opciones para filtrar los datos que deseamos obtener, y permite almacenar los resultados en archivos binarios que luego se pueden visualizar con el mismo sar. Es posible indicar la cantidad de muestras a tomar y el intervalo de tiempo entre muestras.

- sadc (system activity data collector): se encarga de recoger información del sistema una dada cantidad de veces, a intervalos específicos de tiempo, y se utiliza como backend de sar. Escribe en formato binario en un dado archivo o en la standar output. Si no se especifica la cantidad de muestras a tomar, éste escribe infinitamente.

- sa1: un shell script que utiliza sadc para generar el archivo binario /var/log/sa/sadd o /var/log/sysstat/sadd (donde dd es el día del mes, por ejemplo sa16 indica el día 16). Este script está designado para utilizarse con cron (ver /etc/cron.d/sysstat).

- sa2: otro shell script que utiliza sadc para generar reportes diarios en el archivo binario /var/log/sa/sardd o /var/log/sysstat/sardd (donde dd es el día del mes). Este script también está designado para utilizarse con cron (ver /etc/cron.daily/sysstat).

- sadf: permite mostrar el contenido de archivos binarios sar en diferentes formatos (CSV, XML, etc). El formato de salida default es uno fácilmente parseable por diferentes herramientas shell como grep, awk, sed, etc.

- pidstat: reporta estadísticas de procesos como uso de CPU, memoria, I/O, etc. Como en sar, es posible indicar la cantidad de muestras y el intervalo de tiempo entre muestras.
Si deseamos medir la utilización de recursos en el server, lo mejor es dejar que sa1 y sa2 generen los correspondientes logs durante un día, una semana, un mes o el tiempo que quieran, y luego visualizarlos con sar. Por defecto las muestras se toman cada 10 minutos, lo cual provee un buena visión sobre como se utilizan los recursos.
Otra posibilidad es ejecutar sar con el parámetro "-o archivo" para almacenar los datos en un archivo binario, e indicarle el intervalo de segundos entre muestras y la cantidad de muestras a tomar. Por ejemplo, el siguiente comando almacena todos los datos de utilización de recursos en el archivo "revision" cada 5 minutos:
sar -A -o revision 300
Para poder parsear el archivo recién generado con sar, es necesario utilizar el parámetro -f, por ejemplo:
sar -A -f revision
En la mayoría de los casos lo que necesitamos visualizar es uso de memoria, CPU, disco, swap y red. Todo esto se puede hacer con el siguiente comando:
sar -rudpW -n DEV,SOCK
donde:
-r muestra uso de memoria
-u muestra uso de CPU
-d muestra uso de disco
-p imprime el nombre de los dispositivos de forma agradable (usado con -d)
-W muestra estadísticas de swap
-n DEV,SOCK muestra estadísticas de las interfaces de red y cantidad de sockets utilizados.

Si no se utiliza el parámetro -f, sar toma los datos de los logs generados por sa1 y sa2. En caso de utilizar un archivo binario generado con sar (por ejemplo revision), pueden usar el siguiente comando:
sar -rudpW -n DEV,SOCK -f revision
Como podrán observar, la salida de sar no es muy amigable para ser filtrada y/o graficada y/o almacenada en una base de datos, así que lo mejor es utilizar sadf. sadf provee un set de opciones propias y permite utilizar las opciones de sar luego de dos giones (--). Entre las opciones propias de sadf, son interesantes:
-d imprime la salida con los campos separados con punto y coma (;)
-D igual a -d pero utiliza timestamp en lugar de fechas human friendly
-h para imprimir los resultados en una sola línea
-p salida default, amigable para los parsers
-x imprime la salida en formato XML
El comando del ejemplo anterior, utilizando sadf para ser parseado fácilmente, quedaría:
sadf -- -rudpW -n DEV,SOCK
o con -h para separar fácilmente los campos en una planilla (Calc, Excel, etc)
sadf -h -- -rudpW -n DEV,SOCK
Además de las estadísticas anteriores, para hilar más fino a la hora de ver quién gasta los recursos, es necesario tener estadísticas de los procesos que se están ejecutando. Para ello contamos con pidstat, cuyos datos arrojados son similares a los de sar, pero por proceso. pidstat acepta varios argumentos para mostrar distintas estadísticas, pero para una vista básica, me alcanza la siguiente configuración:
pidstat -ru -h 300 | sed '1,2d'
donde:
-r muestra uso de memoria
-u muestra uso de CPU
-h muestra las estadísticas horizontalmente (todo en una sola tabla).
300 es el intervalo de tiempo (en segundos) para tomar muestras
sed '1,2d' elimina las primeras dos líneas de la salida (son un comentario y una línea en blanco)
pidstat no ofrece la opción de crear un archivo binario para almacenar los datos, por lo cual debemos redirigir la salida a un archivo para poder filtrarla luego.


Si lo que quieren son gráficos de utilización (siempre algo visual ayuda a captar mejor los datos), podemos utilizar la salida de sadf y graficar con Calc (o Excel), con gnuplot, o con la interesante Sysstat Graph. No tuve la oportunidad de probar esta última, pero aparenta ser muy útil. Está escrita en PHP, por lo cual es fácil de instalar.


Referencias

- Sysstat man
- How do I Find Out Linux CPU Utilization?
Configuración inicial de un PacketShaper
Un nuevo reto en redes se me presenta y felizmente afronto. Esta vez toca configurar un dispositivo denominado BlueCoat PacketShaper que permite medir la performance de aplicaciones que utilizan la red, categorizar y administrar el tráfico Web basándose en el contenido, garantizar calidad de servicio (QoS) y contener el impacto del tráfico indeseable. Realmente no había sentido nombrar este dispositivo, así que me sentía ansioso por ponerle las manos encima.
Como no hay mucha información en español (bah, en inglés tampoco...), me parece interesante comentarles cómo configurar uno de estos "bichos", por si les toca hacerlo en algún momento.

El dispositivo presenta tanto una interfaz Web como una por línea de comandos (CLI). Como es costumbre en este tipo de dispositivos, presenta un port serie a través del cual es posible accederlo para la configuración inicial.
En este artículo describiré cómo realizar la configuración inicial, necesaria para comenzar a analizar tráfico y crear reglas. Más adelante espero escribir al menos un artículo (espero sean más) sobre la creación de reglas para priorizar y analizar tráfico.

Como ya les comenté en los artículos sobre configuración de switchs y APs, necesitarán algún programa como minicom que se comunique a través del port serie, con una configuración 9600 bps - 8bits - sin paridad - 1 stop bit - sin control de flujo. Si están perdidos en este punto, lean el artículo Acceder dispositivos Cisco desde GNU/Linux con minicom.

Al revisar el aparato nos encontramos básicamente con 3 ports RJ45, uno denominado INSIDE, otro OUTSIDE y el último MGMT (Management). Dependiendo la estructura de nustra red y de lo que deseemos hacer con el PacketShaper, variará la forma en que conecten la entrada y la salida, pero en general se aplica la regla "placa INSIDE conectada a nuestra red y OUTSIDE al router/firewall que sale a la WAN (posiblemente Internet)". Esto es, si deseamos administrar el tráfico de internet, colocamos el PacketShaper entre nuestra red e internet de la siguiente forma:
RED Interna <----> INSIDE
OUTSIDE <----> firewall <----> router <----> Internet
La placa MGMT la utilizaremos para configurar el dispositivo una vez que le hayamos seteado una IP. Es conveniente que conectemos esta placa a una red segura porque es la puerta de entrada al dispositivo.
El dispositivo es "transparente" para nuestra red, no se necesita configurar IPs para las placas INSIDE y OUTSIDE. Es como si pincháramos el cable de red que conecta la red interna con el router y viéramos el tráfico que pasa. Incluso si el PacketShaper está apagado, la red funciona normalmente dado que se puentean las interfaces INSIDE y OUTSIDE.

Ahora si, nos conectamos al dispositivo a través de la conexión serie y abrimos minicom, gtkterm, cutecom, o HyperTerminal (si son Windowseros), y comenzamos la configuración.
Por suerte el software para realizar la configuración inicial es bastante amigable y nos va guiando a través de diferentes preguntas con breves explicaciones para que podamos entender qué estamos haciendo. La configuración que les propondré es para utilizar un PacketShaper sin PolicyCenter en una red Gigabit, aunque es lo suficiente genérica para poder utilizarla en otras configuraciones. La versión de PacketWise (soft del PacketShaper) que estoy utilizando es de la rama 8.4. A modo de itemizado, los primeros pasos de la configuración son:
- Elegir el modo local (standalone) porque vamos a configurar el PacketShaper de forma independiente, y no a través del software PolicyCenter (modo shared). Esto, claro está, cambiará si poseen PolicyCenter. En mi caso sólo poseo un PacketShaper y no es necesario.
- Setear una dirección IP (ej: 192.168.1.250), para poder acceder el dispositivo remotamente a través de la interfaz Web o ssh.
- Configurar la velocidad de las interfaces INSIDE y OUTSIDE (10bt, 100bt, auto) en auto, para que negocie la velocidad (aparentemente la única forma de funcionar en Gigabit es eligiendo auto).
- Setear el gateway de la red donde se encuentra conectado el dispositivo.
- Si se desea, en el siguiente paso es posible (y muy recomendable) configurar un servidor de DNS para resolver las direcciones.
- Tambiés es posible configurar el nombre de dominio, para ser agregado en lookups de nombres non-fully-qualified.

Passwords:
Luego de la configuración básica, el PacketShaper nos permite configurar dos passwords. Uno para "mirar" (look) el estado, reglas, reportes, etc, del PacketShaper, y otro para "tocar" (touch) que además de "mirar" permite configurar el aparato. Como siempre, es conveniente configurar ambos passwords.
En este punto encontré que (increíblemente) el sistema limita el largo del password a 19 caracteres. Todavía no puedo creer como sigue existiendo software que limite el largo de los passwords...

Data rates:
A continuación el software nos permite configurar las velocidades de entrada y salida, ya sea mediante números en bytes o a través de los valores simbólicos "T1","E1","10BT","Ethernet". Si elegimos "Ethernet", PacketShaper descubrirá cuál es la velocidad del link. En cualquier caso, luego el dispositivo nos recomendará valores, los cuales podemos aceptar o cambiar. Creo que lo mejor es utilizar "Ethernet" y a continuación acomodar los valores. Estos valores serán el Inbound y Outbound rate y son los que utilizaremos como ancho de banda máximo "garantizado". En general (dependiendo donde ubiquen el PacketShaper), estos valores son los de nuestra conexión a internet. Si poseemos una conexión de 3Mbps, lo máximo que entrará son 3Mbps, esto es el Inbound o datos entrantes desde internet a nuestra red. El caso del Outbound es el ancho de banda que tenemos de upload. Si poseemos una línea simétrica, el Outbound será igual al Inbound, es decir, 3Mbps.

Packet Shaping:
En el siguiente paso, es posible configurar si deseamos que el dispositivo aplique políticas de clasificación de tráfico o si simplemente deseamos ver el tráfico pasar (útil para monitorear). En mi caso, deseamos aplicar políticas, por lo cual utilizamos la opción "on".
También es posible que PacketShaper descubra aplicaciones y arme un árbol con clases basándose en en el tráfico observado. Esto es muy útil cuando no estamos del todo seguros cuál es el tráfico que existe, cuál filtrar y cuál priorizar. Mi recomendación es activar esta opción y luego agrupar/mover/eliminar las clases de acorde a la configuración que deseemos.

Configuración del horario:
El último paso de esta configuración inicial es configurar la zona horaria y la hora del dispositivo. Para la zona horaria existen strings que las identifican, los cuales pueden observar tecleando "?". En mi caso, la zona horaria es BuenosAires.
Para configurar la hora, debemos colocar un string con el formato yyyymmddhhmmss (es decir, el año con cuatro dígitos, seguido del mes, el día, la hora, y los segundos con sólo dos).


Con esto finalizamos la configuración inicial, y aceptamos salvarla en el almacenamiento. Ahora podrán acceder al dispositivo a través de la interfaz Web o ssh con la IP que configuraron anteriormente, utilizando la conexión de red al port denominado "MGMT".
Como instalar impresoras HP en Slackware 13.1

En este artículo voy a explicar el procedimiento, extremadamente sencillo, para instalar una impresora HP en un sistema Linux. A pesar de que el título indica que utilicé Slackware 13.1, el tutorial sirve para cualquier otra distribución.

La impresora que utilicé es una multifunción HP Deskjet F4480. Para las impresoras HP se dispone de los drivers libres HPLIP (HP Linux Imaging and Printing). En la mayoría de las distribuciones (como en Slackware 13.1) estos driver vienen incluidos, por lo que no es necesario instalar nada.

Para comenzar se debe conectar la impresora al puerto USB y encenderla. Luego se debe verificar que el servicio cupsd esté en ejecución (es necesario para crear al menos una cola de impresión). Para comprobarlo se puede ejecutar:
bash-4.1$ ps -lA | grep cupsd
4 S 0 2044 1 0 80 0 - 1452 epoll_ ? 00:00:00 cupsd

Si el servicio cupsd no se encuentra en ejecución, es necesario activarlo. En Slackware 13.1 se debe otorgar permiso de ejecución al script /etc/rc.d/rc.cups para que CUPS se ejecute automáticamente al iniciar el sistema. Para permitir la ejecución de CUPS se utiliza el comando:
bash-4.1# chmod +x /etc/rc.d/rc.cups

Y luego iniciamos cupsd:
bash-4.1# /etc/rc.d/rc.cups start
cups: started scheduler. [ OK ]

Teniendo CUPS en ejecución se procede a instalar el driver HPLIP correspondiente a la impresora, para esto se utiliza:
bash-4.1# hp-setup

Esto inicia un instalador gráfico muy amigable que permite instalar el driver de la impresora en tres simples pasos:

1) Seleccionar el tipo de conexión:


2) Seleccionar el dispositivo detectado:


3) Configurar el dispositivo:


Luego, desde KDE, seleccionamos K > Applications > System > Printing para editar las propiedades de la impresora.


La siguiente vez que iniciemos el sistema, veremos el ícono de HPLIP en la barra de notificaciones:



Feliz día del trabajador!