Протоколирование работы сервера резервирования (debug)
Синтаксис
/debug[=[<уровень>][:[|<программа>] <размер>[x<количество>]]<спецификация файла>|stdout|stderr] <уровень>::=<числовое значение>|<символьное значение> <числовое значение>::=<маска уровней>|<номер уровня>[+<номер уровня>…] <номер уровня>::= 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536 <символьное значение>::=<имя уровня>[,< имя уровня >…] <имя уровня>::= "TRACE" | "ERROR"| "MSG" | "STATE" | "STPROC" | "INFO" | "INIT" | "EVENT" | "SIG" | "TIMER" | "PROC" | "REPEATE" | "USR" | "FILE" | "NET" | "NET_SEND" | "DBG" <маска уровней>::=результат сложения номеров уровней. Может быть представлена в шестнадцатеричном виде.
Описание
Задаёт параметры трассировочной информации и возможные способы её обработки.
Уровни трассировки можно задавать в числовом или символьном виде.
Доступны следующие уровни:
Имя уровня | Номер уровня (десятичное значение) | Трассировочная информация | ||
---|---|---|---|---|
TRACE | 1 | о вызываемых функциях | ||
ERROR | 2 | об ошибках | ||
MSG | 4 | о ходе выполнения | ||
STATE | 8 | о смене состояний | ||
STRPROC | 16 | о запуске программы-обработчика событий | ||
INFO | 32 | о нештатных ситуациях, которые не привели к прекращению работы системы резервирования | ||
INIT | 64 | при инициализации | ||
EVENT | 128 | о событиях | ||
SIG | 256 | о манипуляциях с сигналами | ||
TIMER | 512 | о тайм-аутах | ||
PROC | 1024 | о запуске и останове программ | ||
REPEATE | 2048 | о периодическом добавлении записи в STATE-файл | ||
USR | 4096 | о дополнительных событиях | ||
FILE | 8192 | о работе с файлами (запись, копирование, удаление и т. д.) | ||
NET | 16384 | о сетевом обмене | ||
NET_SEND | 32768 | об отсылке сообщений | ||
DBG | 65536 | отладочная трассировка |
Числовые значения можно задавать в десятичном или шестнадцатеричном виде. При указании числового значения каждый установленный бит соответствует включенному уровню трассировки. Например, чтобы задать уровни трассировки TRACE, MSG, STATE в числовом виде, надо указывать число 1+4+8 = 1310 (158, 11012), и ключ, соответственно, будет иметь вид /debug=13
. В символьном виде эти же уровни задаются ключом /debug=TRACE,MSG,STATE
.
Примеры задания уровней трассировки:
-debug=2 -debug=0xFFFFFFFF -debug=2+512+64 -debug=0x10+0x400 -debug=32+0x654 -debug=TRACE -debug=TRACE,info,dbg -debug="TRACE,NET,proc"
<Спецификация файла>
задаёт полный путь и имя файла, в который будет записываться трассировочная информация. Если спецификация файла не обозначена, то по умолчанию используется файл server.log
в каталоге, указанном переменной окружения SERVER_HOME
или в рабочем каталоге. Если указанный файл не существует, он будет создан. Запись в файл выполняется до исчерпания ресурсов файловой системы или до достижения максимально допустимого размера файла. По умолчанию размер файла равен 1048576 байт. Этот размер можно изменить с помощью аргумента <размер>
(задается в байтах).
После достижения файлом максимального размера будут создаваться новые трассировочные файлы с именами вида <исходное имя>1
, <исходное имя>2
и т.д., например: server.log
, server.log1
, server.log2
.
Необходимое количество одновременно хранящихся трассировочных файлов можно задать сразу после размера файла и символа "x" в опции <количество>
.
Если <количество>
не указано, по умолчанию кроме файла с заданным именем на файловой системе будет храниться 10 файлов с трассировочной информацией.
В случае превышения максимального количества файлов трассировки при создании нового файла последний из файлов (server.log10
) удаляется, файл server.log9
переименовывается в server.log10
и т.д. Файл server.log
переименовывается в server.log1
.
Пример.
-debug=TRACE:200/usr/linter/debug/server_db1.log -debug=:200x15/usr/linter/debug/server_db1.log
Если в качестве имени файла указать стандартные файлы вывода stdout
или stderr
без размера, то поток будет перенаправлен в стандартный поток вывода или ошибок соответственно.
Если необходимо только управление перенаправлением вывода, перечисление уровней трассировки можно опустить и значение ключа начинать сразу с символа ":". При этом уровни будут соответствовать значениям по умолчанию.
Если после символа ":" сразу следует символ "|", то следующая за ним строка будет восприниматься как пользовательская программа с аргументами, которую надо запустить при старте сервера резервирования и передать ей на вход поток трассировочной информации. Эта программа может использоваться, в частности, для разбивки потока на файлы и/или фильтрации некоторых сообщений.
Пример.
Поток трассировки передан на вход программы awk, которая обрабатывает данные в соответствии с внутренним алгоритмом и результаты обработки помещает в файл program.awk: Server -debug=":|awk -f program.awk"
Пример программы фильтрации трассировки приведен в приложении 1.
Умолчания:
-
на стандартный поток ошибок выводятся только сообщения об ошибках (если ключ не задан);
-
все уровни трассировки, осуществляющие периодическую запись, выключены, в log-файл помещается информация только о событиях системы резервирования;
-
включены уровни
MSG
,EVENT
,INIT
,ERROR
,PROC
,TIMER
,USR
,NET_SEND
,STATE
. Этой информации обычно достаточно для отслеживания поведения сервера; -
трассировочный поток сервера резервирования направляется в файл
server.log
, который ищется в каталоге, указанном в переменной окруженияSERVER_HOME
; -
количество одновременно хранящихся трассировочных файлов равно 10;
-
размер файла трассировки 1048576 байт.
Таким образом, значение ключа /debug
по умолчанию равно:
/debug=MSG,EVENT,INIT,ERROR,PROC,TIMER,USR,NET_SEND, STATE:1048576x10$SERVER_HOME/server.log.
Формат трассировочных записей
Трассировочные записи имеют следующий формат:
<источник трассировки> <детализация трассировки> <дата/время трассировки> <трассировочная информация>
где:
<источник трассировки>::=HOTRES:<уровень трассировки> <детализация трассировки>::=<имя исходного модуля>:<номер строки>. <дата/время трассировки>::=ddmm:hh:mi:ss.ff <трассировочная информация>::=символьная строка.
Примеры трассировочных записей:
HOTRES:INFO init.c:503 0306:10:10:54.945223 Can't open STATE file ./STATE, errno = 2, No such file or directory HOTRES:TRACE init.c: 504 0306:10:10:54.945223 'ReadStateFromFile' Leave fopen HOTRES: INFO init.c:1909 0306:10:10:54.945223 Error while reading STATE file of work DB. State set to UNDEFINED. HOTRES: TRACE states.c:34 0306:10:10:54.945223 'GetStateByName' Call from init.c:1913 HOTRES: DBG states.c: 36 0306:10:10:54.945223 Get state with name UNDEFINED HOTRES: TRACE states.c: 45 0306:10:10:54.945223 'GetStateByName' Leave UNDEFINED HOTRES: TRACE backup.c: 87 0306:10:10:54.945223 'DbExist' Call from init.c:1916 HOTRES: TRACE backup.c: 100 0306:10:10:54.945223 'DbExist' Leave Db not found. HOTRES: TRACE init.c: 499 0306:10:10:54.945223 'ReadStateFromFile' Call from init.c:1947 HOTRES: INFO init.c: 503 0306:10:10:54.945223 Can't open STATE file ./ARC/STATE, errno = 2, No such file or directory HOTRES: TRACE init.c: 504 0306:10:10:54.945223 'ReadStateFromFile' Leave fopen HOTRES: INFO init.c:1949 0306:10:10:54.945223 Error while reading STATE file of backup DB. State set to UNDEFINED. HOTRES: TRACE states.c:34 0306:10:10:54.945223 'GetStateByName' Call from init.c:1953 HOTRES: DBG states.c:36 0306:10:10:54.945223 Get state with name UNDEFINED HOTRES: TRACE states.c:45 0306:10:10:54.945223 'GetStateByName' Leave UNDEFINED HOTRES: DBG init.c:2011 0306:10:10:54.945223 FullPreviousState.State = UNDEFINED HOTRES: ERROR init.c:2031 0306:10:10:54.945223 nodetab file is not found. HOTRES: TRACE init.c:2032 0306:10:10:54.945223 'Init' Leave FAILED HOTRES: ERROR server.c:91 0306:10:10:54.945223 Init failed. Exit. HOTRES: TRACE server.c:93 0306:10:10:54.945223 'server' Leave FAILED