Время хранения логов в Asterisk – База знаний – Профессионалы VoIP

Asterisk logs – part ii

Suppose you want a call trace from a specific call that has already happened, so it’s too late to see it in the console live. First locate the call in the CDR, and get the uniquieid from the system column for the call in question:

Then grep the Asterisk full logs for that value:

This will return a few lines, which will include the Asterisk CALL-ID (not to be confused with CallerID), the second number in the square brackets. It will also return a file name, as full logs are rotated daily and purged weekly. Perform a second grep on the CALL-ID and filename like:

This will return the full call trace from beginning to end of a specific call. You can then search through the trace and send to pastebin for a shareable URL:

If you wish to remove sensitive information before sending to pastebin you can use sed. Suppose you had a caller ID (or DID) of 3145551212 and you want to replace it with NPANXXXXXX, you can do so using this command:

Backtraces (segfaults/core dumps/asterisk crashing)

If you’ve gotten this far, you hit a rare occurrence with Asterisk in that it’s randomly dying on you. The first thing to do is to determine if you are able to obtain a backtrace. To do this look for a file named core.* in your tmp directory. Please note the date and time of the core file you use as to not use an old core dump.

If you’re running FreePBX Distro 7, you can simply install the ‘sangoma-devel’ package and then use the new ‘debuginfo-install’ command to download all the required debug packages. Note that you should replace the asterisk version in the command with the actual asterisk version that you are running (‘asterisk11’ or ‘asterisk14’, for example)

Похожее:  Авито Личный кабинет — подробная инструкция для пользователей

If you’re running an older version of FreePBX Distro, you will need to install these packages manually, again replacing the asterisk version in this example with the actual version of asterisk you are running.

If the asterisk version is 13.14.0 and 14.3.0 above then use the ast_coredumper tool to obtain the backtrace.

If you want a backtrace from a running instance of Asterisk, possibly it’s hung but has not crashed and not generated a core dump, you can do so using:

Otherwise you can then run the command below to obtain a backtrace.txt file which can be investigated and uploaded to the ticket

If you are unable to locate the core file, we recommend you check out the Asterisk Wiki on Obtaining Backtraces.

Cdr.conf

Файл cdr.conf имеет раздел
[general], который
содержит параметры, применяемые ко всей
системе CDR. Дополнительные необязательные
разделы могут существовать в этом файле,
они применяются к конкретному логированию
CDR модулей. Таблица 24-3 приводит список
доступных опций раздела [general].

Таблица
24-3. Раздел cdr.conf [general]

Опция Значение/Пример Примечание
enable yes Включает логирование CDR. По
умолчанию — yes.
unanswered no Протоколирует неотвеченные
вызовы. Обычно только отвеченные
вызовы попадают в CDR. Протоколирование
всех попыток вызова может привести к
большому числу дополнительных записей
о вызовах, а в большинстве своем они
не нужны. По умолчанию — no.
end before
hexten
no Закрывает вывод CDR до запуска
расширения h в
диалплане Asterisk. Обычно CDR не прекращается
пока диалплан полностью не завершит
работу. По умолчанию — no.
initiated
seconds
no При вычислении поля billsec
всегда округляется вверх. Например,
если разница между ответом и завершением
составляет 1 секунду и 1 микросекунду,
billsec будет
установлен на 2 секунды. Это помогает
гарантировать поведение CDR Asterisk
аналогичному поведению телекоммуникационных
компаний. По умолчанию — no.
batch no Очередь записей CDR будет
протоколирована в пакетах, а не
синхронизирована по завершению каждого
вызова. Это предотвращает протоколирование
CDR блокированных завершенных вызовов
с разрушенным процессом Asterisk.
Использование режима batch
может быть невероятно полезно при
работе с базой данных, которая может
быть медленной для обработки запросов.
Значение по умолчанию — no,
но мы рекомендуем его включить.a
size 100 Устанавливает число записей
CDR, находящихся в очереди прежде чем
они запишутся в пакетном режиме. По
умолчанию значение — 100.
time 300 Устанавливает максимальное
количество секунд, которое CDR записи
будут ждать в очереди, прежде чем пакет
будет сохранен. Процесс регистрации
пакета CDR будет выполнен по завершению
этого периода времени, даже если размер
не был достигнут. Значение по умолчанию
составляет 300
секунд.
scheduler only no Устанавливает когда процесс
пакетной обработки CDR должен порождать
новый поток или запланировано новое
содержимое пакета CDR. Значение по
умолчанию — no и
мы рекомендуем не менять его.
safe shutdown yes Блокирует выключение
Asterisk, чтобы убедиться, что все в очереди
записей CDR сохранены в журнал. По
умолчанию — yes и
мы рекомендуем оставить его таким,
так как эта опция предотвращает потери
важных данных.

a
Недостатком включения этой опции есть
то, что если Asterisk слетит или умреть по
какой-либо причине, записи CDR будут
потеряны, так как они хранятся только
в памяти, а процесса Asterisk уже не существует.
См. safeshutdown для получения дополнительной
информации.

Cdr_custom

Этот модуль CDR позволяет
задавать пользовательский формат CDR
записей в файле протоколирования. Этот
модуль наиболее часто используется для
индивидуальных выводов CSV. Файл
конфигурации для этого модуля
/etc/asterisk/cdr_custom.conf.

В следующем примере показана
конфигурация для cdr_custom,
она включает логирование в файл CDR —
Master.csv. Этот файл будет создан в
/var/log/asterisk/cdr-custom/Master.csv. Шаблон, который
был определен, использует две функции
диалплана CDR()

[mappings]

Master.csv =>
${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},

${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},

${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},

${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},

${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},

${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration)})},

${CSV_QUOTE(${CDR(billsec)})},${CSV_QUOTE(${CDR(disposition)})},

${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},

Cdr_manager

