Skip to main content.

5 Junio 2009

Asterisk-ES-RSP

Los lectores que seguís de forma activa las noticias de la comunidad de Asterisk habréis leído las discusiones suscitadas por las últimas versiones publicadas. Las versiones 1.4.2X han resultado ser bastante decepcionantes en cuando a estabilidad y la comunidad hispana, en la que nos hallamos la mayoría de integradores de Asterisk, se ha revolucionado bastante con interminables discusiones sobre el modelo de desarrollo de Asterisk, el control de calidad de las versiones y la inversión en tiempo==dinero empleados cercando y solventando estos problemas.

Es por ello, que a raíz de unas de estas discusiones se decidió crear el grupo de asterisk-es-rsp, como un proyecto de la comunidad hispana para unificar nuestros esfuerzos en tener una solución común probada, estable y participada por todos.asterisk-rsp1

Asterisk-RSP NO es un fork de Asterisk. Es un branch en el que empresas y particulares aportamos parches y testing con el fin de disponer de una versión base de Asterisk realmente testeada y adaptada a las necesidades de la comunidad.

Después de varias semanas de desarrollo, el proyecto comienza a dar sus frutos. Actualmente existe un branch principal de Asterisk 1.4.24 y dahdi-linux+dahdi-tools que incluye bastantes bugfixes y funcionalidades extra respecto a la versión 1.4.24 original. Algunas de ellas contemplan:

  • Soporte de RDSI BRI (tarjetas Digium, OpenVox, Beronet y Junghanns) mediante DAHDI.
  • App_pickup2
  • Queue_log realtime mediante UnixODBC
  • Montones de bugfixes portados de las versiones 1.4.25, 1.4.26RC1 y svn-trunk
  • func_devstate
  • PickUp en terminales Thomson

Para aquellos que quieran participar o informarse sobre el proyecto existe una lista de correo en la que se discute el desarrollo del mismo. Un wiki está en construcción (aún está muy verde) para documentarlo, pero como siempre el log de svn es lo más actualizado que se puede encontrar.

Para descargar las fuentes:

svn co http://dev2.irontec.com/svn/asterisk-es-rsp/branches asterisk-es-rsp - -username guest - -password guest

svn co http://asterisk-es-rsp.irontec.com/svn/branches asterisk-rsp

Para ver el log:

svn log http://dev2.irontec.com/svn/asterisk-es-rsp/branches  - -username guest - -password guest

http://asterisk-es-rsp.irontec.com

Posteado por Jon Bonilla como Asterisk, General, Irontec a las 12:39 PM CEST

1 comentario »

24 Abril 2009

Asterisk Advanced - Final Countdown

Se acabó. El Asterisk Advanced toca a su fin. Mientras escribo estas líneas los alumnos están concentrados es sus pantallas o tests teóricos dispuestos a aprobar el dCAP.3469956463_470cf07846_b

Ya que habíamos terminado el temario, hemos aprovechado la mañana para dudas y para comentarios acerca de temas que no se ven con mucha profundidad: hemos hablado de faxing, de seguridad…

Si no nos han mentido en las encuestas ;) los alumnos han quedado muy contentos y muchos de ellos comentaban que una semana es poco tiempo para todo lo que es Asterisk. ¡Estáis locos! Una semana más de curso y seguido me encierran en alguna institución mental :) Siendo serios, ha sido una semana muy intensa pero muy gratificante: mola ver cómo la gente va aprendiendo y va resolviendo los problemas.

Ya solo me queda dar las gracias a todos los asistentes y a los que se examinan ¡Mucha suerte! ¡Que el RFC3261 os acompañe y los terminales os sean compatibles! ;)

PD: Migel, ¿¡Dónde estabas que no has salido en la foto!?

PPD: Tenéis todas las fotos en Flickr.

Disclaimer: Post corregido por Jon ‘Reverte’ Bonilla.

Posteado por saghul como Asterisk, Digium, Eventos, Irontec a las 12:36 PM CEST

1 comentario »

Asterisk Advanced - Día 4

Día largo el de ayer, ¡tan largo que duró hasta bien entrada la noche! :) 3469634238_00210b84de_b

Como no podía ser de otra manera todos los alumnos estuvieron de acuerdo en tener una edición nocturna del Asterisk Advanced así que durante las prácticas que los alumnos realizaban Elio y yo preparamos algunos ejercicios con “truco”. Tras estrujarse un poco el cerebro y a veces con alguna pista pudiéron resolverlos y comprobar lo versátil que Asterisk puede llegar a ser.

Hoy es un día un poco más corto, ya que se realizará el exámen para la obtención de la certificación oficial dCAP y luego toca desmontar todo el asunto :(

PD: Ánimo Jose!

Posteado por saghul como Asterisk, Digium, Eventos, Irontec a las 9:06 AM CEST

1 comentario »

23 Abril 2009

Asterisk Advanced - Día 3

Día de cacharreo y dialplan el de ayer. Por la mañana profundizamos en diversos aspectos del dialplan y por la tarde jugamos a McGyver con las tarjetas :) 3467927870_ec5909e777_b

