Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Monitoreando estructura de VoIP con open source

Usando tecnologias OpenSource para VoIP (en especifico Asterisk) mostramos como saber el estado de todos los servicios de VoIP e infraestructura mostrando dashboards y enviando notificaciones realizadas a través de monitoreo enriquecido.
Por: Miguel Angel Torres

  • Login to see the comments

  • Be the first to like this

Monitoreando estructura de VoIP con open source

  1. 1. Acerca de mi Y mi trabajo Ingeniero en Sistemas Computacionales Administrador de Sistemas Lider de VoIP/CTI PriceTravel Holdings
  2. 2. Acerca de mi Trabajo 1800 Empleados / 16 Instalaciones Fisicas Asterisk PBX / 22000 - 44000 Llamadas por Dia / 1000 Max I/O Llamadas Concurrentes
  3. 3. Open Source (Caso de Uso): Infraestructura de ciente de Telecomunicaciones
  4. 4. El gran problema [root@PBX01 ~]# asterisk -rx 'mfcr2 show channels' Chan Variant Max ANI Max DNIS ANI First Immediate Accept Tx CAS Rx CAS 1 MX 20 4 No No IDLE BLOCK 2 MX 20 4 No No IDLE BLOCK 3 MX 20 4 No No IDLE BLOCK 4 MX 20 4 No No IDLE BLOCK 5 MX 20 4 No No IDLE BLOCK 6 MX 20 4 No No IDLE BLOCK 7 MX 20 4 No No IDLE BLOCK 8 MX 20 4 No No IDLE BLOCK 9 MX 20 4 No No IDLE BLOCK 10 MX 20 4 No No IDLE BLOCK ..... Ninguna llamada I/O en Fallas de Proveedores Ninguna alerta o aviso en Degradaciones del Sistema Falta de conocimiento del estado de infraestructura
  5. 5. Monitoreo de Infraestructura Antes del 2016 => Con ar en el Servicio del Proveedor => Reportes de Usuario y Mesa de Servicio => Alertas y scripts muy mal implementadas => Uso de la CLI para determinar fallas => Ninguna implementacion de Monitoreo a Fallas
  6. 6. Manos a la obra, dar una solucion Insight (Monitoreo Automatico Activo & Enriquecido)
  7. 7. Primeros Pasos Conocer el Estado de la Infraestructura
  8. 8. Algunos scripts en bash... Script para reconectar IAX2 #!/bin/bash if [ -a /usr/sbin/asterisk ] then IAXTOTALPEERS=$(asterisk -rx 'iax2 show peers' | grep 'iax2 peers' | cut -d' ' - IAXONLINE=$(asterisk -rx 'iax2 show peers' | grep -o '[0-9]* online' | head -1 IAXOFFLINE=$(asterisk -rx 'iax2 show peers' | grep -o '[0-9]* offline' | head -1 echo "Total IAX2 Peers:$IAXTOTALPEERS" echo "IAX2 Peers Online:$IAXONLINE" echo "IAX2 Peers Offline: $IAXOFFLINE" if [ $IAXOFFLINE != 0 ]; then IAXOFFLINE=$(service asterisk reload) echo "Trying to reconnect IAX2 peers by SERVCE ASTERISK RELOAD" else echo "All IAX2 Peers Online" fi fi
  9. 9. Algunos scripts en bash... Estado de los dispositivos SIP #!/bin/bash ####### Asterisk Telephony SIP Peers Monitoring if [ -a /usr/sbin/asterisk ]; then SIPTOTALPEERS=$(/usr/sbin/asterisk -rx 'sip show peers' | grep 'sip peers' | cut SIPONLINE=$(/usr/sbin/asterisk -rx 'sip show peers' | grep -o '[0-9]* online' | UPTIMEDATA=$(/usr/sbin/asterisk -rx 'core show uptime') BODY="UPTIME DATA $UPTIMEDATA, SIP Peers(Total): $SIPTOTALPEERS, SIP Peers (onli curl -G -v http://127.0.0.1:88/ucom/index.php --data-urlencode "media=psb" --dat if [ $SIPTOTALPEERS != $SIPONLINE ]; then curl -G -v http://127.0.0.1:88/ucom/index.php --data-urlencode "media=psb" curl -G -v http://127.0.0.1:88/ucom/index.php --data-urlencode "media=sms" fi fi
  10. 10. Software de Monitoreo de Redes Observium
  11. 11. Software de Monitoreo de Redes DataDog
  12. 12. Desarrollar Integraciones Asterisk DataDog Module Available at https://github.com/mafairnet/Asterisk-PBX-Integration-for-Datadog/
  13. 13. Desarrollar Integraciones Asterisk DataDog Module
  14. 14. Desarrollar Integraciones Sangoma Vega DataDog Module Available at https://github.com/mafairnet/datadog-vega-agent/
  15. 15. Desarrollar Integraciones Sangoma Vega DataDog Module
  16. 16. Insight Primera Fase Monitoro Activo
  17. 17. Insight Segunda Fase Monitoreo Enriquecido
  18. 18. Monitoreo Enriquecido Infraestructura ELK
  19. 19. Monitoreo Enriquecido Infraestructura ELK
  20. 20. Monitoreo Enriquecido ElastAlert => Analisis en Tiempo Real de Logs => Alertas Personalizadas => Multiples Servicios de Noti cation Soportados
  21. 21. Monitoreo Enriquecido Ejemplo de Reglas de ElastAlert name: Check Operations Director Extension type: frequency index: filebeat-* num_events: 1 timeframe: minutes: 1 realert: minutes: 0 filter: - query: query_string: query: "message:unreachable AND 16600" alert: - "slack" alert_text: "nCheck extension 16600nPBX:n{0}nINFO:{1}" alert_text_type: "alert_text_only" alert_text_args:
  22. 22. Monitoreo Enriquecido Noti caciones en Slack por ElastAlert
  23. 23. Insight Tercera Fase Fallas por parte de Proveedores de Telecomunicaciones
  24. 24. Insight Tercera Fase Script de Marcado Automatico de Numeros #!/usr/bin/python -W ignore::DeprecationWarning import os import import csv with open('/home/test_numbers.csv', 'r') as f: reader = csv.reader(f) numbers_list = list(reader) print(numbers_list) for number_to_call in numbers_list: number_to_call = str(number_to_call[0]) print(number_to_call) f = open('/var/spool/asterisk/outgoing/calltest_'+number_to_call+'.call','w') f.write('Channel: Local/s@callmenow/nnCallerId: "TestCall<'+number_to_call+': f.close()
  25. 25. IVR-AVP Que es? Y para que un IVR AVP? => Validar Servicios de Proveedores de Telecomunicaciones
  26. 26. IVR-AVP La idea
  27. 27. IVR-AVP Dejavu
  28. 28. IVR-AVP Dejavu, como trabaja?
  29. 29. IVR-AVP Ejemplo Dejavu Python #!/usr/bin/python import warnings import json warnings.filterwarnings("ignore") from dejavu import Dejavu from dejavu.recognize import FileRecognizer, MicrophoneRecognizer # load config from a JSON file (or anything outputting a python dictionary) with open("dejavu.cnf") as f: config = json.load(f) if __name__ == '__main__': # create a Dejavu instance djv = Dejavu(config) # Fingerprint all the mp3's in the directory we give it djv.fingerprint_directory("/opt/dejavu/mp3/", [".mp3"]) # Recognize audio from a file audio = djv.recognize(FileRecognizer, "/opt/dejavu/mp3/test.mp3") print "From file we recognized: %sn" % audio
  30. 30. IVR-AVP Arquitectura del Sistema
  31. 31. IVR-AVP Creacion de Base de Datos de Huellas Digitales #!/usr/bin/python import warnings import json warnings.filterwarnings("ignore") from dejavu import Dejavu from dejavu.recognize import FileRecognizer, MicrophoneRecognizer # load config from a JSON file (or anything outputting a python dictionary) with open("/opt/dejavu/dejavu.cnf") as f: config = json.load(f) if __name__ == '__main__': # create a Dejavu instance djv = Dejavu(config) #fingerprint new audios djv.fingerprint_directory("/var/www/html/dejavu/audios/", [".wav",".mp3"])
  32. 32. IVR-AVP Generador de Llamadas def writeCallFile(number,id): f= open("/var/spool/asterisk/outgoing/call_"+number+".call","w+") f.write('Channel: Local/'+number+'@from-internal-xferrnCallerId: "Aloha" f.close()
  33. 33. IVR-AVP Modi cacion en el Dialplan [wait-ivr] exten => wait,1,Answer() exten => wait,n,Wait(300) exten => wait,n,Hangup() [macro-aloha] exten => s,1,NoOp(to-customer) exten => s,n,Set(CALLERID(num)=9999) exten => s,n,Set(CALLERID(name)=Aloha) exten => s,n,Set(TIMEOUT(absolute)=30) exten => s,n,Answer() exten => s,n,Playback(/var/lib/asterisk/sounds/en/mrwhite)
  34. 34. IVR-AVP Procesamiento de Huellas Digitales de Audio #Obtain pending calls pendingCalls = obtainPendingCalls() #Process pending calls for row in pendingCalls: id = row[0] print "ID="+str(id) callRecordingData = getCallRecording(id) if not callRecordingData: print "Not recording found" else: fingerPrintingData = checkAudioFingerprintig(callRecordingData) updateCallsData(callRecordingData[0],fingerPrintingData) delete_temp_files(tempFolder)
  35. 35. Aloha RC1 Disponible en https://github.com/mafairnet/aloha/
  36. 36. Dangerous Demo Pruebas Automatica de Aloha
  37. 37. Conclusions => Lidiar con Proveedores de Telecomunicaciones es Di cil => Usar / Crear Herramientas de Monitoreo basadas en Open Source => Usar Monitoreo Enriquecido y Automatizar Acciones => Automatizar Peque�as tareas para Resolver Problemas
  38. 38. Q&A
  39. 39. C'est ni Muchas Gracias miguel.torres@pricetravel.com - miguel@maf.mx -mafairnet

×