Модуль cdr_manager записывает в
CDR события Asterisk Manager Interface (AMI), которые
мы детально обсуждали в Главе 20. Этот
модуль настраивается в файле
/etc/asterisk/cdr_manager.conf. Первый раздел в
этом файле [general],
который содержит простой параметр для
включения этого модуля (по умолчанию
значение — no):

[general]

enabled = yes

Другой раздел в cdr_manager.conf
— это раздел [mappings].
Он позволяет добавлять пользовательские
переменные CDR для событий менеджера.
Синтаксис такой:

Это пример добавления двух
пользовательских переменных CDR:

[mappings]

rate => Rate

carrier => Carrier

При такой конфигурации, записи
CDR будут отображаться как события в
интерфейсе менеджера. Чтобы создать
пример события менеджера, мы используем
следующий пример диалплана:

exten => 110,1,Answer()

same => n,Set(CDR(rate)=0.02)

same => n,Set(CDR(carrier)=BS&S)

same => n,Hangup()

Эта команда используется для
выполнения этого расширения и генерирует
образец события менеджера:

*CLI> console dial [email protected]

В итоге, вот пример события
менеджера, образующегося в результате
этого тестового вызова:

Event: Cdr

Privilege: cdr,all

AccountCode:

Source:

Destination: 110

DestinationContext: testing

CallerID:

Channel: Console/dsp

DestinationChannel:

LastApplication: Hangup

LastData:

StartTime: 2022-08-23 08:27:21

AnswerTime: 2022-08-23 08:27:21

EndTime: 2022-08-23 08:27:21

Duration: 0

BillableSeconds: 0

Disposition: ANSWERED

AMAFlags: DOCUMENTATION

UniqueID: 1282570041.3

Cdr_syslog

Этот модуль позволяет
логировать CDR используя syslog. Для его
включения сперва добавьте конфигурационный
файл системы syslog —/etc/syslog.conf.
Например:

local4.* /var/log/asterisk/asterisk-cdr.log

Asterisk модуль также имеет
конфигурационный файл. Добавьте следующий
раздел в /etc/asterisk/cdr_syslog.conf:

[cdr]

facility = local4

priority = info

template = «We received a call from
${CDR(src)}»

Вот пример вывода syslog с
помощью этой конфигурации:

$ cat
/var/log/asterisk/asterisk-cdr.log

Aug 12 19:17:36 pbx cdr: «We received
a call from 2565551212»

Cel.conf

Система CEL имеет простой
конфигурационный файл /etc/asterisk/cel.conf.
Все параметры, заданные здесь влияют
на обработку CEL независимо от модуля
логирования, находящегося в работе.
Таблица 24-10 показывает параметры, которые
существуют в этом файле. Все они должны
быть установлены в разделе [general]
конфигурационного файла.

Таблица
24-10. cel.conf раздел параметров [general]

Опция Значение/Пример Примечание
enable yes Включает/Отключает CEL. По
умолчанию — no.
apps Dial,queue Устанавливает приложение
диалплана для отслеживания. По умолчанию
для отслеживания приложений нет.
События EV_APP_START
и EV_APP_END будут
генерироваться когда каналы запустят
и остановят выполнение любых
отслеживаемых приложений.
events CHAN_START,CHAN_END,
ANSWER,HANGUP
Списки генерируемых событий.
Это полезно, если вы заинтересованы
только в подмножестве событий,
генерируемых CEL. Если же хотите увидеть
все события, установите эту опцию в
ALL. Значение по
умолчанию не генерирует события.
dateformat %F
%T
Указывает
формат даты когда событие CEL содержит
отметку времени. Сведения о синтаксисе
см. в руководстве для strftime,
запустив man
strftime
в командной
строке. Формат по умолчанию для метки
времени CEL second.microseconds
с эпохи.

Как минимум для
начала использования CEL, вы должны
установить параметры enable
и events в
/etc/asterisk/cel.conf.

Cel_custom

Этот модуль CEL позволяет
логировать события CEL в
пользовательском формате. Чаще всего
он используется для настройки данных
CSV. Файл конфигурации для этого модуля
/etc/asterisk/cel_custom.conf. В файле должен быть
один раздел с названием [mappings].

Следующий пример — это простая
конфигурация для cel_custom,
которая включает один файл протокола
CEL — Master.csv. Этот файл будет создан в
/var/log/asterisk/cel-custom/Master.csv. Шаблон, который
будет определен, использует функции
диалплана CHANNEL(),
CALLERID() и CSV_QUOTE().

Таблица
24-13. Переменные CEL, доступные для
использования в [mappings]

Это пример файла
/etc/asterisk/cel_custom.conf:

[mappings]

Master.csv =>
${CSV_QUOTE(${eventtype})},${CSV_QUOTE(${eventtime})},

${CSV_QUOTE(${CALLERID(name)})},${CSV_QUOTE(${CALLERID(num)})},

${CSV_QUOTE(${CALLERID(ANI)})},${CSV_QUOTE(${CALLERID(RDNIS)})},

${CSV_QUOTE(${CALLERID(DNID)})},${CSV_QUOTE(${CHANNEL(exten)})},

${CSV_QUOTE(${CHANNEL(context)})},${CSV_QUOTE(${CHANNEL(channame)})},

${CSV_QUOTE(${CHANNEL(appname)})},${CSV_QUOTE(${CHANNEL(appdata)})},

${CSV_QUOTE(${CHANNEL(amaflags)})},${CSV_QUOTE(${CHANNEL(accountcode)})},

${CSV_QUOTE(${CHANNEL(uniqueid)})},${CSV_QUOTE(${CHANNEL(linkedid)})},

Cel_odbc

Модуль cel_odbc.so предоставляет
возможность протоколировать события
CEL в базу данных с помощью ODBC. Этот модуль
является не совсем таким как CDR для ODBC.
Для событий CEL нет пользовательских
переменных. Тем не менее, этот модуль
будет по-прежнему приспосабливаться к
структуре базы данных в том, что он будет
логировать поля событий CEL, для которых
имеются соответствующие столбцы и не
будет выдавать ошибки если нет столбца
для каждого поля. Конфигурация для этого
модуля находится в /etc/asterisk/cel_odbc.conf.

Несколько таблиц могут быть
настроены в файле конфигурации cel_odbc.
Каждая имеет свой раздел конфигурации.
Название раздела может быть каким
угодно, модуль не использует его. Вот
пример простой таблицы конфигурации:

[mytable]

connection = asterisk

table = asterisk_cel

Модуль cel_odbc
будет использовать следующие столбцы,
если они существуют (см. таблицу после
этого списка для установки сопоставлений
между типами событий и их целочисленным
значением, которое будет вставлено в
базу данных):

Таблица 24-11 показывает
сопоставление типов событий и их целых
значения, которые будут вставлены в
столбец eventtype базы
данных.

Таблица
24-11. Тип события отображаемое в целом
значении для столбца eventtype

Таблица 24-12 показывает
параметры, которые могут быть определены
в разделе конфигурации таблицы в файле
cel_odbc.conf.

Таблица
24-12. Таблица конфигурации cel_odbc.conf

Опция Значение/Пример Примечание
connection pgsql1 Определяет, какая база
данных будет использоваться. Это
ссылка на настроенное соединение в
res_odbc.conf. Это поле является
обязательным.
table asterisk_cdr Определяет имя таблицы. Это
поле обязательно.
usegmtime no Включает/выключает при
логировании использование временных
меток GMT, а не локального времени. По
умолчанию значение этой опции — no.

В дополнение к паре полей
ключ/значение, которые показаны в
предыдущей таблице, cel_odbc.conf позволяет
несколько других элементов конфигурации.
Во-первых, это псевдоним столбца. Как
правило, поля CEL записываются в столбцах
с одноименным названием. alias
позволяет отображать переменную с
другим именем. Синтаксис:

alias <CEL field> =>
<column name>

Вот пример отображение
колонки, используя параметр alias:

alias exten => extension

Кроме того, можно задать
фильтр контента. Это позволяет определить
критерии, которым должны соответствовать
записи, вставляемые в таблицу. Синтаксис
такой:

filter <CEL field> =>
<content>

Вот
пример фильтра содержания:

filter appname => Dial

Наконец, cel_odbc.conf позволяет
указать статический контент для столбца.
Это может быть полезно когда используется
совместно с фильтром. Статический
контент может помочь различить записи,
которые были вставлены в одну таблицу
по различным разделам конфигурации.
Синтаксис для статического контента
такой:

static <«Static Content Goes Here»>
=> <column name>

Вот пример определяющий
статический контент для записи с CEL
событием:

static «My Content» =>
my_identifier

Cel_radius

Модуль cel_radius
позволяет сохранять события CEL на сервере
RADIUS. Когда используется этот модуль,
каждое событие CEL заносится на
сервер RADIUS как отдельное событие. Этот
модуль настраивается в файле
/etc/asterisk/cel.conf. Параметры для этого
модуля перечислены в Таблице 24-14 и
размещаются в разделе [radius].

Таблица
24-14. Разрешенные параметры в разделе

[radius]

файла cel.conf

Опция Значение/Пример Примечание
usegmtime no Использует
штамп времени GMT (гринвич меридиан
тайм) вместо локального времени. По
умолчанию — yes.
radiuscfg /etc/radiusclient-ng/radiusclient.conf Устанавливает размещение
конфигурационного файла radiusclient-ng.
По умолчанию /etc/radiusclient-ng/radiusclient.conf.

Logger.conf

При устранении неполадок в
системе Asterisk, вы найдете очень полезной
возможность обратиться к записям истории
о том, что происходило в системе в момент
появления проблем. Параметры для хранения
этой информации определяются в
/etc/asterisk/logger.conf.

В идеале, хотелось бы чтобы
система сохраняла запись всего, что она
делает. Однако, это очень затратно. На
загруженной системе, с полностью
включенным протоколированием, можно
полностью заполнить жесткий диск данными
в течение одного дня или около того.
Таким образом, нужен баланс между
детализацией и местом хранения.

Файл /etc/asterisk/logger.conf
позволяет вам определить различные
уровни журналирования для многих файлов,
если нужно. Он обладает великолепной
гибкостью, но это может привести к
запутанности.

Формат записей в файле
logger.conf следующий:

filename =>
type[,type[,type[,…]]]

Это простой файл logger.conf,
который идет с исходниками Asterisk, но не
стоит просто копировать файл примера,
мы рекомендуем использовать следующее
в вашем начальном файле logger.conf:

[general]

[logfiles]

console => notice,warning,error,dtmf

messages => notice,warning,error

;verbose => notice,warning,error,verbose

После сохранения файла, вам
нужно перезагрузить logger используя
следующую команду из оболочки:

$ asterisk -rx ‘logger reload’

или из Asterisk CLI:

*CLI> logger reload

Двухсторонний вызов

Для второго примера один
телефон буде вызывать другой через
расширение 101. В
результате вызов имеет два канала,
которые объединяются в мост. Вот
расширение, которое будет вызываться
в диалплане:

exten => 101,1,Dial(SIP/0000FFFF0001)

А это события CEL, которые
генерируются в результате создания
этого вызова:

«CHAN_START»,»1282062455.574611″,»Julie
Bryant»,»12565553333″,»»,»»,»»,»101″,

«LocalSets»,
«SIP/0000FFFF0003-00000011″,»»,»»,»3″,»»,»1282062455.18″,

«1282062455.18»,»»,»»

«APP_START»,»1282062455.574872″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«101»,»101″,
«LocalSets»,»SIP/0000FFFF0003-00000011″,»Dial»,

«SIP/0000FFFF0001″,»3″,»»,»1282062455.18″,»1282062455.18″,»»,»»

«CHAN_START»,»1282062455.575044″,»Candice
Yant»,»12565551111″,»»,»»,»»,»s»,

«LocalSets»,
«SIP/0000FFFF0001-00000012″,»»,»»,»3″,»»,»1282062455.19″,

«1282062455.18»,»»,»»

«ANSWER»,»1282062458.068134″,»»,»101″,»12565551111″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0001-00000012″,»AppDial»,»(Outgoing
Line)»,»3″,»»,

«1282062455.19»,»1282062455.18″,»»,»»

«ANSWER»,»1282062458.068361″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«101»,»101″,
«LocalSets»,»SIP/0000FFFF0003-00000011″,»Dial»,

«SIP/0000FFFF0001″,»3″,»»,»1282062455.18″,
«1282062455.18»,»»,»»

«BRIDGE_START»,»1282062458.068388″,»Julie
Bryant»,»12565553333″,

«12565553333»,»»,»101″,»101″,
«LocalSets»,»SIP/0000FFFF0003-00000011″,

«Dial»,»SIP/0000FFFF0001″,»3″,»»,»1282062455.18″,
«1282062455.18»,»»,»»

«BRIDGE_END»,»1282062462.965704″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»101″,»101″,
«LocalSets»,»SIP/0000FFFF0003-00000011″,»Dial»,

«SIP/0000FFFF0001″,»3″,»»,»1282062455.18″,
«1282062455.18»,»»,»»

«HANGUP»,»1282062462.966097″,»»,»101″,»12565551111″,»»,»»,»»,»LocalSets»,

«SIP/0000FFFF0001-00000012″,»AppDial»,»(Outgoing
Line)»,»3″,»»,

«1282062455.19»,»1282062455.18″,»»,»»

«CHAN_END»,»1282062462.966119″,»»,»101″,»12565551111″,»»,»»,»»,»LocalSets»,

«SIP/0000FFFF0001-00000012″,»AppDial»,»(Outgoing
Line)»,»3″,»»,

«1282062455.19»,»1282062455.18″,»»,»»

«APP_END»,»1282062462.966156″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«101»,»101″,»LocalSets»,»SIP/0000FFFF0003-00000011″,»Dial»,

«SIP/0000FFFF0001″,»3″,»»,»1282062455.18″,»1282062455.18″,»»,»»

«HANGUP»,»1282062462.966215″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»101″,»101″,»LocalSets»,»SIP/0000FFFF0003-00000011″,»»,»»,»3″,»»,

«1282062455.18»,»1282062455.18″,»»,»»

«CHAN_END»,»1282062462.966418″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»101″,»101″,»LocalSets»,»SIP/0000FFFF0003-00000011″,»»,»»,»3″,»»,

«1282062455.18»,»1282062455.18″,»»,»»

«LINKEDID_END»,»1282062462.966441″,»Julie
Bryant»,»12565553333″,

«12565553333»,»»,»101″,»101″,»LocalSets»,»SIP/0000FFFF0003-00000011″,

«»,»»,»3″,»»,»1282062455.18″,»1282062455.18″,»»,»»

Дебаг на уровне каналов

В Asterisk можно производить дебаг на уровне отдельных драйверов. Например, если вы хотите отладить подключения по протоколу SIP – своя команда, по IAX – другая. Ниже представлен список:

ДрайверКоманда отладки
SIP (версия вышел 1.6)sip set debug on
SIP (версия 1.4)sip set debug
PJSIPpjsip set logger on
Запись CDRcdr set debug on
IAX2 (версия вышел 1.6)iax2 set debug on
IAX2 (версия 1.4)iax2 set debug

Логирование демоном linux
syslog

Linux содержит очень мощный
движок логирования, которым Asterisk способен
воспользоваться. Сейчас обсуждаются
различные варианты syslog и описание
всех возможных способов логирования
Asterisk выходит за рамки этой книги,
достаточно сказать, что если вы хотите
вести протокол Asterisk демоном syslog,
вам просто необходимо указать следующую
строку в файле /etc/asterisk/logger.conf:

syslog.local0 => notice,warning,error ;
или любые типы, которые хотите

; регистрировать

Вы должны иметь запись в вашем
конфигурационном файле1
системного журнала (syslog) с именем
local0, которая должна
выглядеть примерно так:

local0.* /var/log/asterisk/syslog

Вы можете для
этого использовать local0
до local7, но проверьте
ваш syslog.conf чтобы убедиться что ничего
другого не использует один из этих
каналов syslog.

syslog2
это гораздо более мощный инструмент
регистрации, но он требует больше знаний,
чем логирование Asterisk напрямую в файлы.

Наблюдение за asterisk с opennms

После того, как вы установили
OpenNMS и настроили модуль res_snmp
в Asterisk, вы можете использовать OpenNMS для
наблюдения за вашим сервером Asterisk. Вы
можете настроить какие статистические
данные отслеживать, а также какие
уведомления хотели бы получать на основе
этих статистических данных.

Изучение
возможностей OpenNMS остается в качестве
упражнения для читателя. Тем не менее,
мы приложили несколько графиков для
демонстрации основной информации,
которую вы можете получить от сервера
Asterisk. Эти графики от сервера Asterisk, который
не очень сильно загружен, но они дают
хороший пример того, что вы можете
увидеть.

Рисунок 24-1 содержит график,
показывающий количество активных
каналов в Asterisk в различное время.

Время хранения логов в Asterisk - База знаний - Профессионалы VoIP
Рисунок 24-1. График активности каналов Asterisk

Рисунок 24-2 показывает график
активности каналов определенного типа.
В данном случае мы просматриваем
количество активных каналов DAHDI в
системе. Мониторинг каналов DAHDI интересен
с практической стороны, поскольку каналы
DAHDI взаимосвязаны с физическими ресурсами
и доступное количество каналов
предопределено.

