Анализ активных вызовов и диалплана
Мы научились проверять статус регистраций и эндпоинтов, но в работе администратора часто возникает ситуация: «Пир в сети, но что с ним происходит прямо сейчас?». Чтобы не гадать, мы должны заглянуть внутрь ядра Asterisk. Командная строка (CLI) предоставляет нам инструменты для моментального анализа вызовов и проверки логики прохождения звонка по диалплану.
Мониторинг нагрузки и активных соединений
Первое, с чего стоит начать диагностику при жалобах на связь или подозрениях на взлом — оценка общего состояния системы. Для этого используйте команду core show calls. Она выводит краткую статистику по количеству активных звонков с момента последнего запуска сервера.
Для детального изучения ситуации используйте core show channels. Команда выводит список всех активных каналов. Помните: в архитектуре Asterisk один «вызов» (call) обычно состоит минимум из двух «каналов» (channels). Например: входящее плечо от телефона и исходящее плечо в сторону провайдера.
Как показано в Сравнении 1, вывод этой команды позволяет сопоставить абонентов и понять, на каком этапе находится соединение.
Пример вывода списка каналов:
asterisk -rvv
*CLI> core show channels
Channel Location State Application(Data)
PJSIP/101-000000a1 s@macro-dialout-one: Up AppDial((Outgoing Line))
PJSIP/trunk-000000a2 101@from-internal: Up Dial(PJSIP/101,,HhTtr)
2 active channels
1 active callЗдесь один вызов (1 active call) занимает два канала. Оба в состоянии Up — разговор идет.
Детальный анализ канала
Если у абонента проблемы со звуком или специфические ошибки, изучите конкретный канал командой core show channel <имя_канала>. Она выводит:
- переменные диалплана;
- используемые кодеки;
- уникальный идентификатор (LinkedID);
- время создания.
Если вы обнаружили «зависший» канал, который не закрылся после завершения разговора, его можно сбросить принудительно: soft hangup <имя_канала>.
Проверка логики через dialplan show
Даже если каналы создаются, вызов может уйти по неверному маршруту. Во FreePBX диалплан огромен и состоит из сотен вложенных контекстов. Искать ошибку в конфигурационных файлах вручную долго. Используйте команду dialplan show.
Она показывает «рентгеновский снимок» логики Asterisk именно в том виде, в котором она загружена в оперативную память. Можно проверить как весь диалплан, так и конкретный номер в контексте.
Проверка маршрутизации для номера 101:
*CLI> dialplan show 101@from-internal
[ Context 'from-internal' Extension '101' Priority 1 ]
1. Set(DIALED_EXTEN=101) [pbx_config]
2. Answer() [pbx_config]
3. Dial(PJSIP/101,20) [pbx_config]Если команда возвращает Search for '101' in 'from-internal' failed, Asterisk не знает, что делать с этим номером в данном контексте. В GUI FreePBX номер может выглядеть корректным, но звонить он не будет.
Алгоритм оперативной диагностики
Проводя анализ вызовов, двигайтесь от общего к частному:
- core show calls: есть ли вызов в системе вообще?
- core show channels: какой статус у каналов (Ringing или Up)?
- dialplan show <номер>@<контекст>: верна ли логика прохождения звонка?
- core show channel <имя>: если логика верна, ищем технические детали (кодеки, переменные).
Зайдите в CLI и выполните dialplan show from-internal. Обратите внимание на объем данных и наличие include в конце. Попробуйте найти свой внутренний номер с помощью фильтра: dialplan show <ваш_номер>@from-internal.
Мы научились видеть, как Asterisk обрабатывает звонки на уровне логики. Однако бывают случаи, когда в CLI «все хорошо», а звука в трубке нет или регистрация постоянно обрывается. Чтобы решить такие задачи, нужно спуститься на уровень сетевых пакетов. В следующей теме мы разберем, как использовать tcpdump для захвата трафика и почему это критически важный навык для администратора VoIP.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram