Мониторинг

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

В качестве источников метрик выступают модули:

  • inno-samba-dc-exporter — обеспечивает формирование и экспорт следующих групп метрик в формате Prometheus:

    • метрики для мониторинга работы основных процессов и служб Samba;

    • метрики для мониторинга корректности настройки DNS;

  • prometheus-bind-exporter — обеспечивает экспорт метрик, отражающих состояние DNS-сервера BIND, в формате Prometheus;

  • node_exporter — обеспечивает экспорт метрик, отражающих статистику использования системных ресурсов (CPU, RAM, дисковое пространство, сеть), в формате Prometheus.

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

  • сбор и хранение метрик — Prometheus или VictoriaMetrics;

  • отображение собранных метрик в графическом формате — Grafana;

  • формирование и отправка оповещений при достижении установленных для метрик порогов — Alertmanager.

В данном разделе приводится только информация, относящаяся к модулю inno-samba-dc-exporter.

Установка

Для установки inno-samba-dc-exporter требуется следующее:

  • имя apt-репозитория в формате https://artifacts.inno.tech/repository/<repository_name>;

  • файл с публичным ключом для доступа к apt-репозиторию;

  • реквизиты для доступа к apt-репозиторию.

Чтобы установить пакет inno-samba-dc-exporter на сервере из apt-репозитория:

  1. Добавьте публичный ключ для доступа к apt-репозиторию с пакетом стандартным способом, соответствующим используемому дистрибутиву Linux.

    Например, на Astra Linux 1.7 SE или Ubuntu 20.04 используйте стандартную утилиту apt-key:

    sudo apt-key add keyfile.pgp
    При необходимости установки ключа для проверки подписи исполняемых файлов в защищенном режиме работы Astra Linux 1.7 SE следуйте инструкции в официальной документации.

    На Ubuntu 22.04 и выше используйте следующую команду (от имени пользователя root):

    cat keyfile.gpg | gpg --dearmor > /usr/share/keyrings/innotech-keyring.gpg
  2. Создайте файл /etc/apt/auth.conf.d/innotech.conf и задайте в нем реквизиты для доступа к репозиторию в стандартном формате:

    machine <repo_host> login <repo_user> password <repo_password>
  3. Подключите требуемый apt-репозиторий в соответствии с инструкциями для используемого дистрибутива Linux (см., например, инструкцию в официальной документации Astra Linux).

    Например, при использовании дистрибутива на основе Debian выполните следующую команду:

    echo -e "deb https://artifacts.inno.tech/repository/<repository_name> main" | sudo tee /etc/apt/sources.list.d/innotech.list
  4. Обновите пакеты с помощью стандартной команды:

    sudo apt update
  5. Подготовьте файл config.yaml с требуемыми настройками (см. пример содержимого файла и описание настроек в разделе «Настройка сбора метрик»), создайте каталог /etc/samba-dc-exporter и поместите в него файл.

    Если файл отсутствует, он создается при установке пакета и может быть отредактирован в последующем.
  6. Создайте файл с реквизитами для доступа к LDAP по пути, указанному в параметре ldap_credentials_path в config.yaml (по умолчанию — /etc/samba-dc-exporter/cred):

    printf 'ldap_user=%s\n' `echo username | base64` | sudo tee /etc/samba-dc-exporter/cred
    printf 'ldap_user_pw=%s\n' `echo userpassword | base64` | sudo tee -a /etc/samba-dc-exporter/cred

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

    sudo chown samba-dc-exporter:samba-dc-exporter /etc/samba-dc-exporter/cred
    sudo chmod 400 /etc/samba-dc-exporter/cred
  7. Установите пакет inno-samba-dc-exporter:

    sudo apt install inno-samba-dc-exporter
  8. Запустите сервис:

    sudo systemctl start samba-dc-exporter

После этого на сервере будет доступна служба samba-dc-exporter.service, реализующая функции экспорта метрик.

Для указания пути к файлу с реквизитами для доступа к LDAP после установки также может использоваться параметр командной строки --credentials, который необходимо добавить в файл /etc/systemd/samba-dc-exporter.service в следующем формате:

ExecStart=/usr/bin/python3 /app/samba-dc-exporter/samba_exporter.py --credentials /path/to/credentials/file

Данный параметр имеет более высокий приоритет, чем параметр ldap_credentials_path в файле config.yaml.

Настройка сбора метрик

Настройки inno-samba-dc-exporter хранятся в файле /etc/samba-dc-exporter/config.yaml. Они могут быть заданы до установки либо после нее.

Файл должен содержать следующие настройки формирования и сбора метрик:

  • dc_hostname — имя хоста контроллера домена Samba, для которого требуется формировать и экспортировать метрики;

  • domain_name — имя домена, в рамках которого осуществляется мониторинг;

  • port — порт, на котором доступны для сбора метрики (значение по умолчанию — 9099);

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

    • logLevel — уровень логирования (значение по умолчанию — INFO);

    • logFormat — набор атрибутов для формирования записи в лог-файле (значение по умолчанию — '%(asctime)s - %(levelname)s - %(name)s - %(message)s');

  • metric_collect_interval_sec — интервал сбора метрик в секундах в секундах (значение по умолчанию — 5);

  • настройки LDAP:

    • ldap_search_path — уникальное составное имя объекта AD (DN) в LDAP для поиска sAMAccountName по заданному значению ldap_user;

    • ldap_timeout — время ожидания ответа от LDAP в секундах (значение по умолчанию — 2.0);

    • ldap_credentials_path — путь к файлу с реквизитами доступа для LDAP (значение по умолчанию — /etc/samba-dc-exporter/cred);

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

      • ldap_user — имя пользователя для доступа к LDAP;

      • ldap_user_pw — пароль пользователя для доступа к LDAP.

  • rpc_connect_transport — способ подключения к службе dcerpc; возможные варианты подключения:

    • ncacn_np — подключение по именованным каналам;

    • ncacn_ip_tcp — подключение по TCP/IP (значение по умолчанию — ncacn_ip_tcp:127.0.0.1);

    • ncalrpc — подключение по протоколу LRPC;

  • krb5_keytab_path — путь к keytab-файлу (значение по умолчанию — /etc/krb5.keytab);

  • ntp_config — путь к конфигурационному файлу службы синхронизации времени (значение по умолчанию при использовании chrony — /etc/chrony/chrony.conf; значение при использовании ntpd — /etc/ntpd.conf);

  • настройки DNS:

    • dns_timeout — период ожидания ответа от DNS-сервера в секундах (значение по умолчанию — 2.0);

    • dns_log_path — путь к лог-файлу (значение по умолчанию — /var/log/syslog).

Пример содержимого файла config.yaml:

dc_hostname: "dc1"
domain_name: "example.com"
port: 9099

# Logging parameters
log:
  logLevel: INFO
  logFormat: '%(asctime)s - %(levelname)s - %(name)s -  %(message)s'

# Collection interval
metric_collect_interval_sec: 5

# LDAP parameters
ldap_search_path: 'CN=Users, DC=example,DC=com'
ldap_timeout: 2.0
ldap_credentials_path: /etc/samba-dc-exporter/cred

# RPC parameters
rpc_connect_transport: "ncacn_ip_tcp:127.0.0.1"

# KDC parameters
krb5_keytab_path: '/etc/krb5.keytab'

# NTP parameters
ntp_config: "/etc/chrony/chrony.conf"
# ntp_config: "/etc/ntpd.conf"

# DNS parameters
dns_timeout: 2.0
dns_log_path: "/var/log/syslog"

Для применения изменений в конфигурационном файле перезапустите службу samba-dc-exporter.service.

Метрики для мониторинга работы процессов и служб

Модуль inno-samba-dc-exporter предоставляет метрики для мониторинга работы следующих основных процессов и служб на контроллере домена Samba:

samba

samba_process_check_samba

Проверка существования процесса samba.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_samba Health of process
# TYPE samba_process_check_samba gauge
samba_process_check_samba 0.0

smbd

samba_process_check_smbd

Проверка существования процесса smbd.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_smbd Health of smbd process
# TYPE samba_process_check_smbd gauge
samba_process_check_smbd 1.0
samba_smbd_list_folder

Проверка существования подкаталога с именем домена в каталоге sysvol.

В рамках проверки выполняется SMB-запрос по имени домена.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — каталог существует;

  • 1 — каталог не существует.

Формат:

# HELP samba_smbd_list_folder Health of smbd
# TYPE samba_smbd_list_folder gauge
samba_smbd_list_folder 0.0

LDAP

samba_process_check_ldap

Проверка существования процесса, отвечающего за взаимодействие по протоколу LDAP.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_ldap Health of process
# TYPE samba_process_check_ldap gauge
samba_process_check_ldap 0.0
samba_ldap_search

Проверка работоспособности поиска в LDAP.

В рамках проверки выполняется простой поисковый запрос в LDAP.

При проверке используются значения параметров, заданные в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»):

  • ldap_user;

  • ldap_user_pw;

  • ldap_search_path.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — поисковый запрос к LDAP выполнен успешно;

  • 1 — поисковый запрос не выполнен.

формат:

# HELP samba_ldap_search Health of ldap search
# TYPE samba_ldap_search gauge
samba_ldap_search 0.0

DNS

samba_process_check_dns

Проверка существования процесса службы DNS.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_dns Health of process
# TYPE samba_process_check_dns gauge
samba_process_check_dns 0.0
samba_dns_resolver

Проверка работоспособности службы DNS.

В рамках проверки выполняется запрос SRV-записей (A, AAAA, MX и т. д.) для службы ldap по протоколу TCP.

При проверке используются значения параметров, заданные в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»):

  • dc_hostname;

  • domain_name;

  • dns_timeout.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — в ответ на запрос получены SRV-записи;

  • 1 — в ответ на запрос не получены SRV-записи.

Формат:

# HELP samba_dns_resolver Health of DNS resolve
# TYPE samba_dns_resolver gauge
samba_dns_resolver 0.0

RPC

samba_process_check_rpc

Проверка существования процесса RPC.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_rpc Health of rpc process
# TYPE samba_process_check_rpc gauge
samba_process_check_rpc 0.0
samba_rpc_echo_request

Проверка работоспособности служб RPC.

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

При проверке используется значение параметра rpc_connect_transport, заданное в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»).

Тип метрики: gauge.

Тип данных: Int.

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

Формат:

# HELP samba_rpc_echo_request Health of RPC
# TYPE samba_rpc_echo_request gauge
samba_rpc_echo_request 0.0

wrepl

samba_process_check_wrepl

Проверка существования процесса wrepl.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_wrepl Health of wrepl process
# TYPE samba_process_check_wrepl gauge
samba_process_check_wrepl 0.0
samba_wrepl_inbound_check

Проверка статуса входящей репликации.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — последняя попытка входящей репликации завершилась успешно;

  • 1 — последняя попытка входящей репликации завершилась ошибкой.

Формат:

# HELP samba_wrepl_inbound_check AD Replication check from neighbors
# TYPE samba_wrepl_inbound_check gauge
samba_wrepl_inbound_check 0.0
samba_wrepl_outbound_check

Проверка статуса исходящей репликации.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — последняя попытка исходящей репликации завершилась успешно;

  • 1 — последняя попытка исходящей репликации завершилась ошибкой.

Формат:

# HELP samba_wrepl_outbound_check AD Replication check to neighbors
# TYPE samba_wrepl_outbound_check gauge
samba_wrepl_outbound_check 0.0

nbt

samba_process_check_nbt

Проверка существования процесса nbt.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_nbt Health of nbt process
# TYPE samba_process_check_nbt gauge
samba_process_check_nbt 0.0
samba_nmbd_response

Проверка работоспособности NetBIOS.

В рамках проверки выполняется запрос имени NetBIOS.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — ответ на запрос получен;

  • 1 — ответ на запрос не получен.

Формат:

# HELP samba_nmbd_response Health of NetBios
# TYPE samba_nmbd_response gauge
samba_nmbd_response 0.0

cldap

samba_process_check_cldap

Проверка существования процесса cldap.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_cldap Health of cldap process
# TYPE samba_process_check_cldap gauge
samba_process_check_cldap 0.0
samba_cldap_check

Проверка работоспособности CLDAP.

В рамках проверки выполняется запрос имени домена доступного для записи контроллера домена с поддержкой LDAP (с флагами NBT_SERVER_LDAP, NBT_SERVER_DS, NBT_SERVER_WRITABLE) по протоколу CLDAP.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — ответ на запрос получен;

  • 1 — ответ на запрос не получен.

Формат:

# HELP samba_cldap_check Connection-less LightweightDirectory Access Protocol checking
# TYPE samba_cldap_check gauge
samba_cldap_check 0.0

KDC

samba_process_check_kdc

Проверка существования процесса kdc.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_kdc Health of kdc process
# TYPE samba_process_check_kdc gauge
samba_process_check_kdc 0.0
samba_kdc_response

Проверка работоспособности KDC.

В рамках проверки создается keytab-файл (если он не существует по указанному в параметре krb5_keytab_path конфигурации пути), в который помещается пароль указанного в параметре ldap_user_pw конфигурации пользователя LDAP. После этого выполняется запрос к KDC для получения пароля.

При проверке используются значения параметров, заданные в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»):

  • krb5_keytab_path;

  • ldap_user;

  • ldap_user_pw.

Для успешного выполнения проверки в конфигурационном файле smb.conf должен быть задан параметр kerberos method = secrets and keytab.

Формат:

# HELP samba_kdc_response Health of KDC
# TYPE samba_kdc_response gauge
samba_kdc_response 0.0

drepl

samba_process_check_drepl

Проверка существования процесса drepl.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_drepl Health of drepl process
# TYPE samba_process_check_drepl gauge
samba_process_check_drepl 0.0

winbindd

samba_process_check_winbindd

Проверка существования процесса winbindd.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_winbindd Health of winbindd process
# TYPE samba_process_check_winbindd gauge
samba_process_check_winbindd 0.0

ntp_signd

samba_process_check_ntp_signd

Проверка существования процесса ntp_signd.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_ntp_signd Health of ntp_signd process
# TYPE samba_process_check_ntp_signd gauge
samba_process_check_ntp_signd 0.0
samba_ntp_response

Проверка работоспособности NTP.

В рамках проверки выполняется запрос к NTP-серверу с переданными параметрами (хост — localhost, порт — 123).

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — ответ на запрос получен;

  • 1 — ответ на запрос не получен.

Формат:

# HELP samba_ntp_response Health of NTP
# TYPE samba_ntp_response gauge
samba_ntp_response 1.0
samba_ntp_signd_config_check

Проверка корректности конфигурации ntp_signd.

В рамках проверки проверяется корректность задания в ключе ntpsigndsocket в конфигурации NTP пути к каталогу сокета, через который NTP взаимодействует с Samba при подписании пакетов. Для этого сравниваются значение ntpsigndsocket из конфигурационного файла NTP, заданного в параметре ntp_config в конфигурации модуля inno-samba-dc-exporter, и значение, полученное от NTP-сервера.

При проверке используется значение параметра ntp_config, заданное в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»).

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — ключ найден, значения совпадают;

  • 1 — ключ не найден либо значения не совпадают.

Формат:

# HELP samba_ntp_signd_config_check Value of ntpsigndsocket in config file of NTP server
# TYPE samba_ntp_signd_config_check gauge
samba_ntp_signd_config_check 1.0

dnsupdate

samba_process_check_dnsupdate

Проверка существования процесса dnsupdate.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_dnsupdate Health of dnsupdate process
# TYPE samba_process_check_dnsupdate gauge
samba_process_check_dnsupdate 0.0
samba_dns_update_check

Проверка работоспособности dnsupdate.

В рамках проверки каждые 10 минут:

  1. В файл private/dns_update_list добавляется A-запись для dc-exporter.domain_name.

  2. Через 10 минут выполняется обращение к службе DNS с запросом A-записи для dc-exporter.domain_name.

  3. Запись удаляется.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — добавленная запись существует;

  • 1 — запись не существует.

Формат:

# HELP samba_dns_update_check DNS update checking
# TYPE samba_dns_update_check gauge
samba_dns_update_check 0.0

KCC

samba_process_check_kcc

Проверка существования процесса kcc.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — процесс существует;

  • 1 — процесс не существует.

Формат:

# HELP samba_process_check_kcc Health of kcc process
# TYPE samba_process_check_kcc gauge
samba_process_check_kcc 0.0
samba_kcc_check

Проверка работоспособности KCC.

В рамках проверки выполняется поиск в LDAP объекта nTDSConnection, задающего путь для репликации с одного контроллера домена на другой.

При проверке используются значения параметров, заданные в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»):

  • ldap_user;

  • ldap_user_pw.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — объект существует;

  • 1 — объект не существует.

Формат:

# HELP samba_kcc_check Connection objects
# TYPE samba_kcc_check gauge
samba_kcc_check 1.0

Метрики для мониторинга корректности настройки DNS

Модуль inno-samba-dc-exporter предоставляет набор метрик для контроля ряда настроек DNS-службы на контролере домена Samba.

samba_dns_suffix_check

Проверка корректности задания DNS-суффикса на сервере.

В рамках проверки выполняется поиск наличия в файле /etc/resolv.conf записи с DNS-суффиксом в формате: search domain_name.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — DNS-суффикс задан корректно;

  • 1 — DNS-суффикс не задан или некорректен.

Формат:

# HELP samba_dns_suffix_check Check namesearch record in /etc/resolv.conf
# TYPE samba_dns_suffix_check gauge
samba_dns_suffix_check{dns_suffix="search domain_name"} 0.0
samba_dns_zones_check

Проверка корректности задания зон на DNS-сервере.

В рамках проверки выполняется запрос списка зон, заданных на DNS-сервере. Ожидается, что заданы хотя бы две зоны вида domain_name и _msdcs.domain_name.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — заданы не менее двух зон;

  • 1 — зоны не заданы или их менее двух.

Формат:

# HELP samba_dns_zones_check Check zones record in DNS
# TYPE samba_dns_zones_check gauge
samba_dns_zones_check{zones="['domain_name', '_msdcs.domain_name']"} 0.0
samba_dns_sec_check

Проверка подписания зон при помощи DNSSEC.

В рамках проверки выполняется запрос записи типа DNSKEY.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — запись DNSKEY найдена, зона подписана;

  • 1 — запись DNSKEY не найдена, зона не подписана.

Формат:

# HELP samba_dns_sec_check DNS signature
# TYPE samba_dns_sec_check gauge
samba_dns_sec_check{dns_sec="No DNSKEY found for domain_name"} 1.0
samba_dns_recursive_check

Проверка возможности выполнения рекурсивного DNS-запроса с заданным временем ожидания ответа.

В рамках проверки выполняется рекурсивный запрос A-записи для случайного домена с временем ожидания ответа 2 секунды.

Тип метрики: gauge.

Тип данных: Int.

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

  • 0 — рекурсивный запрос выполнен успешно в рамках заданного времени ожидания ответа;

  • 1 — заданное время ожидания ответа на рекурсивный запрос истекло.

Формат:

# HELP samba_dns_recursive_check Check recursive query timeout
# TYPE samba_dns_recursive_check gauge
samba_dns_recursive_check{dns_recursive="Recursive query performed"} 0.0
samba_dns_log_check

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

В рамках проверки запрашивается размер лог-файла по заданному пути.

При проверке используется значение параметра dns_log_path, заданное в файле /etc/samba-dc-exporter/config.yaml (см. описание в разделе «Настройка сбора метрик»).

Тип метрики: gauge.

Тип данных: Int.

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

Формат:

# HELP samba_dns_log_check Check size of dns log
# TYPE samba_dns_log_check gauge
samba_dns_log_check{dns_log_size="dns_log_path"} 0.0