Время хранения логов в Asterisk - База знаний - Профессионалы VoIP
Рисунок 24-2. График активности каналов DAHDI

В завершение, Рисунок 24-3
показывает использование сетевого
интерфейса. Как вы можете видеть, были
всплески трафика, следующего «в» и «из»
системы, когда происходили SIP вызовы.

Время хранения логов в Asterisk - База знаний - Профессионалы VoIP
Рисунок 24-3. График трафика на сетевом интерфейсе

Настройка логирования

Приступаем к настройке. Для этого, нам необходим посмотреть содержимое файла /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_20220811 основные события. Для этого, откроем для редактирования файл и добавим в него следующую запись:

[root@asterisk ~]# vim logger_logfiles_custom.conf
 logs_20220811 => notice,warning,error,debug,verbose,dtmf

Сохраняем изменения нажатием :x!.

Начиная с 13 версии Asterisk, существует возможность создавать задачи на логирования прямо из консоли. Для этого существует команда logger add channel . Например:

logger add channel logs_20220811  notice,warning,error,debug,verbose,dtmf

Логирование будет остановлено при следующем рестарте Asterisk.

Настройка ротации логов

Для любых логов должна осуществляться ротация, т.е. удаление устаревших файлов. Ниже приводится пример ротации логов. Почитать же про саму ротацию логов и как ее настраивать в разных версиях linux, Вы можете в разделе “логи linux”.

В папке /etc/logrotate.d создайте файл asterisk (можно без расширения).
В этот файл впишите:

/var/log/asterisk/security
/var/log/asterisk/messages {
nocreate
nocopytruncate
nomissingok
rotate 53
size=100M
weekly
noolddir
postrotate
/usr/sbin/asterisk -rx ‘logger reload’
endscript
}

Если у Вас asterisk версии менее 10-й (1.8, или 1.6 и т.д.), то удалите строку /var/log/asterisk/security

В данной конфигурации логи security и messages (из папки /va/log/asterisk) будут переименовываться каждую неделю (или если размер логов превысит 100 мегабайт). Логи старее 1 года (точнее, 53-х недель: год 1 неделя) будут удаляться. Подробное описание каждого из параметров см. в разделе “логи linux”.

Односторонний вызов

В этом примере показан
одиночный телефонный вызов в расширение,
которое проигрывает сообщение “Hello
World.” Вот этот диалплан:

exten => 200,1,Answer()

same => n,Playback(hello-world)

same => n,Hangup()

Вот события CEL, которые
регистрируются в результате принятия
этого вызова:

«CHAN_START»,»1282062437.436130″,»Julie
Bryant»,»12565553333″,»»,»»,»»,»200″,

«LocalSets»,
«SIP/0000FFFF0003-00000010″,»»,»»,»3″,»»,»1282062437.17″,

«1282062437.17»,»»,»»

«ANSWER»,»1282062437.436513″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«200»,»200″,
«LocalSets»,»SIP/0000FFFF0003-00000010″,»Answer»,»»,»3″,»»,

«1282062437.17»,»1282062437.17″,»»,»»

«APP_START»,»1282062437.501868″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»200″,»200″,
«LocalSets»,»SIP/0000FFFF0003-00000010″,»Playback»,

«hello-world»,»3″,»»,»1282062437.17″,
«1282062437.17»,»»,»»

«APP_END»,»1282062439.008997″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«200»,»200″,
«LocalSets»,»SIP/0000FFFF0003-00000010″,»Playback»,

«hello-world»,»3″,»»,»1282062437.17″,
«1282062437.17»,»»,»»

«HANGUP»,»1282062439.009127″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«200»,»200″,
«LocalSets»,»SIP/0000FFFF0003-00000010″,»»,»»,»3″,»»,

«1282062437.17»,»1282062437.17″,»»,»»

«CHAN_END»,»1282062439.009666″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»200″,»200″,
«LocalSets»,»SIP/0000FFFF0003-00000010″,»»,»»,»3″,»»,

«1282062437.17»,»1282062437.17″,»»,»»

«LINKEDID_END»,»1282062439.009707″,»Julie
Bryant»,»12565553333″,

«12565553333»,»»,»200″,»200″,
«LocalSets»,»SIP/0000FFFF0003-00000010″,»»,

«»,»3″,»»,»1282062437.17″,»1282062437.17″,»»,»»

Перекомпиляция asterisk с модулем res_snmp

Как только вы установите все
нужные пакеты для SNMP, то можете
перекомпилировать Asterisk с поддержкой
SNMP:

$ cd
~/src/asterisk-complete/asterisk/11/

$ ./configure

$ make
menuselect # verify that
res_snmp is selected under Resource Modules

$ make

$ sudo make
install

Затем вам нужно скопировать
пример конфигурационного файла в каталог
/etc/asterisk:

$ sudo cp
~/src/asterisk-complete/asterisk/11/configs/res_snmp.conf.sample

/etc/asterisk/res_snmp.conf

Мы раскажем о настройке этого
файла, для использования с OpenNMS, в
следующем разделе.

Поиск и устранение проблем asterisk и связанного с ним оборудования: log-файлы

Данная статья посвящена работе с log-файлами, инструментам для работы с log-файлами и модули FreePBX способные помочь в работы с log-файлами.

Log-файлы. Для чего они нужны, где их искать и как использовать?

Log-файлы это друзья инженера и если проблема «плавающая», то не редко только логи могут прояснить ситуацию. Как известно, любая программа пишет свой лог файл, куда заносит информацию о том, что произошло, что вызвало ошибку или, к примеру, чего не хватает для нормальной работы и.т.д.

В конфигурационном каталоге asterisk (по умолчанию /etc/asterisk) находится несколько файлов, отвечающих за логи:1.Файл asterisk.conf содержит переменную astlogdir, которая указывает местоположение логов asterisk (по умолчанию — /var/log/asterisk)

