El Asterisk BootCamp vuelve a Bilbao

Esta vez bajo el nombre Asterisk Advanced, pero volveremos a tener formación oficial de Digium en Bilbao! :)

Avanzada7 e Irontec organizarán el próximo curso Asterisk Advanced, que tendrá lugar en Bilbao del 20 al 24 de abril. El año pasado la experiencia fue muy buena así que tenemos el listón alto pero esperamos superarlo en esta ocasión.join-community

La pregunta que muchos tendrán es “¿voy o no voy?”. Personalmente diferencio dos tipos de perfiles de usuarios como asistentes a los BootCamp:

  • Usuarios con conocimientos básicos de Asterisk. Éstos usuarios han conocido Asterisk hace poco y acuden al BootCamp para adquirir conocimientos sobre VoIP y Asterisk.
  • Usuarios con conocimientos medios o avanzados de Asterisk. Éstos usuarios ya llevan tiempo trabajando con Asterisk y suelen acudir al BootCamp para profundizar y afianzar aún más sus conocimientos.

Si crees que perteneces a alguno de los tipos de usuarios arriba mencionados, deberías venir. :)

La otra duda de los asistentes suele ser si presentarse o no al examen para la certificación dCAP. Mi recomendación es presentarse ya que en Internet no hay mucho material disponible sobre el examen, y lo mejor es verlo por uno mismo.

El año pasado ya tuvimos algún extra como el Night BootCamp y para este año ya se nos van ocurriendo ideas así que quien venga no espere dormir en toda la semana… ¡nos vemos en abril!

Happy Asterisk learning!! :)

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Estratégia de colas “linear” en Asterisk 1.4

Todos los que llevamos algún tiempo con Asterisk hemos tenido que pegarnos alguna vez con su sistema de colas. Las colas de Asterisk no son sencillas de manejar  ya que disponen de decenas de opciones para variar su comportamiento.

Uno de los parámetros de configuración más importantes para las colas es la estrategia (strategy), que define la forma en la que las llamadas serán repartidas entre los agentes.  En Asterisk 1.4 podemos elegir entre las siguientes estrategias:

  • Leastrecent: Asigna la siguiente llamada al agente que más tiempo lleve sin atender una llamada.
  • Fewestcalls: Asigna la siguiente llamada al agente que menos llamadas haya atendido.
  • Random: Asigna la siguiente llamada aleatoriamente a cualquier agente disponible.
  • Ringall: Llama a todos los agentes a la vez y el primero que descuelgue será quien atienda la llamada.
  • RoundRobin: Distribuye las llamadas “por turnos” entre los agentes disponibles. (No disponible en Asterisk 1.6)
  • RRMemory: Similar a RoundRobin, pero “recuerda” el último agente al que intentó llamar.

Además de la estraegia hay muchos parámetros que condicionan la distribución de las llamadas, como ringinuse, weight, etc, pero no es necesario adentrarnos en eso :)

La forma que tiene Asterisk de guardar en memoria los agentes de las colas es mediante una función hash. Esta función hash calcula un valor numérico en base a la interfaz del agente (por ejemplo Agent/1001 o SIP/1002). El valor devuelto por la función hash siempre va a ser el mismo, por lo que con ninguna de las estrategias arriba descritas podemos decidir un orden estricto de distribución de llamadas basado en el orden de login (sin hacer trampas ;) ).

Para solucionar esto, Asterisk 1.6 implementa la estrategia “linear” que distribuye las llamadas de manera similar a RRMemory, pero siguiendo el orden en que los agentes se han unido a la cola.

Muchos encontramos esta estrategia particularmente interesante, pero desafortunadamente sólo está disponible para Asterisk 1.6. Tras buscar en el bugtracker de Digium, las listas de Asterisk-Developers y Asterisk-ES no he encontrado un backport de esta estrategia que funcione correctamente en Asterisk 1.4. Así, Manwe y yo hemos hemos hecho un backport de la estrategia “linear” para Asterisk 1.4.

El parche se aplica correctamente con Asterisk 1.4.23.1 y todas las pruebas realizadas han sido satisfactorias :) Aqúi lo tenéis: app_queue-linear-strategy

Happy Asterisk hacking! ;)

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Monitorización de Asterisk con Munin

