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

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

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

Для применения изменений в значениях конфигурационных параметров, задающих общие настройки логирования, выполните на контроллере домена:

sudo smbcontrol all reload-config

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

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

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

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

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

  • backend — один из доступных способов;

    Может быть указано несколько значений, разделенных пробелом. Возможные значения:

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

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

    • 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 (размер файла по умолчанию — 5 МБ).

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

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

Например:

log file = /var/log/elles/common.log

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

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

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

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

max log size = 10000

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

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

Уровень задается в виде целого числа в диапазоне от 0 до 10.

В общем случае уровни логирования соответствуют следующим типам сообщений:

  • 0 — только критические ошибки (установлен по умолчанию);

  • 1 — менее критические ошибки;

  • 2 — предупреждения;

  • 3 — информационные сообщения;

  • 4 и выше — различные уровни трассировки.

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

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

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

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

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

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

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

    log level = 3 \
            kerberos:5@/var/log/elles/kerberos.log \
            drs_repl:4@/var/log/elles/drs_repl.log \
            rpc_srv:4@/var/log/elles/rpc_srv.log \
            dns:0

Для применения изменений в уровнях логирования, вносимых с помощью параметра log level для отдельных классов, необходимо перезапустить на контроллере домена службу inno-samba.

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

samba-tool drs showrepl -d 3

Классы логирования

В Эллес доступны следующие статические классы логирования: 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, ldapsrv, metrics.

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

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

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

  2. Если логирование осуществляется в общий файл, принадлежность сообщения к классу логирования определяется по значению поля class=<class_name>.

Примеры сообщений при сохранении в общий лог-файл:

[2025/03/24 00:00:55.640518,  5, pid=380, effective(0, 0), real(0, 0)] ../../source4/dsdb/kcc/garbage_collect_tombstones.c:109(garbage_collect_tombstones_part) (1)
  garbage_collect_tombstones_part: Removed deleted object DC=_kerberos._tcp\0ADEL:d0f33fb6-9cec-4ef8-ac82-3152b0f9bdaa,CN=Deleted Objects,DC=bnk,DC=ru
[2025/03/24 00:00:55.642378,  5, pid=380, effective(0, 0), real(0, 0), class=dsdb_audit] ../../lib/audit_logging/audit_logging.c:97(audit_log_human_text) (2)
  DSDB Change [Delete] at [Mon, 24 Mar 2025 00:00:55.642355 +10] status [Success] remote host [Unknown] SID [S-1-5-18] DN [CN=Group_002\0ADEL:9d6da6b7-68c8-4da1-a4a1-028ed3f5835a,CN=Deleted Objects,DC=bnk,DC=ru]
  {"timestamp": "2025-03-24T00:00:55.642419+1000", "type": "dsdbChange", "dsdbChange": {"version": {"major": 1, "minor": 0}, "statusCode": 0, "status": "Success", "operation": "Delete", "remoteAddress": null, "performedAsSystem": false, "userSid": "S-1-5-18", "dn": "CN=Group_002\\0ADEL:9d6da6b7-68c8-4da1-a4a1-028ed3f5835a,CN=Deleted Objects,DC=bnk,DC=ru", "transactionId": "2034abd3-1d6d-4d85-8853-8be2c79766eb", "sessionId": "5d62ae09-25ad-4766-8c21-232e1220d234"}}
[2025/03/24 00:00:55.642472,  3, pid=380, effective(0, 0), real(0, 0), class=acls] ../../source4/dsdb/samdb/ldb_modules/descriptor.c:2020(descriptor_prepare_commit) (3)
  descriptor_prepare_commit: changes: num_registrations=0
1 Сообщение не относится к какому-либо классу логирования и представляет собой пример вывода в общий лог. В конфигурации установлен общий уровень логирования 5 (значение второго поля в заголовке сообщения).
2 Сообщение относится к классу логирования dsdb_audit (class=dsdb_audit). В конфигурации для класса установлен уровень логирования 5 (значение второго поля в заголовке сообщения).
3 Сообщение относится к классу логирования acls (class=acls). В конфигурации для класса установлен уровень логирования 3 (значение второго поля в заголовке сообщения).

Далее приводятся описания некоторых классов логирования с примерами сообщений.

acls

Класс acls предназначен для логирования проверки и изменения прав доступа на основе списков управления доступом (Access Control Lists).

Пример записи
[2024/08/23 12:09:31.456167,  3, pid=990, effective(0, 0), real(0, 0), class=acls] ../../source4/dsdb/samdb/ldb_modules/descriptor.c:2153

auth_audit, auth_json_audit

Классы auth_audit и auth_json_audit предназначены для логирования информации об аутентификации и авторизации учетных записей, успешных и неуспешных попытках входа в систему, изменениях паролей и изменениях статусов учетных записей.

Записи содержат имя пользователя, IP-адрес клиента, время и результат попытки входа.

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

Пример записи в текстовом формате
[2024/08/23 12:33:52.304398,  3, pid=992, effective(0, 0), real(0, 0), class=auth_audit] ../../auth/auth_log.c:876(log_authentication_event_human_readable)
  Auth: [Kerberos KDC,ENC-TS Pre-authentication] user [(null)]\[elles-dc$@DOMAIN.NAME] at [Fri, 23 Aug 2024 12:33:52.304383 MSK] with [aes256-cts-hmac-sha1-96] status [NT_STATUS_OK] workstation [(null)] remote host [ipv4:10.29.1.25:53774] became [DOMAIN]\[elles-dc$] [S-1-5-21-3831146672-3998268472-1207887917-1600]. local host [NULL]
