Логирование Эллес

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

Основным способом управления логированием является задание соответствующих настроек в конфигурационном файле smb.conf (полный путь к файлу — /app/inno-samba/etc/smb.conf).

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

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

Для этого служит параметр logging, который задается в разделе [global] файла smb.conf на сервере Эллес в следующем формате:

logging = backend1[:option][@loglevel] backendN[:option][@loglevel]

В приведенной строке с параметром logging:

  • backend — один из доступных способов; может быть указано несколько значений, разделенных пробелом; возможные значения:

    • syslog — запись в системный журнал;

    • file — запись в файл, указанный в параметре log file, либо в стандартные лог-файлы Эллес в каталоге /app/inno-samba/var/;

    • systemd — запись в журнал (journal) systemd;

    • lttng — трассировка с использованием инструментов фреймворка с открытым исходным кодом LTTng;

    • gpfs — аудит файлов в файловой системе GPFS;

    • ringbuf — запись в кольцевой буфер (ring buffer); для задания размера буфера (по умолчанию — 1 МБ) может использоваться опция size в формате: logging = ringbuf:size=NBYTES;

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

  • [:option] — дополнительные опции, специфичные для указанного способа;

  • [@loglevel] — уровень логирования.

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

    Уровень логирования, установленный для определенного способа логирования, переопределяет общий уровень логирования, заданный с помощью параметра log level.

Если задан параметр logging, его значение переопределяет значения параметров syslog и syslog only, которые являются устаревшими и не должны использоваться для настройки логирования.

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

logging =

Пример задания параметра:

logging = syslog@1 file

Настройка места размещения, имени и максимального размера лог-файлов

По умолчанию после установки пакета inno-samba логи сохраняются в каталог /app/inno-samba/var/. Общий лог ведется в файле /app/inno-samba/var/log.samba.

Для получения текущего пути к логам, например, используйте команду samba -b | grep LOGFILEBASE или testparm -sv | grep 'log file'.

Для изменения места размещения логов и имени файлов необходимо создать требуемый каталог и указать его в качестве значения параметра log file в разделе [global] файла smb.conf.

Например:

log file = /app/log/inno-samba/inno-samba.log

Также может быть указан отдельный лог-файл для каждого класса отладки (см. «Настройка уровня логирования»).

Для ограничения максимального размера лог-файлов Эллес может использоваться параметр max log size в разделе [global]. Значение параметра задается в килобайтах. При превышении заданного лимита к имени текущего лог-файла добавляется постфикс .old и создается новый файл.

В процессе ротации Samba перезаписывает архивированный ранее лог-файл. Рекомендуется настроить ротацию лог-файлов с помощью доступных в системе инструментов (см. «Пример настройки ротации лог-файлов»).

Например, чтобы ограничить максимальный размер лог-файла значением 10 МБ, необходимо задать параметр следующим образом:

max log size = 10000

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

Для задания уровня логирования (уровня отладки) служит параметр log level в разделе [global] файла smb.conf.

Уровень задается в виде целого числа в диапазоне от 0 до 10, где 0 соответствует отключению вывода отладочной информации, а 10 — обеспечивает вывод максимального объема информации об ошибках и проблемах, которые могут возникать в процессе работы Эллес. Оптимальным для получения отладочной информации является уровень 3. Уровни выше 3 предназначены преимущественно для выявления внутренних ошибок Эллес. Их использование может привести к существенному снижению производительности сервера.

Также параметр log level позволяет задавать различные уровни логирования для отдельных классов отладки. При необходимости наряду с уровнем логирования может быть указан файла, в который должна вести запись отладочной информации. Для этого к имени класса отладки добавляется часть @PATH.

В текущей реализации доступны следующие классы отладки: all, tdb, printdrivers, lanman, smb, rpc_parse, rpc_srv, rpc_cli, passdb, sam, auth, winbind, vfs, idmap, quota, acls, locking, msdfs, dmapi, registry, scavenger, dns, ldb, tevent, auth_audit, auth_json_audit, kerberos, drs_repl, smb2, smb2_credits, dsdb_audit, dsdb_json_audit, dsdb_password_audit, dsdb_password_json_audit, dsdb_transaction_audit, dsdb_transaction_json_audit, dsdb_group_audit, dsdb_group_json_audit.

Некоторые модули при первом использовании регистрируют динамические классы отладки. Например: catia, dfs_samba4, extd_audit, fileid, fruit, full_audit, media_harmony, preopen, recycle, shadow_copy, unityed_media, virusfilter.

Примеры использования параметра для настройки уровня логирования:

  • установка единого уровня логирования 3 для всех классов отладки:

    log level = 3
  • установка общего уровня логирования 1, а для классов auth и winbind — 5:

    log level = 1 auth:5 winbind:5
  • установка общего уровня логирования 1 и различных уровней логирования для классов отладки с указанием отдельных файлов для ведения записи:

    log level = 1 \
            kerberos:3@/app/log/inno-samba/kerberos.log \
            drs_repl:3@/app/log/inno-samba/drs_repl.log \
            rpc_srv:3@/app/log/inno-samba/rpc_srv.log \
            dns:0

При выполнении команд с помощью утилит, поставляемых с Эллес, используется уровень логирования, установленный параметром log level в smb.conf. Он может быть переопределен с помощью опции -d. Например:

samba-tool drs showrepl -d 3

Пример настройки ротации лог-файлов

Для ротации лог-файлов, формируемых сервисами Эллес, может использоваться системная утилита logrotate.

Пример файла /etc/logrotate.d/inno-samba с конфигурацией ротации:

/app/log/inno-samba/*log {
    weekly
    compress
    dateext
    rotate 10
    notifempty
    olddir /app/log/inno-samba/old
    missingok
    copytruncate
    postrotate
              systemctl reload inno-samba.service || true
    endscript
}

Описание директив в примере:

  • /app/log/inno-samba/*log — путь к каталогу с лог-файлами (если отличается от пути по умолчанию, задается в параметре log file в файле smb.conf);

  • weekly — еженедельная ротация лог-файлов;

    Возможные значения:

    • hourly — каждый час;

    • daily — каждый день;

    • weekly (по умолчанию) — каждую неделю;

    • monthly — каждый месяц;

    • yearly `— каждый год.

    Также с помощью параметра size может быть настроена ротация файла по достижении им определенного размера.

  • compress — сжатие лог-файлов;

  • dateext — добавление к расширению файла даты ротации;

    Для задания формата могут использоваться параметры dateformat и dateyesterday.

  • rotate — количество ротацией до удаления или отправки на адрес, указанный в директиве mail; если 0, прежние версии удаляются без ротации;

  • notifempty — отключение ротации пустых файлов;

  • olddir — каталог для перемещения файлов при ротации; если не указан абсолютный путь, значение интерпретируется относительно каталога с лог-файлами;

  • missingok — если файл отсутствует, перейти к следующему без сообщения об ошибке;

  • copytruncate — обрезать исходный файл до нулевого размера после создания копии вместо переименования и создания нового;

  • блок между postrotate и endscript — команды, которые необходимо выполнить после ротации.

Для принудительного запуска ротации используйте стандартную команду:

sudo -E logrotate -vf /etc/logrotate.d/inno-samba

Примеры настройки обработки лог-файлов с использованием rsyslog и syslog-ng

Для дополнительной обработки лог-файлов с целью отбора информации по определенным правилам или с применением определенных фильтров могут использоваться утилиты rsyslog и syslog-ng.

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

Для настройки формирования отдельного лога для мониторинга статусов репликации:

  1. Создайте каталог для размещения файлов.

    Например:

    mdkir -pv /app/log/inno-samba
  2. Добавьте класс отладки для процесса репликации с указанием пути в значение параметра log level в файле /app/inno-samba/etc/smb.conf.

    Например:

    log level = 1 \
            drs_repl:4@/app/log/inno-samba/drs_repl.log
            [...]
  3. При использовании rsyslog:

    • убедитесь, что соответствующий сервис активен и работает в системе:

      sudo systemctl status rsyslog.service
    • создайте файл с конфигурацией для rsyslog, например — /etc/rsyslog.d/repl_events.conf;

    • добавьте в файл параметры обработки логов репликации; в данном примере с интервалом в 10 секунд из исходного лога репликации будут помещаться в отдельный файл сообщения, содержащие события WERR_:

      module(load="imfile" PollingInterval="10")
      
      input(type="imfile"
            File="/app/log/inno-samba/drs_repl.log"
            Tag="samba_auth"
            Severity="info"
            Facility="auth")
      
      if ($syslogtag == "samba_auth" and ($msg contains 'WERR_')) then {
          action(type="omfile" dirCreateMode="0700" FileCreateMode="0644"
                 File="/app/log/inno-samba/repl_events.log")
      }
    • если требуется отправлять события на другой сервер:

      • на контроллере домена создайте файл с конфигурацией для rsyslog, например — /etc/rsyslog.d/send_repl_events.conf:

        module(load="imfile" PollingInterval="10")
        
        input(type="imfile"
              File="/app/log/inno-samba/drs_repl.log"
              Tag="samba_auth"
              Severity="info"
              Facility="auth")
        
        if ($syslogtag == "samba_auth" and ($msg contains 'WERR_')) then {
            action(type="omfwd" target="10.0.18.132" port="514" protocol="tcp"
                   action.resumeRetryCount="100"
                   queue.type="linkedList"
                   queue.size="10000")
        }
      • на принимающем сервере создайте файл с конфигурацией для rsyslog, например — /etc/rsyslog.d/receive_repl_events.conf:

        $ModLoad imptcp
        $InputTCPServerRun 514
        
        if ($syslogtag == "samba_auth") then /logs/inno-samba/repl_events.log
    • перезапустите сервис rsyslog:

      sudo systemctl restart rsyslog.service
  4. При использовании syslog-ng:

    • убедитесь, что соответствующий сервис активен и работает в системе:

      sudo systemctl status syslog-ng.service
    • создайте файл с конфигурацией для syslog-ng, например — /etc/syslog-ng/conf.d/repl_events.conf;

    • добавьте в созданный файл информацию об исходном и целевых лог-файлах, а также задайте фильтр для отбора сообщений по наличию подстроки "WERR_*":

      source s_file {
          file("/app/log/inno-samba/drs_repl.log");
      };
      destination d_s_repl {
          file("/app/inno-samba/repl_events.log");
      };
      filter f_s_repl {
          match("WERR_*");
      };
      log {
          source(s_file);
          filter(f_s_repl);
          destination(d_s_repl);
      };
    • перезапустите сервис syslog-ng:

      sudo systemctl restart syslog-ng

При анализе сформированного лог-файла с событиями процесса репликации могут формирования оповещения, например, при появлении в нем событий, отличных от "WERR_OK". Один из возможных вариантов поиска таких событий:

sudo tail /app/log/inno-samba/repl_events.log -n -5 | grep -v 'WERR_OK'