Todos los que nos dedicamos a esto de Asterisk hacemos nuestros pinitos con mon, nagios, snmp y similares para atender nuestras centralitas y saber cuándo algo va mal. Este tipo de monitorización, depende del soporte que se haya vendido, no le importa al cliente ya que a él sólo le importa que la centralita funcione. Pero hay algunas estadísticas que sí que le pueden interesar al cliente, como saber cuántas llamadas concurrentes suele tener, si las licencias de su ASR están en uso por picos o de forma constante, si el balanceo de sus primarios está correctamente hecho o si por el contrario estamos saturando alguno… etc. Me refiero a estadísticas de uso de los recursos de Asterisk.

Esto no es nada nuevo. Hay multitud de programas y desarrollos a medida que nos permiten monitorizar estos casos y que nos generan gráficos y estadísticas en flash, con animaciones y todo. En este post vamos a hablar de Munin como sistema de monitorización de la centralita.

Para los que no lo conozcan, Munin es un sistema que nos genera gráficos de cualquier cosa que podamos imaginar: Uso de la CPU, colas del MTA, queries de Mysql, uso de la swap, uso de la RAM… todo a base de unos sencillos plugins.

Para usar munin no tenemos más que instalar los paquetes correspondientes:

apt-get install munin munin-node apache2

Una vez hecho esto esperaramos hasta 5 minutos para que munin genere las primeras imágenes y al acceder a la URL http://localhost/munin ¡SORPRESA! Tenemos un fea y anticuada web maquetada con tablas en la que a medida que pase el tiempo veremos cómo van dibujándose gráficos referentes a los recursos y servicios que tengamos instalados.

Por defecto munin trae bastantes plugins de monitorización de servicios. Los plugins en el caso de Debian se guardan en /usr/share/munin/plugins y se activan mediante enlaces simbólicos en /etc/munin/plugins/ y configuran en /etc/munin/plugin-conf.d/munin-node. Claro que hasta ahora no ha hecho falta tocar nada de todo esto porque funciona de serie.

Ya tenemos un sistema que genera gráficas de los servicios típicos que tenemos en un servidor GNU/Linux. Ahora sólo falta la parte de monitorizar asterisk usando los plugins que no vienen de serie con el programa.
Zap channels

En la web de munin podemos encontrar plugins generados por los usuarios. A partir de un plugin genérico que se conecta al manager de asterisk, mete un comando y parsea la respuesta podemos sacar casi todas las estadísticas que nos interesen: Canales zap, misdn, sip, iax, llamadas simultáneas, licencias G729 en uso…

Veamos un ejemplo de un plugin de munin que vía Manager saca las llamadas concurrentes en el asterisk:

  1. #!/usr/bin/perl -w                                                                                                                                                                  
  2. use strict;
  3. my $ret = undef;
  4. if (! eval "require Net::Telnet;")
  5. {                                
  6.     $ret = "Net::Telnet not found";
  7. }                                  
  8. if ($ARGV[0] and $ARGV[0] eq "config")
  9. {
  10.     print "graph_title Asterisk active CALLS\n";
  11.     print "graph_args –base 1000 -l 0\n";
  12.     print "graph_vlabel calls\n";
  13.     print "graph_category asterisk\n";
  14.     print "channels.draw AREA\n";
  15.     print "channels.label channels\n";
  16.     exit 0;
  17. }
  18.  
  19. my $host = exists $ENV{‘host’} ? $ENV{‘host’} : "127.0.0.1";
  20. my $port = exists $ENV{‘port’} ? $ENV{‘port’} : "5038";
  21.  
  22. my $username = "administrador";
  23. my $secret   = "secretillo";
  24.  
  25. my $pop = new Net::Telnet (Telnetmode => 0);
  26. $pop->open(Host => $host,
  27.            Port => $port);
  28.  
  29. ## Read connection message.
  30. my $line = $pop->getline;
  31. die $line unless $line =~ /^Asterisk/;
  32.  
  33. ## Send user name.
  34. $pop->print("Action: login");
  35. $pop->print("Username: $username");
  36. $pop->print("Secret: $secret");
  37. $pop->print("Events: off");
  38. $pop->print("");
  39.  
  40. ## Request status of messages.
  41. $pop->print("Action: command");
  42. $pop->print("Command: core show channels");
  43. $pop->print("");
  44. my $result;
  45. while (($line = $pop->getline) and ($line !~ /END COMMAND/o))
  46. {
  47.     print $line;
  48.     $result = $line if $line =~ /active call/;
  49. }
  50.  
  51. my $nb = (split ‘ ‘,$result)[0];
  52. $pop->print("Action: logoff");
  53. $pop->print("");
  54.  
  55. print "channels.value $nb\n";

