Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

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

За логирование WCS Core отвечает файл настроек log4j.properties и ряд настроек файла flashphoner.properties:

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

...

Настройка

...

Значение по умолчанию

...

client_log_level

...

INFO

...

client_dump_level

...

0

...

enable_extended_logging

...

true

Логи пишутся в каталог /usr/local/FlashphonerWebCallServer/logs

  • client_logs - логи, которые пишутся на стороне сервера и относятся к сессии клиента с WCS-сервером (Клиентские логи).
  • server_logs - общие логи, которые пишутся на стороне сервера.

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

Это стандартный конфиг формата log4j.

Image Removed

...

Аттрибут

...

Значение

...

Описание

...

log4j.rootLogger

...

info, stdout, fAppender

...

Корневой логгер. 

info - Уровень логгирования INFO. Доступны другие более подробные уровни, например DEBUG и TRACE и менее подробные, например ERROR.

stdout, fAppender - определяют как и куда будут выводиться логи.

...

log4j.logger.incoming.Publication

...

info, incoming_publication

Логгер статистики RTMFP-SIP звонков для входящего с SIP сервера трафика.

info - уровень логгирования
incoming_publication - определяют как и куда будут выводиться логи.

...

log4j.logger.outgoing.Publication

...

info, outgoing_publication

...

Логгер статистики RTMFP-SIP звонков для исходящего на SIP сервер трафика.

info - уровень логгирования
outgoing_publication - определяют как и куда будут выводиться логи.

...

log4j.logger.pushLogs.FlashphonerHandler

...

Не используется

...

Не используется

...

log4j.additivity.incoming.Publication

...

false

...

Не дублировать данные логи в общий лог, а писать в отдельные

...

log4j.additivity.outgoing.Publication

...

false

...

Не дублировать данные логи в общий лог, а писать в отдельные

...

log4j.logger.sipMessages

...

debug

...

Выводить входящие и исходящие SIP сообщения в лог

...

log4j.appender.stdout

...

org.apache.log4j.ConsoleAppender

...

Вывод логов в stdout

...

log4j.appender.fAppender

...

org.apache.log4j.DailyRollingFileAppender

...

Вывод логов в fAppender

...

log4j.appender.incoming_publication

...

org.apache.log4j.DailyRollingFileAppender

...

Вывод статистики RTMFP в incoming_publication

...

log4j.appender.outgoing_publication

...

org.apache.log4j.DailyRollingFileAppender

...

Вывод статистики RTMFP в outgoing_publication

...

log4j.appender.clientLog

...

org.apache.log4j.DailyRollingFileAppender

...

Не используется

Горячая замена настроек логгирования

WCS автоматически подхватывает изменения, сделанные в файле log4j.properties. Это удобно для целей отладки и получения дополнительных логов без перезагрузки сервера. Например, в том случае если требуется включить более подробные логи или изменить формат вывода логов. Однако для большей надежности в production все же рекомендуется выполнить перезагрузку WCS-сервера.

Трассировка Websocket сообщений

В целях отладки или разработки собственного API, может быть включена трассировка всех Websocket сообщений, кроме транспортных. Для того, чтобы логировать все входящие/исходящие Websocket сообщения в файл websocket.log в каталоге /usr/local/FlashphonerWebCallServer/logs/server_logs, необходимо добавить в файл log4j.properties следующие строки:

Code Block
languagejava
themeRDark
log4j.logger.WSServerHandler=trace, wsAppender
log4j.logger.WSClient=debug, wsAppender
log4j.appender.wsAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.wsAppender.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.wsAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.wsAppender.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %20.20c{1} - %t %m%n
log4j.appender.wsAppender.File=${com.flashphoner.fms.AppHome}/logs/server_logs/websocket.log

Клиентские логи

Включение, отключение и управление уровнем логирования

Клиентские логи - это логи на сервере, которые относятся к сессии web-клиента. Клиентские логи в client_logs пишутся только тогда, когда включена настройка (по умолчанию)

Code Block
languagebash
themeRDark
enable_extended_logging=true

Для отключения клиентских логов необходимо установить в файле flashphoner.properties

Code Block
languagebash
themeRDark
enable_extended_logging=false

Управлять уровнем логирования можно настройкой client_log_level, которая может принимать значения ERROR, INFO, DEBUG, TRACE. По умолчанию

Code Block
languagebash
themeRDark
client_log_level=INFO

Управление настройками автоматической очистки для этих логов осуществляется с помощью настроек keep_extended_logs_max_days, extended_logs_dir_depth, check_extended_logs_interval. По умолчанию проверка на устаревшие логи проходит каждые 24 часа и удаляются логи хранящиеся более 30 дней. Для изменения правил удаления и хранения клиентских логов отредактируйте эти настройки и перезапустите WCS сервер.

Управление уровнем логирования "на лету"

Уровень логирования для определенной сессии можно менять на ходу, без перезапуска сервера. Для этого используются REST-запросы

REST-запрос должен быть HTTP/HTTPS POST запросом в таком виде:

  • HTTP: http://test.flashphoner.com:8081/rest-api/logger/enable_client_log
  • HTTPS: https://test.flashphoner.com:8444/rest-api/logger/enable_client_log

Здесь:

  • test.flashphoner.com - адрес WCS-сервера
  • 8081 - стандартный REST / HTTP порт WCS-сервера
  • 8444 - стандартный HTTPS порт
  • rest-api - обязательная часть URL
  • /logger/enable_client_log - используемый REST-метод

REST-методы и статусы ответа

...

REST-метод

...

Пример тела REST-запроса

...

Пример тела REST-ответа

...

Статусы ответа

...

Описание

...

/logger/enable_client_log

...

Code Block
languagejs
themeRDark
{
 "sessionId": "/127.0.0.1:57539/192.168.1.101:8443",
 "logLevel": "DEBUG"
}

200 - Уровень изменен

404 - Сессия не найдена

...

Установить указанный уровень логирования в заданной сессии

...

/logger/disable_client_log

...

Code Block
languagejs
themeRDark
{
 "sessionId": "/127.0.0.1:57539/192.168.1.101:8443"
}

...

200 - Логирование отключено

404 - Сессия не найдена

...

Полностью отключить логирование в заданной сессии

Параметры

...

Имя параметра

...

Описание

...

Пример

...

sessionId

...

Идентификатор сессии

...

/127.0.0.1:57539/192.168.1.101:8443

...

logLevel

...

Устанавливаемый уровень логирования

...

DEBUG

Таким образом, при возникновении проблем с потоком, опубликованным на сервере (например, поток опубликован, но не воспроизводится), необходимо отправить серверу REST-запрос и переключить уровень логирования в DEBUG, а затем, когда проблема воспроизведена и данные собраны, переключить уровень логирования обратно в INFO. Возможно также полностью отключить логирование для определенной сессии.

Изменение уровня логирования при помощи REST-запросов влияет только на заданную сессию, но не на другие сессии на сервере, в том числе на сессии, создаваемые позднее.

Использование самописца (flight recorder)

Самописец (flight recorder) позволяет циклически записывать для публикуемого потока последние несколько событий. Эта информация поможет диагностировать проблемы с публикацией потока, не включая полные отладочные логи клиента. Самописец включается настройкой в файле flashphoner.properties

Code Block
languagebash
themeRDark
enable_flight_recorder=true

Необходимо также указать категорию событий, которые будут записываться (определяется разработчиком)

Code Block
languagebash
themeRDark
flight_recorder_categories=WCS1438

События записываются для публикующего клиента в файл flight_recorder.log в случае, если диагностируется остановка публикации потока, или поток портится каким-либо образом.

Для того, чтобы протестировать работу самописца, необходимо установить параметр

Code Block
languagebash
themeRDark
enable_flight_recorder_test=true

без перезапуска сервера. Это запишет события для всех подключенных публикующих клиентов.

Warning
Параметр enable_flight_recorder_test не предназначен для промышленной эксплуатации

Структура и содержимое клиентских логов

Структура клиентских логов:

Code Block
languagebash
themeRDark
client_logs
---- 2018-05-16
-------- 84gij60a6u3ni7docsr1di1l5b-15-06-59
------------ flashphoner.log
------------ client-84gij60a6u3ni7docsr1di1l5b-2018.05.16.15.07.26-1526458046646.report
------------ MediaDump-85d65b00-639e-4a7e.31002-31004-31006-31008.pcap

Лог flashphoner.log

Клиентские логи client_logs пишутся по датам. Под каждую дату создается директория с именем в формате ГГГГ-ММ-ДД, например 2018-05-16.
Когда web-клиент устанавливает соединение с сервером, внутри директории с датой создается каталог для этой сессии клиента, например 84gij60a6u3ni7docsr1di1l5b-15-06-59, где 84gij60a6u3ni7docsr1di1l5b - идентификатор сессии, 15 - час, 06 - минута, 59 - секунда. В директорию пишется flashphoner.log, который содержит только те события на сервере, которые непосредственно относятся к этой сессии клиента. Таким образом мы видим когда клиент соединился с сервером, и какие логи были записаны для сессии этого клиента.

Лог client-report

