Настройка сбора и приёма логов в VictoriaLogs

Эта инструкция описывает настройки rsyslog на отправку логов в сервер VictoriaLogs, развёрнутый на одном узле. Если используется отказоустойчивый кластер VictoriaLogs:

  1. Разверните rsyslog и LogWatcher, следуя этой инструкции.

  2. Вручную измените настройки rsyslog, следуя инструкции Настройка rsyslog на ПАК, отличающихся от МХД.О из Руководства администратора.

Настройка узлов выполняется с помощью плейбуков Ansible, входящих в состав дистрибутива и размещённых в директории rsyslog_config/. Далее все пути к файлам и директориям указываются относительно этой директории, если явно не указано иное.

Узлы, на которых выполняется установка и настройка rsyslog, далее называются целевыми.

Помимо rsyslog на целевые узлы устанавливается LogWatcher — компонент для работы с логами в формате ZST.

Системные требования

На целевых узлах должны быть установлены или доступны для установки из репозиториев ОС следующие пакеты:

  • rsyslog версии 8.1901 или новее;

  • rsyslog-gnutls;

  • rsyslog-journal (только Альт Сервер).

Если пакеты недоступны в репозиториях, либо их версии ниже допустимых, установите пакеты требуемых версий вручную.

Особенности использования плейбуков

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

deploy.yml

Плейбук deploy.yml выполняет следующие задачи:

  • установка rsyslog и LogWatcher;

  • настройка rsyslog на передачу логов в VictoriaLogs.

Плейбук содержит ряд задач, которые могут завершиться ошибкой:

  • Проверка наличия необходимых пакетов. Отсутствующие пакеты плейбук попытается установить из репозиториев ОС.

  • Проверка версии пакета rsyslog.

  • Проверка конфигурационного файла /etc/rsyslog.conf на наличие директивы подключения конфигурационных файлов из директории /etc/rsyslog.d/*.conf.

    Если директива отсутствует, добавьте в файл /etc/rsyslog.conf строку:

    include(file="/etc/rsyslog.d/*.conf" mode="optional")
  • Проверка конфигурационного файла /etc/rsyslog.conf на присваивание значения переменной workDirectory.

    Если нужная строка отсутствует, добавьте её:

    global(workDirectory="/var/lib/rsyslog")
  • Проверка конфигурационного файла /etc/rsyslog.conf на наличие директивы загрузки модуля imjournal.

    Если нужная строка отсутствует, добавьте её:

    module(load="imjournal" UsePid="system" FileCreateMode="0600" StateFile="imjournal.state")
  • Проверка корректности конфигурационного файла /etc/rsyslog.d/30-vision-vlogs.conf.

    Если проверка завершится ошибкой, выполните следующие действия:

    • Убедитесь, что установленная версия rsyslog содержит библиотеки imfile, imjournal и другие. Путь к директории с библиотеками зависит от используемого дистрибутива Linux:

      Дистрибутив Директория

      РЕД ОС

      /usr/lib/64/rsyslog

      Альт Сервер c10f1

      /lib64/rsyslog

      Astra Linux Special Edition 1.7.3

      /usr/lib/x86_64-linux-gnu/rsyslog

    • Проверьте корректность синтаксиса шаблонов .conf.j2 в директории roles/rsyslog/templates/.

remove.yml

Этот плейбук используется для удаления rsyslog.

Подготовка данных ПАК

Для корректного заполнения инвентаря Ansible понадобятся идентификаторы ПАК, его модулей и узлов. Возьмите их из инсталляционной карты, либо выполните следующие действия:

  1. Авторизуйтесь в подсистеме мониторинга.

  2. На панели навигации выберите Объекты.

  3. На панели Контур выберите нужный ПАК. Рядом с панелью отобразятся вкладки с данными ПАК, активна будет вкладка Обзор. Все необходимые данные выводятся на ней.

    • Название ПАК является его идентификатором.

    • Идентификаторы модулей и узлов указаны в колонке Имя в таблицах Модули, Серверы и ВМ.

Создание инвентарей

Для использования плейбуков требуется инвентарь Ansible. Из-за того, что узлы ПАК МХД.О могут выполнять роль шлюза (Gateway) или сервера хранения (Storage), понадобятся два инвентаря. Заполните их по образцу с той разницей, что в одном инвентаре укажите только шлюзы, а в другом — только серверы хранения.

Пример заполнения инвентаря
---
all:
  vars:
    ansible_user: vision (1)
    ansible_ssh_pass: "skala-r" (2)
    ansible_become_user: root
    ansible_become_password: "r0oTp@s$w0rd" (3)

    victorialogs:
      host: 192.168.10.10 (4)
      syslog_port: 29514
      tls_ca_file: /opt/skala-r/vision/cert/components_default.crt

  # Список узлов
  hosts:
    mhdo-storage-node-01: (5)
      ansible_host: 192.168.10.51 (6)
      labels:
        _pak_id: "mhdo-01" (7)
        _module_id: "mhdo-storage-module" (8)
        _node_id: "mhdo-storage-node-01" (9)

Здесь:

  1. Название учётной записи для подключения к узлам по SSH.

  2. Пароль для подключения к узлам по SSH.

  3. Пароль пользователя root.

  4. IP-адрес узла управления подсистемой мониторинга.

  5. Описание узла mhdo-storage-node-01.

  6. IP-адрес узла mhdo-storage-node-01.

  7. Идентификатор ПАК.

  8. Идентификатор модуля ПАК.

  9. Идентификатор узла.

Настройка сервера подсистемы мониторинга

Чтобы настроить сервер подсистемы мониторинга:

  1. Авторизуйтесь в подсистеме мониторинга.

  2. На панели навигации выберите Объекты.

  3. На панели Контур выберите ПАК.

  4. Во вкладке Агенты логов нажмите кнопку Сконфигурировать агенты.

  5. Выберите расположение Прокси мониторинга и узлы, на которые необходимо установить агенты логов.

  6. Нажмите кнопку Сохранить.

  7. Если сервер VictoriaLogs развёрнут на том же узле, что и управление подсистемой мониторинга, приведите содержимое файла /opt/skala-r/etc/vision/server/victorialogs/environment.env к следующему виду:

    ENV="-httpListenAddr=:29514 `
    `-http.pathPrefix=/vision/victorialogs `
    `-httpAuth.username=vision `
    `-httpAuth.password='<password>' `
    `-tls=1 `
    `-tlsCertFile=/opt/skala-r/vision/cert/components_default.crt `
    `-tlsKeyFile=/opt/skala-r/vision/cert/components_default.key `
    `-tlsMinVersion=TLS12 `
    `-tlsCipherSuites 'TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256' `
    `-tlsCipherSuites 'TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384' `
    `-tlsCipherSuites 'TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256' `
    `-audit.filePath=/opt/skala-r/var/log/vision/audit/server/victorialogs/audit.log `
    `-syslog.streamFields.tcp='[\"hostname\",\"app_name\",\"_pak_id\",\"_module_id\",\"_node_id\",\"_vm_id\"]' `
    `-storageDataPath=victoria-logs-data `
    `-storage.minFreeDiskSpaceBytes=10GB `
    `-retention.maxDiskSpaceUsageBytes=100GB"

Здесь <password> — закодированный пароль, полученный при выполнении инструкции по смене технологического пароля VictoriaLogs.

Настройка шаблонов

Шаблоны настроек rsyslog хранятся в директории roles/rsyslog/templates/ и её субдиректориях:

  • main.conf.j2 — основные настройки rsyslog;

  • mhdo/mhdo_gateway_v1.8_imfile.j2 — настройки, специфичные для шлюзов;

  • mhdo/mhdo_storage_v1.8_imfile.j2 — настройки, специфичные для серверов хранения.

Шаблоны шлюзов и серверов хранения

Рекомендуется использовать шаблоны mhdo_gateway_v1.8_imfile.j2 и mhdo_storage_v1.8_imfile.j2 в том виде, в каком они поставляются в составе дистрибутива. Если их всё же нужно изменить, сначала создайте их резервную копию.

Шаблон основных настроек

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

Приведите содержимое файла roles/rsyslog/templates/main.conf.j2 к следующему виду:

{% include "roles/common/templates/warn_header.j2" %}

#module(load="lmnsd_gtls")  # auto-load

global(
  DefaultNetstreamDriver="gtls"
  DefaultNetstreamDriverCertFile="/opt/skala-r/vision/cert/components_default.crt"
  DefaultNetstreamDriverKeyFile="/opt/skala-r/vision/cert/components_default.key"
  DefaultNetstreamDriverCAFile="{{ vision_home_path }}/cert/victorialogs_ca_file.crt"
)

template(
  name="RFC5424WithSD"
  type="string"
  string="<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% [ filename=\"%$!metadata!filename%\" ] %msg%\n"
)

ruleset(name="forward_to_vision") {
  action(
    type="omfwd"
    Target="127.0.0.1"
    Port="29515"
    Protocol="tcp"
    StreamDriver="gtls"
    StreamDriverMode="1"
    StreamDriverAuthMode="anon"
    Template="RFC5424WithSD"
    queue.type="linkedlist"
    queue.spoolDirectory="/var/spool/rsyslog"
    queue.fileName="remote_forward"
    queue.maxDiskSpace="1g"
    queue.saveOnShutdown="on"
    action.resumeRetryCount="-1"
    #gnutlsPriorityString="SECURE128:-VERS-TLS-ALL:+VERS-TLS1.3"
  )
  stop
}

{% include mhdo_role_template %}

{% for tpl_path in rsyslog.extra_templates %}

{% include tpl_path %}

{% endfor %}

Если для подключения к VictoriaLogs будут использоваться собственные сертификаты, в значениях параметров DefaultNetstreamDriverCertFile и DefaultNetstreamDriverKeyFile укажите пути к файлам сертификата и его ключа соответственно.

Запуск плейбуков

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

  1. Запустите плейбук deploy.yml с инвентарём, содержащим описания шлюзов:

    ansible-playbook -i /path/to/gateway-inventory.yml deploy.yml
  2. Выберите шаблон для шлюзов.

  3. Запустите плейбук deploy.yml с инвентарём, содержащим описания серверов хранения:

    ansible-playbook -i /path/to/storage-inventory.yml deploy.yml
  4. Выберите шаблон для серверов хранения.

Удаление инвентарей

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