Como puede verse leyendo un poco el código, la base del script es siempre el mismo, datos, establecimiento de la conexión… etc. Con sólo cambiar unas pocas líneas podemos ir sacando y monitorizando toda la información que deseemos. Las líneas clave serían:
$pop->print("Command: core show channels"); Donde metemos el comando que queremos.
$result = $line if $line =~ /active call/; Es la línea que tiene el resultado que queremos. Si ejecutamos a mano un asterisk -rx "core show channels" podemos ver que la respuesta es del estilo
root@pbx:/etc/asterisk/dialplan# asterisk -rx "core show channels"
Channel Location State Application(Data)
SIP/sarenet-09130f90 946571015@default:1 Ringing AppDial((Outgoing Line))
SIP/2627-b32fade0 s-VOIP@macro-salient Ring Dial(SIP/sarenet/946571015|80|
SIP/2100-08f814c0 2100@desde-usuarios: Ringing AppDial((Outgoing Line))
SIP/2652-b2cdd190 s@macro-llamadainter Ring Dial(SIP/2100|45|Tt)
SIP/sarenet-08b4d478 (None) Up Bridged Call(SIP/2404-b2ff03f0
SIP/2404-b2ff03f0 s-VOIP@macro-salient Up Dial(SIP/sarenet/943446826|80|
mISDN/1-u981 s@ivr-operadorbuzon: Up BackGround(locuciones/EUS_IVR_
SIP/sarenet-082f7388 (None) Up Bridged Call(SIP/2612-089c0d50
SIP/2612-089c0d50 s-VOIP@macro-salient Up Dial(SIP/sarenet/944806571|80|
9 active channels
5 active calls
Está claro que en el caso de querer monitorizar las llamadas concurrentes a lo largo del tiempo lo que nos interesa es la línea última que es la que tiene el número de llamadas concurrentes en ese momento. Una vez tenemos la línea en la que está la información lo único que hace falta es sacar el dato de esa línea y sacar el resultado en el formato que a munin le interesa:
my $nb = (split ‘ ‘,$result)[0];
print "channels.value $nb\n";
De hecho, si ejecutamos el script a mano desde la consola lo que veremos será la salida que se le pasará a munin cuando éste ejecute dicho script de forma periódica:
root@pbx:~# /usr/share/munin/plugins/asteriskcalls
Response: Success
Message: Authentication accepted
Response: Follows
Privilege: Command
Channel Location State Application(Data)
mISDN/1-u994 s@macro-getcallerid: Ringing AGI(getcallerid.php|943085756)
SIP/sarenet-08e41cd0 (None) Up Bridged Call(SIP/2626-b318d338
SIP/2626-b318d338 s-VOIP@macro-salient Up Dial(SIP/sarenet/630642987|80|
SIP/sarenet-08b4d478 (None) Up Bridged Call(SIP/2404-b2ff03f0
SIP/2404-b2ff03f0 s-VOIP@macro-salient Up Dial(SIP/sarenet/943446826|80|
SIP/sarenet-082f7388 (None) Up Bridged Call(SIP/2612-089c0d50
SIP/2612-089c0d50 s-VOIP@macro-salient Up Dial(SIP/sarenet/944806571|80|
7 active channels
4 active calls
channels.value 4

Si nos fijamos en el principio del script podemos ver que “channels.value” es el valor que le interesa a munin para hacer la gráfica ya que hemos puesto “channels” en la vertical.

Este script hace las cosas bien, con manager y todo. Pero no tenemos por qué limitarnos a eso. Al final munin sólo quiere un valor para un campo vertical que irá pintando a lo largo del tiempo. Podemos hacer cosas menos bonitas y más imaginativas. Ejemplo de uso de un primario que pertenece a un grupo de varios:

  1. #!/bin/sh
  2.  
  3. LISTAZAP=$(asterisk -rx ‘core show channels’ | cut -d ‘ ‘ -f 1 | grep -a ‘Zap/’ | cut -d ‘/’ -f 2 | cut -d ‘-’ -f 1)
  4.  
  5. ZAP1=0
  6. ZAP2=0
  7. ZAP3=0
  8. if [ $# = 1 ]; then
  9.         if [ $1 == "config" ]; then
  10.             echo "graph_title Asterisk PRI 3";
  11.             echo "graph_args –base 1000 -l 0";
  12.             echo "graph_vlabel channels";
  13.             echo "graph_category asterisk";
  14.             echo "channels.draw AREA";
  15.             echo "channels.label channels";
  16.             exit 0
  17.         fi
  18. fi
  19.  
  20. for actual in $LISTAZAP;do
  21.         if [ $actual -lt 32 ]; then
  22.                 ZAP1=$(expr $ZAP1 + 1)
  23.         else    if [ $actual -lt 63 ]; then
  24.                         ZAP2=$(expr $ZAP2 + 1)
  25.                 else    if [ $actual -lt 94 ]; then
  26.                         ZAP3=$(expr $ZAP3 + 1)
  27.                         fi
  28.                 fi
  29.         fi
  30. done
  31.  
  32. echo "channels.value $ZAP3"
  33.  

Muchas veces este sencillo programa, que hace gráficas feas, pero que es muy sencillo de instalar y de configurar puede salvarte la vida ya que puedes ver que los últimos días ha habido errores en eth0, que las querys de mysql han aumentado demasiado, que las interrupciones están por las nubes… y te permite diagnosticar momentos de congestión o fallos pasados que no son posibles reproducir en el presente.

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Todo listo para la charla de Mark Spencer, streaming incluido!!

Hoy es el día. Tras pasar la tarde de ayer con Mark enseñandole un poco Bilbao (lo que la lluvia nos permitió :-/) hoy ya esta todo listo para su charla en el Museo Guggenheim a las 11:30.

Si no vas a poder asistir no te preocupes, en Irontec hemos habilitado esta URL, desde la que podrás ver la charla en vivo y en directo!! http://streaming.irontec.com/conferencias/mark_spencer/

Cuando termine el evento y pueda respirar, pondré algunas de las muchas fotos que tomamos ayer, pero de mientras os dejo esta, de cuando fuimos a comer “typical basque food” :)

Nos vemos en “el Guguen” :)

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Mark Spencer dará una conferencia en el Museo Guggenheim de Bilbao!!

Me alegra mucho poder comentar esto: Mark Spencer (creador de Asterisk y fundador de Digium) visitará Bilbao (capital del mundo xD) para dar una conferencia sobre Asterisk y el mundo de la telefonía IP.

Siendo el creador de Asterisk, no podéis perderos este evento, siendo el acceso además, gratuito. Podéis inscribiros en la web de Enpresa Digitala para asistir.

Creo que voy a empezar desde ya a preparar el alubión de preguntas que le van a caer al pobre Mark :) digium-mark-spencer2.jpg

Espero ver por allí a toda esa gente de Asterisk-ES, ya que esperamos que sea un día ‘mágico’ para la VozIP.

Nos vemos el 2 de Junio!!

Noticia oficial

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Habemus nuevo dCAP!!

Acabamos de recibir la noticia de que nuestro compañero Jon Bonilla aka Manwe (el severo de la lista Asterisk-ES) ha aprobado la parte teórica y es oficialmente un Digium Certified Asterisk Professional.dcap_logotype1.gif

Estamos muy contentos de que Jon lo haya conseguido, sobre todo porque ha sido a la primera y sin ir al BootCamp! Mientras yo me lo pasaba bien allí, él apagaba los fuegos que iban surgiendo y estudiaba (duro? xD) para el examen.

Enhorabuena Jon!!

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Día a día en el Asterisk BootCamp Bilbao (5)

Hoy escribo este post-resumen con profunda tristeza, ya que ayer, desafortunadamente, terminó el BootCamp.

El día comenzó bien, ya que como conseguimos terminar el temario a tiempo (!!!) les ofrecimos a los alumnos un pequeño extra: una charla sobre Seguridad en VoIP, que al parecer les gustó bastante :)

Posteriormente todos se prepararon para “la guerra” he incluso hubo quién se trajo “su fusil” :) Los exámenes se realizaron en 2 turnos, y al terminar el sentir de la gente era más o menos el mismo: que el examen no era exageradamente difícil, pero no hay tiempo de pensar, solo se puede actuar, ya que en Burundi, si no te pilla la guerrilla :) Así que dentro de poco los que aprueben ambas partes recibirán la placa que otorga la certificación oficial de Asterisk, para unirse al club :)

2442864852_2c748fc684.jpgSi tuviera que hacer una valoración sobre lo que he vivo esta semana, no encontraría palabras, ya que ha sido increíble para mí: ninguno de los días he dormido más de 4 horas, pero la energía y las ganas de transmitir conocimiento a los asistentes no flaquearon ni un segundo.

Solo hace 2 años que yo estaba en el otro lado, y durante una semana he podido compartir aula y alumnos con Sergio Serrano, así que desde aquí solo me queda dar las gracias a los que han confiado en mí para este BootCamp, y esperar que se vuelva a repetir. :)
A los asistentes dcirles que me ha encantado compartir con ellos esta semana, y que han sido un gran grupo, ya que eran muy participativos y tenían muchas ganas de aprender. Sergio y yo tratamos de darles todo lo posible con algún extra (Asterisk Night Bootcamp y la charla sobre Seguridad) y viendo las valoraciones recibidas estamos más que contentos.

Nos vemos en la red!!!

PD: Así es como quedó el aula tras desmontar todo el asunto :( Tenéis todas las fotos en Flickr.

init 0;

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Día a día en el Asterisk BootCamp Bilbao (4)

Último día antes del examen. Ya hay bastantes nervios en el ambiente y algunos conceptos empiezan a mezclarse. Por ello el día de ayer no tuvo demasiada carga laectiva, era más bien un día para reflexionar los conceptos adquiridos, y practicar un poco más.2439132018_8a185f2e9c.jpg

Los alumnos estuvieron gran parte de la tarde poniendo en práctica entre ellos lo que en clase habíamos hecho contra el servidor, para así poder ver los 2 lados y entenderlo mejor.

Ayer pasamos por encima de algunos conceptos como AGI, AMI y ARA,y realizamos algún ejemplo alternativo al oficial, con algún AGI en PHP y Python ;) además de hacer un repaso general, para que no se olvide nada.

Hoy es el gran día, donde todos los esfuerzos realizados durante la semana pueden verse recompensados, aunque no hay que desanimarse si así no ocurre, ya que los conocimientos adquiridos no desaparecen.

Para hoy tenemos 21 “aspirantes”, así que desde aquí os deseo mucha suerte para el examen y que vengáis con los nervios templados :)

Para finalizar, sacamos varias fotos de todo el grupo, para tener de recuerdo :)

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Día a día en el Asterisk BootCamp Bilbao (3)

2436706927_77a290aefc.jpgHoy los alumnos han aparecido más adormilados que los anteriores días. Normal, ayer fue el día más duro de los 3, y la información comienza a amontonarse en sus cabezas :)

Además, ayer tuvo una gran aceptación el “Asterisk Night BootCamp”, al que asistieron casi todos los alumnos.

Estuvimos hablando de terminales, dispositivos, hubo quién se montó Asterisk 1.6 para probar chan_mobile, y mucho SIP e IAX trunking, vamos de todo. La idea era precisamente reafirmar lo visto en clase y probar cosas nuevas y sobre todo frikear un rato en plan hackers de la noche. ;) 2437529962_363925e843.jpg

Hasta ahora hemos ido muy bien de tiempo, y esperamos terminar hoy (día 4) para poder tener otro “bonus” el viernes por la mañana.

Ya queda menos para el día D, el día del dCAp! :)

PD: Surgirá algo para esta noche? xD

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter

Día a día en el Asterisk BootCamp Bilbao (2)

Ayer, día 2 del BootCamp, y ya empezaron a cambiar las cosas :) La gente salió con cerebro bastante destrozado ya que fué bastante más duro.1782.jpg

Haciendo gala de la segunda transparencia del libro del BootCamp, en la que se ve una escena de “Full Metal Jacket”, ayer tocó muchísimo dialplan, y los conceptos empiezan a amontonarse.

Por lo que a mi respecta, cada día me parezco más a un oso panda (por aquello de las ojeras xDD) pero todo se ve recompensado al ver que los alumnos aprenden.

Como es imposible que en un BootCamp se vean absolutamente TODOS los conceptos relacionados con Asterisk se nos ha ocurrido organizar una “Asterisk Night Party” para hoy miércoles por la noche :) Con esto pretendemos alejarnos durante un rato del temario, ponernos en modo “promisc up” y hackear un rato ;)

p230408_1349.JPG

Te ha gustado? Compartelo:
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • Twitter