Дополнительный клиентский лог. Web-клиент имеет специальную функцию WCS JavaScript API 'pushLog'. Эта функция отправляет на WCS-сервер логи, которые ведутся на стороне браузера. Все логи, полученные от web-клиента по pushLog, будут сохраняться на сервере. Когда web-клиент завершит сессию с WCS-сервером, полученые логи будут записаны в файл client-84gij60a6u3ni7docsr1di1l5b-2018.05.16.15.07.26-1526458046646.report, где 84gij60a6u3ni7docsr1di1l5b - идентификатор сессии, 2018 - год, 05 - месяц, 26 - день, 15 - час, 07 - минута, 26 - секунда, 1526458046646 - миллисекунды.

Дампы медиатрафика

Если в файле настроек flashphoner.properties указано ненулевое значение client_dump_level, для клиента дополнительно пишется дамп сессии:

  • если client_dump_level=1. записывается только SIP трафик;
  • если client_dump_level=2, записывается весь медиатрафик.

Трафик записывается при помощи tcpdump, если данная утилита установлена в системе.

Лог flight_recorder.log

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

Серверные логи

WCS Core пишет общие логи сервера в logs/server_logs

Code Block
languagebash
themeRDark
server_logs
---- flashphoner.log
---- flashphoner.log.2018-05-17-16

В этих логах можно отследить запуск и стартовые настройки сервера:

Code Block
languagebash
themeRDark
tail -f flashphoner.log

Запуск сервера

Image Removed

...

Image Removed

...

Image Removed

Кроме того, в серверных логах отображается информация о вызовах REST-методов

Code Block
themeRDark
08:01:06,649 INFO            RestClient - API-ASYNC-pool-8-thread-2 SEND REST OBJECT ==>
URL:http://localhost:8081/EchoApp/StreamStatusEvent
OBJECT:
{
  "nodeId" : "rR3YA7yKB11iIIID4XkYveTF8ePhezMU@0.0.0.0",
  "appKey" : "defaultApp",
  "sessionId" : "/5.44.168.45:58541/95.191.131.65:8443",
  "mediaSessionId" : "58488550-99dd-11e8-bf13-9b5947c0a0f5",
  "name" : "569a",
  "published" : true,
  "hasVideo" : true,
  "hasAudio" : true,
  "status" : "PUBLISHING",
  "audioCodec" : "opus",
  "videoCodec" : "H264",
  "info" : "Unknown",
  "record" : false,
  "width" : 0,
  "height" : 0,
  "bitrate" : 0,
  "minBitrate" : 0,
  "maxBitrate" : 0,
  "quality" : 0,
  "timeShift" : -1,
  "createDate" : 1533603665644,
  "mediaProvider" : "WebRTC",
  "history" : false,
  "origin" : "https://test.flashphoner.com:8888"
}

Таким образом, серверные логи предоставляют общую информацию о работе сервера.

CDR-логи

Сall Detail Record - это журнал SIP-звонков.

CDR записи пишутся в лог файл находящийся в logs/cdr/cdr.log. Новый лог файл создается на основе суточного интервала. Записи формируются в CSV-файле, что позволяет их удобно обрабатывать.

Названия полей в файл не пишутся.

Формат записи:

Code Block
languagebash
themeRDark
src;dst,cid,start,answer,end,billsec,disposition

Пример записи :

Code Block
languagebash
themeRDark
3000;3001;f294f6116bf2cc4c725f20457ed76e5b@192.168.56.2;2014-11-21 15:01:37; 2014-11-21 15:01:41; 2014-11-21 15:02:45;64;ANSWERED

...

Поле

...

Описание

...

src

...

Инициатор звонка

...

dst

...

Принимающий звонок

...

cid

...

Идентификатор звонка

...

start

...

Начало звонка (дата и время).

...

answer

...

Дата и время ответа абонента или SIP стороны.

...

end

...

Дата и время завершения звонка

...

billsec

...

Время в секундах между 'answer' и 'end'.

...

disposition

...

Результат звонка: ANSWERED, NO_ANSWER, BUSY, FAILED.

MDR-логи

Message Detail Record - это журнал SIP-сообщений.

MDR записи пишутся в лог файл находящийся в logs/cdr/mdr.log. Новый лог файл создается на основе суточного интервала. Записи формируются в CSV-файле, что позволяет их удобно обрабатывать.

Названия полей в файл не пишутся.

Формат записи:

Code Block
languagebash
themeRDark
date,msgId,from,to,disposition

Пример записи :

Code Block
languagebash
themeRDark
Fri Dec 26 15:26:16 NOVT 2014,null,A006,A005,RECEIVED

