Tag Archives: tips

graficando desde la consola con gnuPlot

hace tiempo tuve la suerte de realizar un curso en RedHat sobre linux performance tunning. El curso tenia muchisima teoria y era un poco tedioso, pero hoy recorde uno de topics tratados y se me ocurrio plasmarlos aca, no solo para tenerlos a mano para la proxima sino tambien para compartirlo con ustedes.
Hoy se me planteo un cuestionamiento:

Qué programas utilizaría para graficar el estado de la memoria RAM a lo largo de todo un día, tomando en cuenta intervalos de cinco minutos?

Por supuesto que hay miles de formas de hacer esto. Se podria utilizar alguna herramienta tipo Nagios, Munin, Cacti, etc. O bien podriamos hacer algo un poco mas artesanal con herramientas como: vmstat, sar, awk, gnuplot, , free -m, ksar, etc.

Aca les dejo una forma artesanal para recolectar datos (en este caso el estado de la RAM) y graficarlo usando gnuplot.

Primero un poco de matematica:

5min = 300s
1hr = 3600s
24hs = 86400s
1dia en secs/5min en secs=86400/300=288

Una vez que tenemos el intervalo expresado en segundos y la cantidad de veces que queremos que se ejecute procedemos a correrlo y guardar el output en un fichero. En este ejemplo uso -r para obtener la info de la memoria pero podrian estar pidiendole al sar un monton de datos mas sobre el estado del CPU, net, disk, etc.

# sar -r 300 288 > ~/meminfo.out &

Una vez qe se recolecto data del dia le sacamos los datos no numericos del sar para que pueda ser graficado claramente y guardamos el output.

# tail -n +4 meminfo.out | awk '/^[01]/ {print $0}' > ~/meminfo.dat

Ahora nos toca graficar esta informacion, para esto podemos usar la interfaz interactiva de gnuplot o simplemente crear un fichero con la lista de sentencias a ejecutar:

# echo -e 'set xdata time
set timefmt "%H:%M:%S"
set xlabel "TIME"
set ylabel "Memory (Kb)"
plot "meminfo.dat" using 1:2 title "free" with lines
replot "meminfo.dat" using 1:5 title "buffered" with lines
replot "meminfo.dat" using 1:6 title "cached" with lines' > meminfo.gplot

Basicamente las sentencias le dicen a gnuplot que en el ejeX va a estar el tiempo (con un cierto formato) y en el ejeY estara expresado en Kb. Luego ploteamos 3 lineas indicandole cuantos valores y de que columna debe tomarlos, en este caso 1:2 para que tome de a 1 valor de la columna 2. (usamos replot para que se ploteen sobre el mismo grafico).

Por ultimo ploteamos (es probable qe si estamos por ssh tengamos que fowardear X11 para poder ver el ploteo):

 # gnuplot meminfo.gplot

Espero que haya quedado claro, no es la forma mas facil (seria mas sencillo instalar algo como nagios, cacti, munin o cosas asi), pero me parece bien didactica para practicar varias cosas y de paso a prender a usar gnuplot que es una herramienta super potente y muy util en algunos casos.

see you soon

 

vim: como remover los caracteres indeseados

vim_logoel otro dia me pasaron un archivo .txt de windows, el cual por un tema de encoding tenia el carriage return al final de cada linea, para qe tengan una idea, cuando abren el archivo en algun sistema GNU/Linux lo ven asi:

keylist^M
{^M
modkey = {“Mod4″, “Shift”, “Control”}^M
command = “client_toggletag”^M
keylist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }^M
arglist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }^M
}^M
}^M

es muy molesto y sobre todo si se trata de un archivo de mas de 900 lineas, en fin…obviamente el vim tiene la posibilidad de buscar y reemplazar, o de buscar y reemplazar por un string vacio (borrar lo qe encuentra), pero no podemos simplemente escribir a mano %s/^M//

ya qe ahi piensa qe el ^ es texto y no lo encuentra puesto qe por mas qe veamos ^M no se trata de dos caracteres sino de 1 solo.

la solucion es presionar ctrl+v y ctrl+m, lo que se visualiza como:

:%s/^M//

aunqe se ve igual de esta forma esta tomando el ^M como el carriage return y no como dos caracteres de texto, luego solo presionar enter y listo, nos busca todos los carriage returns qe haya en el archivo y los reemplaza por “” (cadena vacia)…en otras palabras, los borra.

zer0