2.Файл конфигурации логов — logger.conf. В нем можно прописывать различные опции для ведения логов, а также указать, какие виды информации в эти логи должны будут сохранять. Так же для каждого вида информации можно предусмотреть свой файл логов.

Полный список и расположение лог файлов следующий:

Обратите внимание, что в зависимости от используемого дистрибутиваLinuxместо расположениеlog-файлов может отличаться. Тем не менее, настраивать какие-то дополнительные условия для логирования мы не будем. Как было написано выше – стандартный путь логов следующий: /var/log/asterisk. Перейдем туда

Время хранения логов в Asterisk - База знаний - Профессионалы VoIP

Как можете видеть – здесь содержится огромное количество логов очередей, фаервола и много чего еще, но в данном случае нас интересует полный лог станции с одноименным названием full. Есть два способа прочесть содержимое:

1 С помощью текстового редактора (vi/vim/nano) 2 С помощью утилиты grep

И мы даже не будем рассматривать просмотр лога с помощью текстового редактора. Вне зависимости от того, какой текстовый редактор вы будите использовать открывать весь лог-файл не оптимальное решение и удобнее использовать для этого утилиту grep. Grep это утилита командной строки которая используется для фильтрации текста по заданному шаблону. Пример: предположим, что интересующий момент произошел сегодня ночью (20 августа) в 04:42:58.

Используем следующую команду # grep ’04:42:58′ full

Как можете видеть утилита вывела все события которые произошли в указанное время, однако нам нужен полный лог связанный с этим событием и есть возможность его вывести игнорируя все остальные события. Для этого обратите внимание на значение [C-00004aec]
Время хранения логов в Asterisk - База знаний - Профессионалы VoIP

Это UID звонка и для каждого он уникален и позволяет по нему просмотреть все события связанные с этим звонком.

Теперь, если вы сделали все правильно, то вы можете посмотреть полный лог этого звонка от начала и до его завершения. На этом, конечно, функции grep не заканчиваются и вы ниже можете найти пару полезных ключей для grep.

Некоторые дополнительные ключи команды grep:

  • -v : Выводи реверсивные результаты. Вместо того чтобы вывести строки где искомое было найдено — выводи те строки где искомой подстроки нет.
  • -c : Отключает стандартный способ вывода результата и вместо этого отображает только число обозначающее количество найденых строк.
  • -i : Делает поиск регистронезависимым
  • -w : Ведет поиск по цельным словам. Например, при обычном поиске строки ‘200’ grep может найти слово ‘81002002020. А если используется данный ключ то будут найдены только строки где есть слово ‘200’.
  • -l : Выводит только имена файлов, где была найдена строка.
  • -r : Производит поиск рекурсивно по всем поддиректориям.

Этого будет более чем достаточно для просмотра логов. Подробнее по мониторингу системы вы можете узнать по следующей ссылке

Предостережения

Система CDR в Asterisk работает
очень хорошо для достаточно простых
сценариев вызова. Однако, когда сценарии
вызова становятся более сложными,
включая звонки на нескольких сторон,
трансфер, парковку и другие подобные
функции, система CDR начинает быстро
падать.

Многие пользователи сообщают,
что записи не показывают всей информации,
которую они ожидали. Многие исправления
ошибок были сделаны для решения некоторых
вопросов, но стоимость ошибки или
изменения в поведении при внесении
изменений в этой области очень высока,
так как эти записи используются при
выставлении счета.

В результате команда
разработчиков Asterisk все меньше вносит
дополнительные изменения в систему
CDR. Вместо этого, была разработана новая
система регистрации событий канала
(CEL), которая предназначена помочь в
адресном логировании более сложных
сценариев обработки вызовов.

Приложения диалплана

Есть несколько приложений
диалплана, которые могут обрабатывать
CDR для текущего вызова. Для получения
списка приложений CDR, которые загружаются
в текущую версию Asterisk, мы можем использовать
следующую команду CLI:

*CLI> core show applications like CDR

-= Matching Asterisk Applications =-

ForkCDR: Forks the Call Data Record.

NoCDR: Tell Asterisk to not
maintain a CDR for the current call

ResetCDR: Resets the Call Data Record.

-= 3 Applications Matching =-

Каждое приложение имеет
встроенную в Asterisk документацию, которую
можно просмотреть с помощью следующей
команды:

*CLI> core show application
<application name>

Просмотр логов черезweb-интерфейс

По каким-то причинам у вас не может оказаться доступа на АТС по ssh и в таком случае вы можете просмотреть логи на web -интерфейсе FreePBX с помощью модуля Asterisk Log Files . Этот модуль расположен по следующему пути: Reports — Asterisk LogFiles

После попадаем мы на следующую страничку

Как можете видеть, уже без каких либо манипуляций модуль подгрузил последние логи со станции без каких либо фильтров

Есть возможность просматривать все логи не только за сегодняшнее число, но и за прошлые, а так же конкретно какой-то log-файл просмотреть.
Время хранения логов в Asterisk - База знаний - Профессионалы VoIP

Давайте для примера посмотрим подробную статистику по одному из звонков.

Как можете видеть поле Filtre выполняет ту же роль что и утилита grep

Тем не менее, советуем при возможности просматривать логи подключившись к серверу напрямую используя терминальный клиентPuTTyкоторый, к примеру, поддерживает операцию копировать/вставить, что упрощает работу при анализе лога.

Редактирование /etc/snmp/snmpd.conf
для работы с вашим сервером opennms

Теперь мы можем изменить файл
/etc/snmp/snmpd.conf для SNMP на хосте. Переименуем
текущий пример конфигурационного файла
и создадим новый файл snmpd.conf:

$ cd /etc/snmp

$ sudo mv
snmpd.conf snmpd.sample

Первое что нужно сделать —
это добавить права доступа этому файлу.
Мы предлагаем вам прочитать файл
/etc/snmpd/snmp.sample, который вы переименовали
для лучшего представления об установке
прав доступа. Затем добавим следующее
в ваш файл snmpd.conf:

$ sudo sh -c
cat > snmpd.conf

Редактирование
/etc/asterisk/res_snmp.conf для работы с вашим
сервером opennms

В файле /etc/asterisk/res_snmp.conf,
который вы скопировали из каталога с
исходными кодами, нужно раскоментировать
две строки:

[general]

;subagent=yes

;enabled=yes

Изменим файл res_snmp.conf для
обоих клиентов SNMP и включим subagent:

[general]

subagent=yes

enabled=yes

После изменения этого файла,
вам нужно перезагрузить модуль
res_snmp.so, чтобы изменения вступили в
силу:

*CLI> module unload res_snmp.so

Unloaded res_snmp.so

Unloading [Sub]Agent Module

== Terminating SubAgent

*CLI> module load res_snmp.so

Loaded res_snmp.so

== Parsing
‘/etc/asterisk/res_snmp.conf’: == Found

Loading [Sub]Agent Module

Loaded res_snmp.so => (SNMP [Sub]Agent
for Asterisk)

== Starting SubAgent

Слепой трансфер

В этом последнем примере
будет выполнен трансфер. Вызов начнется
вызовом телефона по добавочному номеру
102. Затем вызов
будет переведен на другой телефон с
номером 101. Вот
соответствующий диалплан:

exten => 101,1,Dial(SIP/0000FFFF0001)

exten => 102,1,Dial(SIP/0000FFFF0002)

Это запротоколированные
события CEL в результате этого сценария
вызова:

«CHAN_START»,»1282062488.028200″,»Julie
Bryant»,»12565553333″,»»,»»,»»,

«102»,»LocalSets»,
«SIP/0000FFFF0003-00000013″,»»,»»,»3″,»»,

«1282062488.20»,»1282062488.20″,»»,»»

«APP_START»,»1282062488.028464″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»102″,»102″,
«LocalSets»,»SIP/0000FFFF0003-00000013″,»Dial»,

«SIP/0000FFFF0002″,»3″,»»,»1282062488.20″,
«1282062488.20»,»»,»»

«CHAN_START»,»1282062488.028762″,»Brooke
Brown»,»12565552222″,»»,»»,»»,

«s»,»LocalSets»,
«SIP/0000FFFF0002-00000014″,»»,»»,»3″,»»,»1282062488.21″,

«1282062488.20»,»»,»»

«ANSWER»,»1282062492.565759″,»»,»102″,»12565552222″,»»,»»,»102″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»AppDial»,»(Outgoing
Line)»,»3″,»»,

«1282062488.21»,»1282062488.20″,»»,»»

«ANSWER»,»1282062492.565973″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«102»,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,»Dial»,

«SIP/0000FFFF0002″,»3″,»»,»1282062488.20″,»1282062488.20″,»»,»»

«BRIDGE_START»,»1282062492.566001″,»Julie
Bryant»,»12565553333″,

«12565553333»,»»,»102″,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,

«Dial»,»SIP/0000FFFF0002″,»3″,»»,»1282062488.20″,»1282062488.20″,»»,»»

«CHAN_START»,»1282062497.940687″,»»,»»,»»,»»,»»,»s»,»LocalSets»,

«AsyncGoto/SIP/0000FFFF0002-00000014″,»»,»»,»3″,»»,»1282062497.22″,

«1282062488.20»,»»,»»

«BLINDTRANSFER»,»1282062497.940925″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«102»,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,»Dial»,»SIP/0000FFFF0002″,

«3»,»»,»1282062488.20″,»1282062488.20″,

«AsyncGoto/SIP/0000FFFF0002-00000014<ZOMBIE>»,»»

«BRIDGE_END»,»1282062497.940961″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«102»,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,»Dial»,

«SIP/0000FFFF0002″,»3″,»»,»1282062488.20″,»1282062488.20″,»»,»»

«APP_START»,»1282062497.941021″,»»,»102″,»12565552222″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»Dial»,»SIP/0000FFFF0001″,»3″,»»,

«1282062497.22»,»1282062488.20″,»»,»»

«CHAN_START»,»1282062497.941207″,»Candice
Yant»,»12565551111″,»»,»»,»»,»s»,

«LocalSets»,»SIP/0000FFFF0001-00000015″,»»,»»,»3″,»»,»1282062497.23″,

«1282062488.20»,»»,»»

«HANGUP»,»1282062497.941361″,»»,»»,»»,»»,»»,»»,»LocalSets»,

«AsyncGoto/SIP/0000FFFF0002-00000014<ZOMBIE>»,»AppDial»,

«(Outgoing
Line)»,»3″,»»,»1282062488.21″,»1282062488.20″,»»,»»

«CHAN_END»,»1282062497.941380″,»»,»»,»»,»»,»»,»»,»LocalSets»,

«AsyncGoto/SIP/0000FFFF0002-00000014<ZOMBIE>»,»AppDial»,»(Outgoing
Line)»,

«3»,»»,»1282062488.21″,»1282062488.20″,»»,»»

«APP_END»,»1282062497.941415″,»Julie
Bryant»,»12565553333″,»12565553333″,»»,

«102»,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,»Dial»,

«SIP/0000FFFF0002″,»3″,»»,»1282062488.20″,»1282062488.20″,»»,»»

«HANGUP»,»1282062497.941453″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»102″,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,»»,»»,»3″,»»,

«1282062488.20»,»1282062488.20″,»»,»»

«CHAN_END»,»1282062497.941474″,»Julie
Bryant»,»12565553333″,»12565553333″,

«»,»102″,»102″,»LocalSets»,»SIP/0000FFFF0003-00000013″,»»,»»,»3″,»»,

«1282062488.20»,»1282062488.20″,»»,»»