Aunque la instalación y configuración de tarjetas es algo que se aprende relativamente rápido, requiere mucho movimiento por parte de los alumnos y se alborota un poco la cosa, pero eso a Elio y a mi nos da tiempo para buscar nuestros nombres en Google ;)

Tras aprender a instalar y configurar las tarjetas vinieron las pruebas: enlaces con cables PRI cross-over, teléfonos analógicos, simulaciones de líneas analógicas… vamos, un poco de todo.

Hoy toca dialplan de nuevo, que es en lo que más se profundiza a lo largo de todo el Asterisk Advanced, pero tal vez tengamos alguna sorpresa… ¿habrá un Asterisk Advanced Night Edition? ;)

Posteado por saghul como Asterisk, Digium, Eventos, Irontec a las 9:34 AM CEST

Sin comentarios »

22 Abril 2009

Asterisk Advanced - Día 2

Día durillo y lleno de conceptos el de ayer. Día de SIP. Día de IAX2. Día de aprender de VoIP más que de Asterisk.

Uno de los problemas con los que se encuentra mucha gente es que aunque en Asterisk se mueve bien, le flaquean conceptos de VoIP. Por ello el Asterisk Advanced incluye casi un día completo de teoría y práctica sobre SIP e IAX2. Fuimos viendo los protocolos de uno en uno y haciendo prácticas en medio, y los alumnos comprobaron que aunque la teoría esté clara siempre puede surgir algún problemilla :) 3465189646_64177a9d16_b

Se va notando que hay cada vez más ganas de aprender, ya que varios alumnos se quedaron un rato más haciendo pruebas, capturas de tráfico, etc. Nosotros probamos a ver si las IAX transfers funionaban, y sorprendentemente ¡lo hacen! Aunque eso no quita para que SIP sea *el* protocolo a utilizar ;)

Hoy día de dialplan a muerte… ¿aguantarán hasta la noche?

Posteado por saghul como Asterisk, Digium, Eventos, Irontec a las 9:16 AM CEST

Sin comentarios »

21 Abril 2009

Asterisk Advanced - Día 1

Al igual que el año pasado, iré posteando a día vencido las idas y venidas de los alumnos y de los “infiltrados” para que los que no hayan podido venir se hagan una idea de lo que por aquí se cuece.

Ayer fue el primer día, día de presentaciones. Los alumnos no se conocían los unos a los otros pero al estar sentados juntos a medida que avanzaba la clase se hacían preguntas entre ellos y cooperaban en la resolución de problemas, eso mola :) img_0019

Espero que hayan dormido bien, porque hoy empieza lo duro: dialplan a tope, y conceptos más profundos de VoIP, ya que ayer sólo vimos lo imprescindible como para configurar un Asterisk con dos terminales que pudieran llamarse entre ellos.

He de decir que el nuevo temario está bastante bien y se tratan con mayor profundidad algunos temas como el NAT, que cuando yo hice el BootCamp ni me mencionaron. También vamos metiendo algún bonus como el uso de ngrep para examinar trazas SIP, y así la cosa se pone más interesante ;)

Seguiremos informando…

PD: Tenéis todas la fotos que vaya sacando en Flickr.

Posteado por saghul como Asterisk, Digium, Eventos, General, Irontec a las 9:40 AM CEST

1 comentario »

20 Abril 2009

Todo listo para el AsteriskAdvanced

Como se puede apreciar en las imágenes, ya tenemos todo listo para par el pistoletazo de salida al Asterisk Advanced Bilbao 2k9.img_0015

Éste año han cambiado algunas cosas como el nombre (antes era Asterisk Bootcamp) y la versión de Asterisk, ya que en esta ocasión utilizaremos Asterisk 1.6, pero la ilusión es la misma.

El trabajo que nos ha llevado montar la sala no es nada comparado con el que van a realizar los asistentes en esta semana intensiva de Asterisk :) Esperemos que al final de la semana la familia de dCAPs cuente con nuevos miembros.

Al igual que el año pasado, haremos un post diario sobre la marcha del curso en este blog y por supuesto que no faltará el Asterisk Night Adavnced :)

¿Te lo vas a perder?

img_0016

Posteado por saghul como Asterisk, Digium, Eventos, General, Irontec a las 7:35 AM CEST

Sin comentarios »

20 Febrero 2009

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!! :)

Posteado por saghul como Asterisk, Digium, Eventos, General, Irontec a las 10:35 AM CET

Sin comentarios »

6 Febrero 2009

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! ;)

Posteado por saghul como Asterisk, General a las 2:39 PM CET

1 comentario »

11 Diciembre 2008

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.

Posteado por Jon Bonilla como Asterisk, General a las 2:02 PM CET

2 comentarios »

« Entradas Anteriores  
2005 © Irontec S.L. :: Powered by Irontec & Wordpress
[ IRONTEC S.L. - C.I.F. B-95274890 ]
[ Ctra. Basurto-Kastrexana nº70 / Enpresaldea ]
[ 48002 - Bilbao - Bizkaia ]