Пример записи в JSON
{
  "timestamp": "2024-08-22T19:18:55.053337+0300", "type": "Authentication", "Authentication": {
    "version": {
      "major": 1, "minor": 3
    }

    , "eventId": 4625, "logonId": "924c0b0e405b8a28", "logonType": 3, "status": "NT_STATUS_PROTOCOL_UNREACHABLE", "localAddress": null, "remoteAddress": "ipv4:10.29.0.124:54145", "serviceDescription": "Kerberos KDC", "authDescription": "ENC-TS Pre-authentication", "clientDomain": null, "clientAccount": "ELLES-SMB$@DOMAIN.NAME", "workstation": null, "becameAccount": "ELLES-SMB$", "becameDomain": "DOMAIN", "becameSid": "S-1-5-21-3831146672-3998268472-1207887917-1000", "mappedAccount": "ELLES-SMB$", "mappedDomain": "DOMAIN", "netlogonComputer": null, "netlogonTrustAccount": null, "netlogonNegotiateFlags": "0x00000000", "netlogonSecureChannelType": 0, "netlogonTrustAccountSid": null, "passwordType": "aes256-cts-hmac-sha1-96", "clientPolicyAccessCheck": null, "serverPolicyAccessCheck": null, "duration": 16954
  }
}

dns

Класс dns предназначен для логирования запросов на поиск и изменение записей DNS.

Пример записи
[2024/08/23 12:24:28.373948, 10, pid=1009, effective(0, 0), real(0, 0), class=dns] ../../source4/dns_server/dns_server.c:566(dns_udp_call_loop)
  Received DNS UDP packet of length 75 from ipv4:10.29.0.124:32912
[2024/08/23 12:24:28.373975,  8, pid=1009, effective(0, 0), real(0, 0), class=dns] ../../lib/util/util.c:596(dump_data_dbgc)
  [0000] 26 1F 01 00 00 01 00 00   00 00 00 00 24 34 63 30   &....... ....$4c0
  [0010] 36 38 64 64 33 2D 39 63   61 38 2D 34 64 65 33 2D   68dd3-9c a8-4de3-
  [0020] 38 37 64 63 2D 31 30 37   36 32 32 38 38 66 63 31   87dc-107 62288fc1
  [0030] 30 06 5F 6D 73 64 63 73   07 61 64 6F 6D 61 69 6E   0._msdcs .domain
  [0040] 05 6C 6F 63 61 6C 00 00   1C 00 01                  .local.. ...
[2024/08/23 12:24:28.374046, 10, pid=1009, effective(0, 0), real(0, 0), class=dns] ../../librpc/ndr/ndr.c:414(ndr_print_debugc)
       &state->in_packet: struct dns_name_packet
          id                       : 0x261f (9759)
          operation                : 0x0100 (256)
              0x00: DNS_RCODE                 (0)
                 0: DNS_FLAG_RECURSION_AVAIL
                 1: DNS_FLAG_RECURSION_DESIRED
                 0: DNS_FLAG_TRUNCATION
                 0: DNS_FLAG_AUTHORITATIVE
              0x00: DNS_OPCODE                (0)
                 0: DNS_FLAG_REPLY
          qdcount                  : 0x0001 (1)
          ancount                  : 0x0000 (0)
          nscount                  : 0x0000 (0)
          arcount                  : 0x0000 (0)
          questions: ARRAY(1)
              questions: struct dns_name_question
                  name                     : '4c078dd3-9ca8-4de3-98dc-10762288fc10._msdcs.domain.name'
                  question_type            : DNS_QTYPE_AAAA (0x1C)
                  question_class           : DNS_QCLASS_IN (0x1)
          answers: ARRAY(0)
          nsrecs: ARRAY(0)
          additional: ARRAY(0)

drs_repl

Класс логирования drs_repl предназначен для логирования событий входящей и исходящей репликации на контроллере домена.

Пример записи
[2024/08/22 19:19:05.149640,  4, pid=3690, effective(0, 0), real(0, 0), class=drs_repl] ../../source4/dsdb/samdb/ldb_modules/repl_meta_data.c:7453(replmd_replicated_uptodate_modify)
  DRS replication up-to-date modify message:
  dn: CN=Schema,CN=Configuration,DC=domain,DC=name
  changetype: modify
  replace: replUpToDateVector
  replUpToDateVector:: AgAAAAAAAAABAAAAAAAAACBzNQfwqUtOto8mhP3tviqMGgAAAAAAAACAP
   tXesZ0B
  -
  replace: repsFrom
  repsFrom:: AQAAAAAAAAAOAQAAAAAAAPn11xwDAAAA+fXXHAMAAAAAAAAA0AAAAD4AAABkAAAAERE
   RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER
   ERERERERERERERERERERERERERERERERAAAAAH0aAAAAAAAAAAAAAAAAAAB9GgAAAAAAANONBkyon
   ONNh9wQdiKI/BAgczUH8KlLTraPJoT97b4qAAAAAAAAAAAAAAAAAAAAADoAAAA0YzA2OGRkMy05Y2
   E4LTRkZTMtODdkYy0xMDc2MjI4OGZjMTAuX21zZGNzLmFkb21haW4ubG9jYWwA
  -


[2024/08/22 19:19:05.153636,  2, pid=3690, effective(0, 0), real(0, 0), class=drs_repl] ../../source4/dsdb/repl/replicated_objects.c:1092(dsdb_replicated_objects_commit)
  Replicated 0 objects (0 added, 0 merged) (0 linked attributes) for CN=Schema,CN=Configuration,DC=domain,DC=name

dsdb_audit, dsdb_json_audit

Классы dsdb_audit и dsdb_json_audit предназначены для логирования изменений в базе данных sam.ldb (изменения пользователей, групп, разрешений, структуры каталога и т. д.).

Пример записи в текстовом формате
[2024/08/22 19:18:55.184718,  5, pid=3690, effective(0, 0), real(0, 0), class=dsdb_audit] ../../lib/audit_logging/audit_logging.c:97(audit_log_human_text)
  DSDB Change [Modify] at [Thu, 22 Aug 2024 19:18:55.184685 MSK] status [Success] remote host [Unknown] SID [S-1-5-18] DN [CN=Schema,CN=Configuration,DC=domain,DC=name] attributes [replace: repsTo {AQAAAAAAAAAOAQAAAAAAAO/11xwDAAAA7/XXHAMAAAAAAAAA0AAAAD4AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANONBkyonONNh9wQdiKI/BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAA0YzA2OGRkMy05Y2E4LTRkZTMtODdkYy0xMDc2MjI4OGZjMTAuX21zZGNzLmFkb21haW4ubG9jYWwA}]
Пример записи в JSON
{
  "timestamp": "2024-08-22T19:18:55.045255+0300",
  "type": "dsdbChange",
  "dsdbChange": {
    "version": {
      "major": 1,
      "minor": 0
    },
    "statusCode": 0,
    "status": "Success",
    "operation": "Modify",
    "remoteAddress": null,
    "performedAsSystem": false,
    "userSid": "S-1-5-18",
    "dn": "CN=ELLES-SMB,OU=Domain Controllers,DC=domain,DC=name",
    "transactionId": "b93bfe29-1b68-4729-b876-282631cb8076",
    "sessionId": "870df198-9ccc-4e53-9a15-44f74265238a",
    "attributes": {
      "lastLogon": {
        "actions": [{
          "action": "replace",
          "values": [{
            "value": "133688171350437640"
          }]
        }]
      },
      "logonCount": {
        "actions": [{
          "action": "replace",
          "values": [{
            "value": "51"
          }]
        }]
      }
    }
  }
}

dsdb_transaction_audit, dsdb_transaction_json_audit

Классы dsdb_transaction_audit и dsdb_transaction_json_audit предназначены для логирования транзакций (фиксация, откат) в базе данных каталога.

Могут использоваться для контроля целостности данных.

Пример записи в текстовом формате
[2024/08/23 12:08:21.419767, 10, pid=990, effective(0, 0), real(0, 0), class=dsdb_transaction_audit] ../../lib/audit_logging/audit_logging.c:97(audit_log_human_text)
Пример записи в JSON
{
  "timestamp": "2024-08-22T19:18:55.181492+0300",
  "type": "dsdbTransaction",
  "dsdbTransaction": {
    "version": { "major": 1, "minor": 0 },
    "action": "commit",
    "transactionId": "4d892f2b-9845-4baa-81a7-d8fccab5ae79",
    "duration": 3977
  }
}

idmap

Класс idmap предназначен для логирования событий установки соответствия между SID и группами в Linux (Identity Mapping).

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

Пример записи
[2024/08/23 12:07:01.284284, 10, pid=1007, effective(0, 0), real(0, 0), class=idmap, traceid=1] ../../source3/winbindd/idmap.c:124(lp_scan_idmap_found_domain)
  lp_scan_idmap_found_domain: Found idmap domain "*"

kerberos

Класс Kerberos предназначен для логирования событий взаимодействия по протоколу Kerberos.

Пример записи
[2024/08/22 19:18:55.075855,  3, pid=3705, effective(0, 0), real(0, 0), class=kerberos] ../../source4/auth/kerberos/krb5_init_context.c:90(smb_krb5_debug_wrapper)
  Kerberos: AS-REQ SUCCESS ipv4:10.29.0.124:38618 ELLES-SMB$@DOMAIN.NAME krbtgt/DOMAIN.NAME@DOMAIN.NAME pa=ENC-TS etype=18/18 canon_client_name=ELLES-SMB$@DOMAIN.NAME pac_attributes=2 pa-etype=18 client-pa=ENC-TS,REQ-ENC-PA-REP end=1724379535 auth=1724343535 etypes=18,17,20,19,16,23 pa-succeeded-kvno=1 elapsed=0.018523 flags=canonicalize,forwardable
[2024/08/22 19:18:55.092705, 10, pid=3705, effective(0, 0), real(0, 0), class=kerberos] ../../source4/kdc/kdc-server.c:288(kdc_tcp_call_loop)
  kdc_tcp_call_loop: Received krb5 TCP packet of length 1995 from ipv4:10.29.0.124:38622

ldb

Класс ldb предназначен для логирования подключений к базе данных LDAP.

Пример записи
[2024/08/23 15:18:52.017469,  3, pid=3687, effective(0, 0), real(0, 0), class=ldb] ../../lib/ldb-samba/ldb_wrap.c:348(ldb_wrap_connect)
  ldb_wrap open of privilege.ldb
[2024/08/23 16:03:51.934150,  3, pid=3689, effective(0, 0), real(0, 0), class=ldb] ../../lib/ldb-samba/ldb_wrap.c:348(ldb_wrap_connect)
  ldb_wrap open of secrets.ldb

locking

Класс locking предназначен для логирования блокировок файлов базы данных каталога и конкретных записей при одновременном доступе к ним разных клиентов.

Пример записи
[2024/08/23 12:43:37.099163,  3, pid=3285, effective(0, 0), real(0, 0), class=locking] ../../source3/smbd/smb2_oplock.c:1350(init_oplocks)
  init_oplocks: initializing messages.

passdb

Класс passdb предназначен для логирования доступа к хранилищу данных паролей.

Пример записи
[2024/08/23 14:53:32.070728,  5, pid=3660, effective(0, 0), real(0, 0), class=passdb, traceid=1] ../../source3/passdb/pdb_interface.c:190(make_pdb_method_name)
  pdb backend samba_dsdb has a valid init
[2024/08/23 14:53:32.083756,  5, pid=3681, effective(0, 0), real(0, 0), class=passdb, traceid=1] ../../source3/passdb/pdb_interface.c:157(make_pdb_method_name)
  Attempting to find a passdb backend to match samba_dsdb (samba_dsdb)
[2024/08/23 14:53:32.083786,  5, pid=3681, effective(0, 0), real(0, 0), class=passdb, traceid=1] ../../source3/passdb/pdb_interface.c:178(make_pdb_method_name)
  Found pdb backend samba_dsdb

registry

Класс registry предназначен для логирования взаимодействия с данными реестра Windows, которые используются в службе каталогов.

Пример записи
[2024/08/22 19:18:50.624677, 10, pid=3673, effective(0, 0), real(0, 0), class=registry] ../../source3/registry/reg_backend_db.c:1953(regdb_fetch_values_internal)
  regdb_fetch_values: Looking for values of key [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports]

rpc_parse

Класс rpc_parse предназначен для логирования информации об обработке RPC-сообщений.

Может использоваться при анализе репликации.

Пример записи
[2024/08/22 19:18:55.199865, 10, pid=3690, effective(0, 0), real(0, 0), class=rpc_parse] ../..
/librpc/rpc/dcerpc_util.c:404(dcerpc_pull_auth_trailer)
  dcerpc_pull_auth_trailer: auth_pad_length 12
[2024/08/22 19:18:55.205454, 10, pid=3690, effective(0, 0), real(0, 0), class=rpc_parse] ../..
/librpc/ndr/ndr.c:501(ndr_print_function_debug)
       drsuapi_DsReplicaSync: struct drsuapi_DsReplicaSync
          in: struct drsuapi_DsReplicaSync
              bind_handle              : *
                  bind_handle: struct policy_handle
                      handle_type              : 0x00000000 (0)
                      uuid                     : fd05a97f-56d3-4fcc-ac6a-2ae05b513887
              level                    : 0x00000001 (1)
              req                      : *
                  req                      : union drsuapi_DsReplicaSyncRequest(case 1)
                  req1: struct drsuapi_DsReplicaSyncRequest1
                      naming_context           : *
                          naming_context: struct drsuapi_DsReplicaObjectIdentifier
                              __ndr_size               : 0x00000060 (96)
                              __ndr_size_sid           : 0x00000018 (24)
                              guid                     : 6960ab23-b51a-430c-8d35-367b885d9292
                              sid                      : S-1-5-21-3831146672-3998268472-120788
7917
                              __ndr_size_dn            : 0x00000013 (19)
                              dn                       : 'DC=domain,DC=name'
                      source_dsa_guid          : f0f28bc3-a711-47f7-a62c-d1f8117ba912
                      source_dsa_dns           : NULL
                      options                  : 0x00080013 (524307)

rpc_srv

Класс rpc_srv предназначен для логирования информации о регистрации конечных точек RPC.

Пример записи
[2024/08/23 14:53:31.289223,  5, pid=3630, effective(0, 0), real(0, 0), class=rpc_srv] ../../librpc/rpc/dcesrv_core.c:555(dcesrv_interface_register_b)
  dcesrv_interface_register_b: Interface 'dnsserver' registered on endpoint 'ncacn_ip_tcp:' (single process required)
[2024/08/23 14:53:31.289259,  5, pid=3630, effective(0, 0), real(0, 0), class=rpc_srv] ../../librpc/rpc/dcesrv_core.c:555(dcesrv_interface_register_b)
  dcesrv_interface_register_b: Interface 'dnsserver' registered on endpoint 'ncacn_np:[\pipe\dnsserver]' (single process required)
[2024/08/23 14:53:32.080222,  3, pid=3660, effective(0, 0), real(0, 0), class=rpc_srv, traceid=1, depth=1] ../../librpc/rpc/dcesrv_core.c:2827(dcerpc_register_ep_server)
  DCERPC endpoint server 'winbind' registered

smb2

Класс smb2 предназначен для логирования вызовов по протоколу SMB.

Пример записи
[2024/08/23 17:10:08.709336, 10, pid=4168, effective(0, 100), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:5086(smbd_smb2_advance_incoming)
  smbd_smb2_request idx[1] of 5 vectors
[2024/08/23 17:10:08.709386, 10, pid=4168, effective(0, 100), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:3067(smbd_smb2_request_dispatch)
  smbd_smb2_request_dispatch: opcode[SMB2_OP_TDIS] mid = 7
[2024/08/23 17:10:08.710092, 10, pid=4168, effective(0, 0), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:3931(smbd_smb2_request_done_ex)
  smbd_smb2_request_done_ex: mid [7] idx[1] status[NT_STATUS_OK] body[4] dyn[no:0] at ../../source3/smbd/smb2_tcon.c:650
[2024/08/23 17:10:08.710392, 10, pid=4168, effective(0, 0), real(0, 0), class=smb2] ../../source3/smbd/smb2_server.c:1770(smbd_server_connection_terminate_ex)
  smbd_server_connection_terminate_ex: conn[PID=4168,CLIENT=4513816e-4afb-4e5f-97f4-b55674371649,channel=1,remote=ipv4:10.29.1.25:36806,local=ipv4:10.29.0.124:445] num_ok[0] reason[NT_STATUS_CONNECTION_RESET] at ../../source3/smbd/smb2_server.c:5245

smb2_credits

Класс smb2_credits предназначен для логирования передачи данных по протоколу SMB. Записи содержат информацию о количестве переданных запросов и количестве запросов, которые осталось выполнить для завершения передачи файлов.

Пример записи
[2024/08/23 17:08:28.521906, 10, pid=4069, effective(0, 100), real(0, 0), class=smb2_credits] ../../source3/smbd/smb2_server.c:803(smb2_validate_sequence_number)
  smb2_validate_sequence_number: smb2_validate_sequence_number: clearing id 5 (position 5) from bitmap
[2024/08/23 17:08:28.521995, 10, pid=4069, effective(0, 100), real(0, 0), class=smb2_credits] ../../source3/smbd/smb2_server.c:2735(smbd_smb2_request_verify_creditcharge)
  smbd_smb2_request_verify_creditcharge: mid 5, CreditCharge: 1, NeededCharge: 1
[2024/08/23 17:08:28.523147, 10, pid=4069, effective(0, 100), real(0, 0), class=smb2_credits] ../../source3/smbd/smb2_server.c:1068(smb2_set_operation_credit)

vfs

Виртуальная файловая система (Virtual File System, VFS) представляет собой абстракцию над различными источниками данных (файловая система, сетевые и облачные хранилища).

Класс vfs предназначен для логирования проблем с правами доступа и некорректным поведением бэкенда, абстрагируемого VFS.

Пример записи
[2024/08/23 17:10:07.604357,  2, pid=4168, effective(0, 0), real(0, 0), class=vfs] ../../source3/modules/vfs_acl_xattr.c:209(connect_acl_xattr)
  connect_acl_xattr: setting 'inherit acls = true' 'dos filemode = true' and 'force unknown acl user = true' for service IPC$
[2024/08/23 17:10:07.609500,  4, pid=4168, effective(0, 100), real(0, 0), class=vfs] ../../source3/smbd/vfs.c:938(vfs_ChDir)
  vfs_ChDir to /tmp
[2024/08/23 17:10:07.609530,  5, pid=4168, effective(0, 100), real(0, 0), class=vfs] ../../source3/smbd/vfs.c:1000(vfs_ChDir)
  vfs_ChDir: vfs_ChDir got /tmp
[2024/08/23 17:10:08.160221,  4, pid=4168, effective(0, 100), real(0, 0), class=vfs] ../../source3/smbd/vfs.c:938(vfs_ChDir)
  vfs_ChDir to /tmp

winbind

Класс winbind предназначен для логирования сообщений при присоединении клиентов к Эллес для проведения различных операций.

Позволяет анализировать работу сервиса Winbind, отвечающего за взаимодействие между Unix-системами и службой каталогов, в том числе Эллес и Active Directory.

Пример записи
[2024/08/23 17:09:58.123278, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_cache.c:3639(get_global_winbindd_state_offline)
  get_global_winbindd_state_offline: Offline state not set.
[2024/08/23 17:09:58.123593, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_cache.c:1802(wcache_name_to_sid)
  wcache_name_to_sid: cache entry not found
[2024/08/23 17:09:58.123618, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_cache.c:1833(wb_cache_name_to_sid)
  wb_cache_name_to_sid: name_to_sid: [Cached] - doing backend query for name for domain DOMAIN
[2024/08/23 17:09:58.123646,  3, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_samr.c:680(sam_name_to_sid)
  sam_name_to_sid: DOMAIN\
[2024/08/23 17:09:58.123867,  4, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_dual.c:1660(child_handler)
  Finished processing child request 55
[2024/08/23 17:09:58.123889, 10, pid=4157, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/winbindd_dual.c:160(child_write_response)
  Writing 4040 bytes to parent
[2024/08/23 17:09:58.124030,  5, pid=4141, effective(0, 0), real(0, 0), class=winbind, traceid=1] ../../source3/winbindd/wb_lookupname.c:121(wb_lookupname_recv)
  WB command lookupname end.
  Found SID S-1-5-21-3821346672-3998268472-1207887917 with SID type 3.

ldapsrv

Класс ldapsrv предназначен для логирования запросов к серверу LDAP.

Пример записи
[2024/08/23 17:48:51.946711,  5, pid=4161, effective(0, 0), real(0, 0), class=ldapsrv] ../../source4/ldap_server/ldap_backend.c:1080(ldapsrv_SearchRequest)
  ldapsrv_SearchRequest: LDAP Query: Duration was 0.00s, SearchRequest by S-1-5-21-3831146672-3998268472-1207887917-1600 from ipv4:10.29.1.25:57252 filter: [(&(&(objectCategory=sudoRole)(uSNChanged>=7232))(|(&(!(sudoHost=*))(cn=defaults))(sudoHost=ALL)(sudoHost=elles-dc)(sudoHost=elles-dc)(sudoHost=10.29.1.25)(sudoHost=10.29.0.0/16)(sudoHost=fe80::d20d:1aff:fe5a:654c)(sudoHost=fe80::/64)(sudoHost=+*)))] basedn: [DC=domain,DC=name] scope: [SUB] result: Success

metrics

Класс metrics предназначен для логирования сообщений, формируемых сервисом metrics_manager в составе Эллес. В том числе он используется для периодической фиксации значений метрик (интервал опроса по умолчанию — 60 секунд).

Пример записи
[2024/10/10 15:18:01.079930,  3] ../../source4/metrics_manager/metrics_manager_service.c:1201(metrics_manager_periodic_run)
  metrics_manager_periodic_run: Metrics dump:
  Section SAMDOM:
  	TreeDepth: 3
  	BranchPages: 7
  	LeafPages: 245
  	OverflowPages: 652
  	DataEntries: 3437
  	PageSize: 4096
  	UsedPages: 906
  	MaxPages: 2097152
  	LastTransactionID: 196224
  	MaxReaders: 100000
  	UsedReaders: 6
  	MaxDbSize: 8589934592
  	UsedDbSize: 3710976
  Section DOMAINDNSZONES:
  	TreeDepth: 2
  	BranchPages: 1
  	LeafPages: 23
  	OverflowPages: 64
  	DataEntries: 310
  	PageSize: 4096
  	UsedPages: 90
  	MaxPages: 2097152
  	LastTransactionID: 135802
  	MaxReaders: 100000
  	UsedReaders: 6
  	MaxDbSize: 8589934592
  	UsedDbSize: 368640
  Section CONFIGURATION:
  	TreeDepth: 3
  	BranchPages: 26
  	LeafPages: 1264
  	OverflowPages: 643
  	DataEntries: 8120
  	PageSize: 4096
  	UsedPages: 1935
  	MaxPages: 2097152
  	LastTransactionID: 166479
  	MaxReaders: 100000
  	UsedReaders: 5
  	MaxDbSize: 8589934592
  	UsedDbSize: 7925760
  Section samba_dnsupdate:
  	RunCount: 14
  	RunCountDuration: 276664
  	LastRunDuration: 9.458168
  	LastRunExitCode: 0
  Section FORESTDNSZONES:
  	TreeDepth: 2
  	BranchPages: 1
  	LeafPages: 11
  	OverflowPages: 31
  	DataEntries: 145
  	PageSize: 4096
  	UsedPages: 45
  	MaxPages: 2097152
  	LastTransactionID: 140874
  	MaxReaders: 100000
  	UsedReaders: 6
  	MaxDbSize: 8589934592
  	UsedDbSize: 184320
  Section SCHEMA:
  	TreeDepth: 3
  	BranchPages: 14
  	LeafPages: 715
  	OverflowPages: 1820
  	DataEntries: 12407
  	PageSize: 4096
  	UsedPages: 2551
  	MaxPages: 2097152
  	LastTransactionID: 53037
  	MaxReaders: 100000
  	UsedReaders: 5
  	MaxDbSize: 8589934592
  	UsedDbSize: 10448896
  Section DNSOperations:
  	Queries: 6
  	QueriesDuration: 549
  Section LDAPOperations:
  	Bind: 4
  	BindDuration: 658
  	BindError: 0
  	BindErrorDuration: 0
  	Search: 8
  	SearchDuration: 222
  	SearchError: 0
  	SearchErrorDuration: 0
  	Modify: 0
  	ModifyDuration: 0
  	ModifyError: 0
  	ModifyErrorDuration: 0
  Section HealthCheck:
  	kdc(1)[2252]: 1
  	smbd-notifyd[2267]: 1
  	nbt[2222]: 1
  	wrepl[2224]: 1
  	kdc(2)[2256]: 1
  	dnsupdate[2255]: 1
  	ntp_signd[2247]: 1
  	s3fs[2216]: 1
  	wb[2271]: 1
  	ldap(2)[2284]: 1
  	smbd-cleanupd[2268]: 1
  	rpc(2)[2236]: 1
  	cldap[2232]: 1
  	ldap[2228]: 1
  	kcc[2251]: 1
  	ldap(3)[2286]: 1
  	wb[2269]: 1
  	rpc(3)[2240]: 1
  	smbd[2221]: 1
  	samba[2212]: 1
  	kdc(3)[2258]: 1
  	kdc[2235]: 1
  	rpc[2219]: 1
  	ldap(0)[2276]: 1
  	winbindd[2250]: 1
  	kdc(0)[2245]: 1
  	winbindd[2242]: 1
  	ldap(1)[2278]: 1
  	drepl[2239]: 1
  	rpc(0)[2227]: 1
  	rpc(1)[2231]: 1
  Section REPLOperations:
  	Replicate: 44
  	ReplicateDuration: 4104
  Section KCC:
  	InboundSuccess: 10
  	InboundFailure: 0
  	OutboundSuccess: 10
  	OutboundFailure: 0
  Section KDCOperations:
  	AS_REQ: 6
  	AS_REQDuration: 3239
  	TGS_REQ: 23
  	TGS_REQDuration: 13747
  	ProxyReq: 0
  	ProxyReqDuration: 0
  Section DNS:
  	ZoneCount: 3

lacheck

Класс lacheck предназначен для логирования сообщений, формируемых процедурой обработки связанных атрибутов (linked attributes).

Пример записи
[2024/11/13 12:52:21.869192,  1] ../../source4/dsdb/link_attr_check/link_attr_check_service.c:130(lacheck_periodic_schedule)
  lacheck_periodic_schedule: lacheck:periodic_interval is too small. Resetting to 20 minutes
[2024/11/13 12:52:21.869326,  3] ../../source4/dsdb/link_attr_check/link_attr_check_service.c:155(lacheck_periodic_schedule)
  lacheck_periodic_schedule: lacheck__periodc_schedule(20) scheduled for: Wed Nov 13 12:52:22 2024 MSK
[2024/11/13 12:52:21.955397,  5] ../../source4/dsdb/link_attr_check/link_attr_check_service.c:97(lacheck_periodic_run)
  lacheck_periodic_run: found partitions to process:
  DC=ForestDnsZones,DC=elles,DC=inno,DC=tech
  DC=DomainDnsZones,DC=elles,DC=inno,DC=tech
  CN=Configuration,DC=elles,DC=inno,DC=tech
  CN=Schema,CN=Configuration,DC=elles,DC=inno,DC=tech
  DC=elles,DC=inno,DC=tech
[2024/11/13 12:52:27.993297,  5] ../../source4/dsdb/link_attr_check/link_attr_check_service.c:111(lacheck_periodic_run)
  lacheck_periodic_run: finished processing partitions

Рекомендации по настройке параметров логирования

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

  • среда, в которой работает контроллер домена: промышленная среда, тестовая среда;

  • режим эксплуатации контроллера домена: начало работы в промышленной среде, обычная эксплуатация в промышленной среде, поиск проблем в промышленной или тестовой среде;

  • требования к сроку хранения данных: период, необходимый для выяснения причин ошибок; период аудита в рамках требований законодательства (сроки исковой давности и другие применимые требования) и т. д.

Настройка параметров логирования в условиях штатной эксплуатации в промышленной среде

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

  • единый приемник логирования (файл, syslog и т. д.);

  • общий уровень логирования: log level = 1 (фиксируются критические и менее критические ошибки);

  • максимальный размер лог-файла: max log size = 10000 (10 МБ);

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

Пример конфигурации логирования в файле smb.conf:

[global]
    ...
    max log size = 10000
    log file = /var/log/elles/common.log
    log level = 1
    ...

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

Пример конфигурации логирования с повышением уровня для целей аудита в файле smb.conf:

[global]
    ...
    max log size = 10000
    log file = /var/log/elles/common.log
    log level = 1 \
            auth:3@/var/log/elles/auth.log \
            auth_audit3:@/var/log/elles/auth.log
    ...

Настройка параметров логирования при начале эксплуатации в промышленной среде

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

Пример конфигурации логирования в файле smb.conf:

[global]
    ...
    max log size = 10000
    log file = /var/log/elles/common.log
    log level = 3
    ...

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

Например, после выпуска обновлений, влияющих на работу KDC, имеет смысл временно на избранных контроллерах установить уровень логирования 5 для класса kerberos. В этом случае в файле smb.conf может использоваться следующая конфигурация логирования:

[global]
    ...
    max log size = 10000
    log file = /var/log/elles/common.log
    log level = 3 \
            kerberos:5@/var/log/elles/kerberos.log
    ...

При переходе к штатной эксплуатации следует отредактировать файлы smb.conf на контроллерах домена в соответствии с рекомендациями в подразделе «Настройка параметров логирования в условиях штатной эксплуатации в промышленной среде».

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

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

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

  • вести отдельные лог-файлы для разных классов логирования;

  • установить достаточно большой размер лог-файлов для удобства управления ими и анализа.

В случае подозрения на наличие проблем в промышленной среде рекомендуется установить уровень логирования 3 для избранных классов логирования и избранных контроллеров домена.

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

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

Пример конфигурации логирования в файле smb.conf:

[global]
    ...
    max log size = 10000
    log file = /var/log/elles/common.log
    log level = 1 \
            auth_audit:3@/var/log/elles/auth_audit.log \
            drs_repl:3@/var/log/elles/drs_repl.log
    ...

При переходе к штатной эксплуатации после устранения проблемы следует отредактировать файлы smb.conf на контроллерах домена в соответствии с рекомендациями в подразделе «Настройка параметров логирования в условиях штатной эксплуатации в промышленной среде».

Рекомендации по оценке размера дискового пространства для хранения лог-файлов

В таблице Табл. 1 приводится оценка размера лога за один рабочий день для некоторых классов логирования.

Оценка основана на следующих допущениях:

  • количество пользователей — 100 000;

  • распределение пользователей по контроллерам домена — 2 000 пользователей на 1 контроллер;

  • ограничение максимального размера лог-файла — 10 МБ;

  • уровень логирования — 3;

    Уровень 3 должен включаться избирательно для определенных классов логирования на отдельных контроллерах домена на непродолжительные периоды времени, достаточные для разрешения имеющихся проблем.
  • учитываемые операции:

    • вход пользователя с доменной учетной записью: 3 операции аутентификации в день на одного пользователя;

    • смена пароля учетной записи: период ротации пароля составляет 90 дней;

    • изменение данных пользователя: данные одного пользователя изменяются один раз в год;

    • доступ к сервисам:

      • время жизни сервисного билета Kerberos — 10 часов;

      • пользователь использует 5 разных сервисов в день с 1 аутентификацией и 10 валидациями билета Kerberos.

Необходимо учитывать, что рабочий день может состоять из нескольких смен и в нерабочее время возможен небольшой прирост размера лог-файлов. Указанные в таблице значения являются минимальными. В условиях реальной эксплуатации они могут быть немного больше.
Табл. 1. Оценка размера дискового пространства для хранения лог-файлов при включении логирования на уровне 3 для отдельных классов отладки
Класс Операция Размер в рабочий день на 1 контроллер, КБ Примечание Оценка размера лог-файла за рабочий день, МБ Оценка количества лог-файлов, шт.

auth_json_audit

Вход пользователя

2.5*<кол-во пользователей>*3/<кол-во контроллеров>

95

10

Доступ к сервисам

1.9*<кол-во пользователей>*20/<кол-во контроллеров>

acls

Вход пользователя

1.8*<кол-во пользователей>*3/<кол-во контроллеров>

93

10

Смена пароля

1*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>)

Приведенное кол-во контроллеров* — 1.5

Изменение пользователя

3*<кол-во пользователей>/(365*<приведенное количество контроллеров>)

Доступ к сервисам

2*<кол-во пользователей>*20/<кол-во контроллеров>

auth

Доступ к сервисам

2.3*<кол-во пользователей>*20/<кол-во контроллеров>

92

10

drs_repl

Смена пароля

2.7*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>)

Приведенное количество контроллеров* — 12

1

1

Изменение пользователя

7.4*<кол-во пользователей>/(90*<приведенное кол-во контроллеров>)

kerberos

Вход пользователя

38.2*<кол-во пользователей>*3/<кол-во контроллеров>

320

4

Доступ к сервисам

23*<кол-во пользователей>*20/<кол-во контроллеров>

ldb

Доступ к сервисам

0.5*<кол-во пользователей>*20/<кол-во контроллеров>

20

2

locking

Доступ к сервисам

0.1*<кол-во пользователей>*20/<кол-во контроллеров>

4

1

smb2

Доступ к сервисам

0.1*<кол-во пользователей>*2/<кол-во контроллеров>

Только сервисы SMB; допущение — это 1/10 доля от всех сервисов

0.4

1

vfs

Доступ к сервисам

0.7*<кол-во пользователей>*2/<кол-во контроллеров>

2.8

1

winbind

Доступ к сервисам

0.9*<кол-во пользователей>*20/<кол-во контроллеров>

36

4

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

Исходя из данных в таблице в день на одном контроллере домена может потребоваться около 700 МБ дискового пространства для логов при включенном уровне 3 для всех указанных классов логирования.

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

Примеры конфигурации логирования

Пример базовой конфигурации логирования в файле smb.conf с указанием пути к общему лог-файлу, ограничением размера лог-файла значением 10 МБ и установкой общего уровня логирования 1 для фиксации критических и некритических ошибок:

[global]
    ...
    log file = /var/log/elles/common.log
    max log size = 10000
    log level = 1
    ...

Пример конфигурации логирования в файле smb.conf c повышением уровня логирования для определенных классов отладки с указанием отдельных файлов:

[global]
    ...
    log file = /var/log/elles/common.log
    max log size = 10000
    log level = 1 \
            kerberos:3@/var/log/elles/kerberos.log \
            drs_repl:3@/var/log/elles/drs_repl.log \
            rpc_srv:3@/var/log/elles/rpc_srv.log \
            ldapsrv:3@/var/log/elles/ldapsrv.log \
            metrics:3@/var/log/elles/metrics.log \
            dns:3@/var/log/elles/dns.log
    ...

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

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

См. инструкции по настройке logrotate в документации на операционные системы:

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

/var/log/elles/*log {
    size 10M
    compress
    dateext
    dateformat -%Y-%m-%d-%s
    rotate 100
    missingok
}

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

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

  • size — максимальный размер лог-файла, по достижении которого должна происходить ротация;

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

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

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

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

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

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

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

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

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

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

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

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

    Например:

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

    Например:

    log level = 1 \
            drs_repl:4@/var/log/elles/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="/var/log/elles/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="/var/log/elles/repl_events.log")
      }
    • если требуется отправлять события на другой сервер:

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

        module(load="imfile" PollingInterval="10")
        
        input(type="imfile"
              File="/var/log/elles/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 /var/log/elles/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("/var/log/elles/drs_repl.log");
      };
      destination d_s_repl {
          file("/var/log/elles/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 /var/log/elles/repl_events.log -n -5 | grep -v 'WERR_OK'