...

Поле

...

Описание

...

date

...

Дата и время сообщения

...

msgId

...

Идентификатор сообщения. Будет представлен только в message/cpim сообщениях, при isImdnRequired=true (см. документацию Web Call Server - Call Flow, где описаны параметры передаваемых сообщений в методе sendMessage).

...

from

...

SIP from

...

to

...

SIP to

...

disposition

...

Результат сообщения: RECEIVED, SENT, FAILED.

RECEIVED - сообщение получено.

SENT - сообщение отправлено.

FAILED - во время отправки сообщения произошла ошибка.

Вы также можете собирать любую необходимую статистику по сообщениям и их статусам, используя WCS REST API. См. документацию Web Call Server - Call Flow, где перечислены все методы и наборы данных, которые WCS отправляет чрез REST при обработке сообщений.

SDR-логи

Stream Detail Record - это журнал сессий публикации и воспроизведения потоков.

SDR записи пишутся в лог-файл sdr.log, находящийся в директории logs/cdr. Новый лог-файл создается на основе часового интервала. Записи сохраняются в CSV-формате, что упрощает их обработку. Названия полей в файл не пишутся.

Формат записи:

Code Block
languagebash
themeRDark
end;mediaProvider;name;mediaSessionId;duration;disposition;info;type;subscribers;

Пример записи:

Code Block
languagebash
themeRDark
2015-11-11 08:36:13;Flash;stream-Bob;5c2d75c0-7d87-421d-aa93-2732c48d8eaa;00:00:48;UNPUBLISHED;;PUBLISH;3;

...

Поле

...

Описание

...

end

...

Дата и время завершения сессии

...

mediaProvider

...

Используемое медиа на WCS JavaScript API: WebRTC, Flash

...

name

...

Имя публикуемого / воспроизводимого потока

...

mediaSessionId

...

Идентификатор медиа-сессии

...

duration

...

Продолжительность сессии

...

disposition

...

Как сессия была завершена: UNPUBLISHED, STOPPED, FAILED

UNPUBLISHED - публикация потока была остановлена

STOPPED - воспроизведение потока было остановлено

FAILED - некорректное завершение сессии

...

info

...

Если disposition==FAILED, содержит описание причины

...

type

...

PUBLISH в случае публикации потока

SUBSCRIBE в случае воспроизведения потока

...

subscribers

...

Количество подписчиков в случае публикации потока; 0 в случае воспроизведения потока

CONNDR-логи

Connection Detail Record - это журнал WebSocket-сессий.

CONNDR записи пишутся в лог-файл sdr.log, находящийся в директории logs/cdr. Новый лог-файл создается на основе часового интервала. Записи сохраняются в CSV-формате, что упрощает их обработку. Названия полей в файл не пишутся.

Формат записи:

Code Block
languagebash
themeRDark
end;mediaSessionId;disposition;info;duration;

Пример записи:

Code Block
languagebash
themeRDark
2018-04-25 19:29:08;/5.44.168.45:52199/95.191.131.64:8443;DISCONNECTED;Normal disconnect;17;

...

Поле

...

Описание

...

end

...

Дата и время завершения сессии

...

mediaSessionId

...

Идентификатор медиа-сессии

...

disposition

...

Как сессия была завершена: DISCONNECTED, FAILED

DISCONNECTED - завершение сессии по инициативе клиента

FAILED - некорректное завершение сессии

...

info

...

Содержит описание завершения сессии

...

duration

...

Продолжительность сессии

GC-логи

По умолчанию логи сборщика мусора находятся в директории /usr/local/FlashphonerWebCallServer/logs.

Code Block
themeRDark
logs
---- gc-core-2018-12-18_20-02.log
---- gc-core-2018-12-18_19-56.log

Расположение и префикс имени лога можно изменить в файле настроек wcs-core.properties.

Для осуществления ротации логов средствами JVM в wcs-core.properties могут быть добавлены следующие настройки:

Code Block
themeRDark
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=2M

Тогда имена файлов будут такими

Code Block
themeRDark
logs
---- gc-core.log2018-12-14_18-57.log.0
---- gc-core.log2018-12-14_18-57.log.1
---- gc-core.log2018-12-14_18-57.log.2.current

Суффикс 'current' обозначает файл, в который ведется запись.

Чтобы убрать время создания из имени файла, нужно убрать проставление даты из переменной GC_SUFFIX в bin/setenv.sh:

Code Block
themeRDark
GC_SUFFIX=".log"

Тогда имена файлов будут такими

...

themeRDark

...

Include Page
WCS5RU:WCS Core
WCS5RU:WCS Core