«ANSWER»,»1282062500.559578″,»»,»101″,»12565551111″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0001-00000015″,»AppDial»,»(Outgoing
Line)»,»3″,»»,

«1282062497.23»,»1282062488.20″,»»,»»

«BRIDGE_START»,»1282062500.559720″,»»,»102″,»12565552222″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»Dial»,»SIP/0000FFFF0001″,»3″,»»,»1282062497.22″,

«1282062488.20»,»»,»»

«BRIDGE_END»,»1282062512.742600″,»»,»102″,»12565552222″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»Dial»,»SIP/0000FFFF0001″,»3″,»»,»1282062497.22″,

«1282062488.20»,»»,»»

«HANGUP»,»1282062512.743006″,»»,»101″,»12565551111″,»»,»»,»»,»LocalSets»,

«SIP/0000FFFF0001-00000015″,»AppDial»,»(Outgoing
Line)»,»3″,»»,»1282062497.23″,

«1282062488.20»,»»,»»

«CHAN_END»,»1282062512.743211″,»»,»101″,»12565551111″,»»,»»,»»,»LocalSets»,

«SIP/0000FFFF0001-00000015″,»AppDial»,»(Outgoing
Line)»,»3″,»»,»1282062497.23″,

«1282062488.20»,»»,»»

«APP_END»,»1282062512.743286″,»»,»102″,»12565552222″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»Dial»,»SIP/0000FFFF0001″,»3″,»»,»1282062497.22″,

«1282062488.20»,»»,»»

«HANGUP»,»1282062512.743346″,»»,»102″,»12565552222″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»»,»»,»3″,»»,»1282062497.22″,»1282062488.20″,

«»,»»

«CHAN_END»,»1282062512.743371″,»»,»102″,»12565552222″,»»,»»,»101″,»LocalSets»,

«SIP/0000FFFF0002-00000014″,»»,»»,»3″,»»,»1282062497.22″,»1282062488.20″,

«»,»»

«LINKEDID_END»,»1282062512.743391″,»»,»102″,»12565552222″,»»,»»,»101″,

«LocalSets»,»SIP/0000FFFF0002-00000014″,»»,»»,»3″,»»,»1282062497.22″,

«1282062488.20»,»»,»»

Типы событий канала

Каждая запись CEL представляет
событие, которое произошло для канала
в системе Asterisk. Таблица 24-7 содержит
список событий, которые генерирует
Asterisk когда происходит вызов.

Таблица
24-7. Типы событий CEL

Есть еще несколько событий,
которые были определены, но еще не
используются в любом месте кода Asterisk.
Предположительно, некоторые будущие
версии будут генерировать эти события
в нужном месте. Они перечислены в Таблице
24-8.3

Таблица
24-8. Определённые, но не используемые
типы событий CEL

Тип события CEL Описание
CONF_ENTER Канал, который подключается
к комнате конференции.
CONF_EXIT Канал, который отключился
от комнаты конференции.
CONF_START Конференция была начата.
Это событие происходит, когда первый
канал входит в комнату конференции.
CONF_END Конференция была закончена.
Это событие происходит, когда последний
канал покидает комнату конференции.
3WAY_START Старт трехстороннего вызова.
3WAY_END Завершение трехстороннего
вызова.
TRANSFER Основной трансфер был
выполнен.
HOOKFLASH Канал сообщил о событии
сигнал отбоя (hookflash).

Установка opennms

Вики OpenNMS имеет детальную
иструкцию по установке OpenNMS.

OpenNMS можно не
устанавливать на ваш сервер Asterisk. Вы
можете выделить отдельную машину для
сервера OpenNMS.

Поскольку Вики OpenNMS предоставляет
все необходимые инструкции, мы позволим
экспертам провести вас по первой части
установки. После установки OpenNMS, вернитесь
сюда и мы покажем как настроить его для
работы с Asterisk.

Инструкции по установке
OpenNMS в вики используют SNMPv2c, который не
является безопасным методом абстрагирования
данных протокола SNMP. Так как мы хотим
построить безопасную систему, наши
инструкции покажут вам как включить
поддержку SNMPv3.5

Однако, поскольку SNMPv3 может
быть немного громоздким зверем или
потому что вы не желаете включить SNMPv3
по каким-то причинам (например, если
ваша версия SNMP не была собрана с поддержкой
OpenSSL), мы предоставим вам инструкции по
настройке демона SNMP для SNMPv2c и SNMPv3.

Как правило, проще настроить
систему для SNMPv2c, а затем обновить ее до
SNMPv3, правильная настройка SNMPv3 более
сложная.

Заключение

Asterisk очень хорошо позволяет
отслеживать различные аспекты своей
деятельности, начиная от CDR до полной
отладки выполнения кода. Эти различные
механизмы помогут вам в управлении УАТС
Asterisk и представляют собой один из
моментов, в которых Asterisk значительно
превосходит большинство (если не все)
традиционные АТС.

1Который
обычно находится в /etc/syslog.conf.


rsyslog, syslog-ng и все остальное.

3Если
вы представите патч для добавления
любого из этих событий в код и опишите
эту сноску, Рассел вышлет вам бесплатно
футболку Asterisk. Сноска за взятку!

4OpenNMS,
конечно не единственная платформа,
которая может быть использована с
модулем res_snmp. Тем
не менее, мы решили обсудить её здесь
по ряду причин. Во-первых, OpenNMS очень
хорошая платформа управления сетью,
которая имеет специальную интеграцию
с Asterisk.

Во-вторых, это открытый исходный
код и 100% бесплатный. Наконец, Джефф
Гельбах из OpenNMS внесший свой вклад в
развитие Asterisk, прилагает значительные
усилия в поддержке SNMP. OpenNMS также был
достаточно хорош, чтобы помочь нам
получить описание как все это работает,
что мы могли задокументировать это.

5Дополнительно
вы можете найти пост
в блоге о включении SNMPv3 для OpenNMS.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *