IP – АТС Asterisk – сложная система обработки телефонных вызовов, состоящая из различных драйверов и модулей. Зачастую системные администраторы сталкиваются с неисправностью того или иного функционала: не работает входящая/исходящая связь, односторонняя слышимость, проблемы с внутренними номерами и так далее. Чтобы решить данные проблемы, надо понять их суть – посмотреть в журнал (лог – файл) Asterisk и узнать, что же происходит на самом деле. О том, как правильно собрать логи, их глубина и параметры, а также про сбор сетевого дампа расскажем в этой статье.
Настройка логирования
Приступаем к настройке. Для этого, нам необходим посмотреть содержимое файла /etc/asterisk/logger.conf
. Давайте откроем его:
[root@asterisk ~]# cat /etc/asterisk/logger.conf [general] #include logger_general_additional.conf #include logger_general_custom.conf [logfiles] #include logger_logfiles_additional.conf #include logger_logfiles_custom.conf
Как видим, в данный файл включен «кастомная» настройка – файл logger_logfiles_custom.conf . В нем мы и будем производить необходимые настройки. Допустим, мы хотим записывать в файл logs_ echo date("Ymd"); основные события. Для этого, откроем для редактирования файл и добавим в него следующую запись:
[root@asterisk ~]# vim logger_logfiles_custom.conf
logs_ echo date("Ymd"); => notice,warning,error,debug,verbose,dtmf
Сохраняем изменения нажатием :x!
.
Начиная с 13 версии Asterisk, существует возможность создавать задачи на логирования прямо из консоли. Для этого существует команда logger add channel . Например:logger add channel logs_ echo date("Ymd"); notice,warning,error,debug,verbose,dtmfЛогирование будет остановлено при следующем рестарте Asterisk.
Глубина записи логов
В Asterisk можно задавать глубину логирования параметром verbose и debug. Первый режим более информативен для администратора, когда необходимо оперативно понять причину неисправности, тогда как второй режим более полезен для более глубоко анализа. Глубина задается от 1 до 10, где 10 – максимальный уровень информативности:
asterisk*CLI> core set verbose 3 asterisk*CLI> core set debug 3
После этого, необходимо перезагрузить модуль логирования:
asterisk*CLI> module reload logger
Дебаг на уровне каналов
В Asterisk можно производить дебаг на уровне отдельных драйверов. Например, если вы хотите отладить подключения по протоколу SIP – своя команда, по IAX – другая. Ниже представлен список:
Драйвер | Команда отладки |
---|---|
SIP (версия вышел 1.6) | sip set debug on |
SIP (версия 1.4) | sip set debug |
PJSIP | pjsip set logger on |
Запись CDR | cdr set debug on |
IAX2 (версия вышел 1.6) | iax2 set debug on |
IAX2 (версия 1.4) | iax2 set debug |
Остановить логирование
Когда отладка закончена, необходимо вернуть все в первоначальный вид. Отключаем дополнительный дебаг:
asterisk*CLI> core set verbose 0 asterisk*CLI> core set debug 0
Чтобы выключить дебаг на конкретных каналах, даем команду вида:
asterisk*CLI> sip set debug on asterisk*CLI> iax2 set debug off
Далее, в файле /etc/asterisk/logger.conf
закомментируйте или удалите добавленную строчку. После этого перегружаем модуль логирования:
asterisk*CLI> module reload logger
Дебаг Asterisk в файл
Прямо из консоли можно добавлять дебаг в файл. Для этого, его необходимо первоначально создать. Например:
[root@asterisk ~]# touch /home/asterisk_cli.txt
Далее, вызываем консоль сервера IP – АТС Asterisk следующим способом:
[root@asterisk ~]# asterisk -rvvvv | tee /home/asterisk_cli.txt
В открывшейся консоли дайте одну из перечисленных команд дебага, например, sip set debug on
. Весь вывод будет сохранен в указанном файле. По окончанию укажите в консоли sip set debug off
и quit
.
Сетевой дамп Asterisk для анализа в Wireshark
Простейшим способом снять сетевой дамп является утилита tcpdump
. Чтобы ей воспользуйтесь командой:
[root@asterisk ~]# tcpdump -s 0 -w /home/dump.cap
Затем, после снятия необходимого дампа, Вы сможете сохранить файл dump.cap в директории /home себе на компьютер, для последующего анализа. Помимо этого, в команде есть возможность дать дополнительные ключи, например -i eth0
- указание интерфейса, с которого необходимо снять дамп, а port 5060
- указать порт, на который приходят пакеты.