Структура логов и использование команд (tail, grep)

Мы переходим к критически важному этапу в работе администратора — умению «слышать» систему. До этого момента мы настраивали логику звонков, работали с CallerID и временными группами в графическом интерфейсе и конфигурационных файлах. Но что делать, если звонок пошел не по тому сценарию, который мы задумали? Ответ всегда кроется в логах.

Логи Asterisk — это детальный «бортовой самописец». Он фиксирует всё: от регистрации телефона до каждой строчки диалплана. Умение быстро фильтровать эти данные отличает профессионала от новичка.

Анатомия лог-файла

Основной файл для работы — /var/log/asterisk/full. В нем хранится история событий системы. Каждая строка имеет строгую структуру:

[2026-05-15 10:30:05] VERBOSE[12345][C-0000000a] pbx.conf: Executing [101@from-internal:1] Dial("PJSIP/100-00000010", "PJSIP/101") in new stack

Разберем компоненты:

  1. Метка времени: помогает сопоставить лог с жалобой пользователя.
  2. Уровень важности (VERBOSE): показывает степень детализации.
  3. Thread ID (12345): идентификатор процесса внутри Asterisk.
  4. Call-ID (C-0000000a): уникальный маркер конкретного звонка. Это ваш главный ориентир.
  5. Текст события: описание действия (здесь — выполнение команды Dial).

Как показано на Схеме 1, идентификатор вызова позволяет выделить одну логическую цепочку из общего хаоса данных.

Инструменты: tail и less

Забудьте про nano или vi для чтения логов. На «боевом» сервере файл может весить несколько гигабайт — попытка открыть его целиком «повесит» систему. Используйте утилиты, которые читают данные порциями.

Мониторинг в реальном времени: tail

Команда tail выводит последние строки файла. Чтобы видеть новые события мгновенно, используйте ключ -F (follow).

  • Плохо: tail /var/log/asterisk/full (покажет 10 строк и закроется).
  • Правильно: tail -F /var/log/asterisk/full. Ключ -F (заглавный) лучше строчного, так как он продолжает следить за файлом даже после его ротации (пересоздания).

Изучение истории: less

Если нужно пролистать лог назад, используйте less. Она открывает файл постранично и бережет оперативную память.

less /var/log/asterisk/full

Горячие клавиши в less:

  • G — прыгнуть в самый конец;
  • g — вернуться в начало;
  • / — начать поиск по слову или Call-ID;
  • q — выход.

Искусство фильтрации: grep

Когда на сервере 50 одновременных звонков, лог превращается в «простыню». Чтобы не утонуть в ней, используйте grep — инструмент поиска по шаблону.

Анализ логов через grep строится по алгоритму «Золотой цепочки»:

  1. Находим зацепку (номер телефона или IP).
  2. Вычисляем Call-ID этого вызова.
  3. Фильтруем весь лог по этому Call-ID.

Пример поиска всех строк конкретного вызова:

grep "C-0000000a" /var/log/asterisk/full

💡 Совет: Номер телефона может быть записан как 7999..., 8999... или быть частью SIP-адреса. Используйте ключ -i, чтобы игнорировать регистр при поиске.

Полезные ключи grep:

  • -B 3 (Before) — показать 3 строки ДО найденной.
  • -A 5 (After) — показать 5 строк ПОСЛЕ найденной.
  • -E — включить расширенные регулярные выражения.

Практический кейс: Почему сорвался звонок?

Жалоба: «Звонок на номер 101 оборвался около 10:30».

  1. Ищем зацепку: grep "2026-05-15 10:30" /var/log/asterisk/full | grep "101"
  2. Находим ID: в строке видим [C-0000004b].
  3. Изолируем вызов: grep "C-0000004b" /var/log/asterisk/full > call_debug.txt

Теперь у вас в файле call_debug.txt только история этого звонка без лишнего шума. 🛰️

Мы научились извлекать данные. Но что делать, если Asterisk «молчит» и информации в логе не хватает для диагноза? В следующей теме мы разберем уровни детализации и научим систему рассказывать о своих процессах гораздо подробнее.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram