Como instalar y configurar AstManProxy
AstManProxy es un servidor proxy para el Asterisk Manager Interface (AMI). La razón para usarlo es que el AMI no ha sido diseñado para recibir numerosas peticiones simultáneas desde diferntes sitios y puede causar problemas de rendimiento a nuestro sistema Asterisk.
AstManProxy también sirve para interactuar con el AMI. De esta forma no tenemos que abrir un socket y lanzar los comandos al AMI. Nos permite tener un poco mas de control sobre los formatos de entrada y salida ya que nos permite usar los formatos HTTP, XML, CSV y Standard.
Además un servidor proxy como AstManProxy sirve como un método para unificar todas esas peticiones que pueden venir desde diferentes servicios de nuestra empresa en una sola conexión.
La pena del asunto, que parece que el proyecto está abandonado.
Úsalo solo si es necesario y bajo tu propio criterio, ya que en un proyecto me fue bien utilizarlo (aun sigue dando servicio) y en otro se caía constantemente con un pedazo ‘segfault’. Así que para ello haremos un script que compruebe si el servicio está caido para que lo levante.
Para descargarlo, lo hacemos por svn:
# svn co http://svncommunity.digium.com/svn/astmanproxy/trunk/ 1.21
# cd 1.21
Leemos los archivos.
Instalamos dependencias necesarias:
# aptitude install openssl libssl-dev
Parece ser que Asterisk no es una dependencia necesaria. No obstante si lo queremos instalar en una máquina que slo tenga el astmanproxy y no tenga Asterisk instalado debemos crear antes los dirs:
# mkdir /etc/asterisk
# mkdir /var/log/asterisk/
y dentro de este dir el archivo astmanproxy.log:
# touch astmanproxy.log
Instalamos AstManProxy:
# make
# make install
Ahora tenemos que configurar el AMI de nuestro Asterisk para permitir conexiones entrantes.
Editamos nuestro /etc/asterisk/manager.conf y ponemos:
[general]
displaysystemname = yes
enabled = yes
;webenabled = yes
port = 5038
;httptimeout = 60
bindaddr = 192.168.x.x ; la ip de la centralita
;displayconnects = yes
;
; Add a Unix epoch timestamp to events (not action responses)
;
;timestampevents = yes
;[mark]
;secret = mysecret
;deny=0.0.0.0/0.0.0.0
;permit=209.16.236.73/255.255.255.0
;
; If the device connected via this user accepts input slowly,
; the timeout for writes to it can be increased to keep it
; from being disconnected (value is in milliseconds)
;
; writetimeout = 100
;
; Authorization for various classes
;read = system,call,log,verbose,command,agent,user,config
;write = system,call,log,verbose,command,agent,user,config
[miuser]
secret=mipassword
;deny=0.0.0.0/0.0.0.0
permit=192.168.x.x/255.255.255.0 ; la Ip del astmanproxy
; Authorization for various classes
read=system,call,log,verbose,command,agent,user,config
write=system,call,log,verbose,command,agent,user,config
Salvamos y reiniciamos Atserisk
Ahora vamos a nuestro AstmanProxy (que puede estar en la misma máquina o no) y lo configuramos:
# cd /etc/asterisk
# cp astmanproxy.conf astmanproxy.conf.sample
# emacs astmanproxy.conf
El archivo es sencillo.
Aqui ponemos la ip del Asterisk y el user y el password del manager para que se pueda conectar:
; List of asterisk host(s) you want to proxy
; host = ip_addr, port, user, secret, events, use_ssl
host = 192.168.x.x, 5038, miuser, mi password, on, off
Para que no corra como root:
; local user and group for proxy to run as; will NOT run as root!
proc_user = gonzalo
proc_group = gonzalo
Los formatos de entrada salida. Podéis probar con varias conbinaciones o lo que necesitéis. Yo necesitaba estos:
; default input and output format for clients
; inputformat = (standard|xml|http)
; outputformat = (standard|xml|csv)
inputformat = standard
outputformat = xml
Como vemos tambien podemos definir el listenaddress el puerto y demás donde va a escuchar el AstManProxy.
El archivo es sencillo y en el dir doc de los sources podemos ver ejemplos de uso.
Para iniciarlo:
# astmanproxy -d (for debug mode)
# astmanproxy -dddddd (for more debug info)
# astmanproxy (for background mode)
En la consola de Asterisk veremos que ya se conecta con el manager:
== Parsing '/etc/asterisk/manager.conf': Found
== Manager 'miuser' logged on from 192.168.x.x
Si queremos podemos crear un script de inicio en /etc/init.d que se llame astman, tal que así:
#!/bin/bash
# /etc/init.d/astman
#
# Some things that run always
# touch /var/lock/blah
# Carry out specific functions when asked to by the system
SERVICE='astmanproxy'
case "$1" in
start)
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "Astmanproxy esta levantado."
else
echo "Iniciando astmanproxy"
/usr/local/sbin/astmanproxy
echo "astmanproxy iniciado"
fi
;;
stop)
echo "Parando astmanproxy"
killall -9 astmanproxy
echo "astmanproxy parado"
;;
*)
echo "Usage: /etc/init.d/astman {start|stop}"
exit 1
;;
esac
exit 0
Una vez que veamos que funciona lo iniciamos como demonio:
# /etc/init.d/astman start
Para que inicie cuando arranque la máquina hacemos:
update-rc.d astman defaults
Problemas?
De vez en cuando el astmanproxy se me cae. Yo lo he probado intensivamente en dos máquinas (tanto con Asterisk como dependencia como sin ella) y de vez en cuando en una de ellas se muere con un segfault y en la otra va bien.
Si alguien investiga mas sobre el asunto y sabe porqué estaría bien que me avisase.
Yo por lo de ahora he hecho este sencillo script que meto en un cron que comprueba si está levantado el servicio y si no lo levanta y mande un mail:
#!/bin/bash
### Script para comprobar si AstmanProxy esta levanatado
kk=`ps -ef | grep astmanproxy | grep -v grep`
if [ $? = 0 ]
then
echo "Astmanproxy levantado."
else
echo "Astmanproxy caido. Procediendo a levantar el servicio..."
/etc/init.d/astman start
echo "AstmanProxy ha petado. No hay que hacer nada, el script levantará el solo el servicio. Este mail es solo para efecto informativo y de estadísticas." | mail -s "Crash AstmanProxy" gonzalo@midominio.es
echo "Servicio levantado."
fi
#
(lo de configurar el envío de mail en linux es fácil. Busca en San Google ![]()
Y le damos permiso de ejecución:
# chmod +x /usr/local/bin/astmanscript
Lo probamos:
# astmanscript
Astmanproxy esta levantado.
Lo tiramos:
# /etc/init.d/astman stop
# astmanscript
Astmanproxy esta caido. Procediendo a levantar el servicio...
Ahora deberíamos poner en un cron que lo ejecute cada minuto o 5 mins, como tu quieras.
Por ejemplo para que lo compruebe cada 5 mins, ponemos:
# m h dom mon dow command
*/5 * * * * /usr/local/bin/astmanscript
Reinciamos el cron:
# /etc/init.d/cron restart
* Restarting periodic command scheduler crond [ OK ]
Si sabes mas que yo mándame un mail y contribuye a mejorar este HowTo.
Fuentes:
href=”http://www.mattgwatson.ca/2008/06/howto-install-and-configure-astmanproxy/



Comments are closed.