Установка EVPT на ВМ#

Порядок установки EVPT#

Порядок установки компонента EVPT зависит от способа развертывания компонента.

Способы развертывания компонента:

  • целевая: ручная установка с использованием Ansible;

  • опциональная: автоматическая установка с использованием Jenkins.

Ручная установка с использованием Ansible#

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

  1. Заполнить файлы в директории inventories. Подробнее описано в разделе Подготовка окружения EVPT на ВМ, подраздел «Настройка inventory для EVPT».

  2. Выполнить шифрование пароля. Подробнее описано в разделе Использование утилиты «ansible-vault» для шифрования пароле.

  3. Заполнить параметры в файле vars.yml. Пример заполнения файла vars.yml описан в разделе Подготовка окружения EVPT на ВМ, подраздел «Пример заполненного файла vars.yml для EVPT».

  4. Выполнить ручную установку EVPT с использованием Ansible. Подробнее описано в подразделе «Ручная установка EVPT с использованием Ansible».

Автоматическая установка с использованием Jenkins#

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

  1. Заполнить файлы в директории inventories. Подробнее описано в разделе Подготовка окружения EVPT, подраздел «Настройка inventory для EVPT».

  2. Создать задания в Jenkins для автоматической установки EVPT. Подробнее описано в разделе Подготовка окружения EVPT, подраздел «Создание Jenkins Job для автоматической установки EVPT».

  3. Выполнить шифрование пароля. Подробнее описано в разделе Использование утилиты «ansible-vault» для шифрования пароле.

  4. Заполнить параметры в файле vars.yml. Пример заполненния файла vars.yml описан в разделе Подготовка окружения EVPT, подраздел «Пример заполненного файла vars.yml для EVPT».

  5. Выполнить автоматическую установку EVPT с использованием Jenkins. Подробнее описано в подразделе «Автоматическая установка EVPT с использованием Jenkins».

Дополнительные настройки и функции#

Дополнительно при установке (ручной/автоматической) могут быть использованы следующие настройки и функции:

  1. Запуск установки компонента EVPT под другим пользователем. Подробнее описано в подразделе «Запуск установки EVPT под другим пользователем».

  2. Настройка интеграции компонента EVPT с сервисными системами. Подробнее описано в подразделе «Настройка интеграции EVPT с сервисными системами».

  3. Подготовка базы данных для работы с хранением окон агрегации. Подробнее описано в подразделе «Подготовка базы данных для работы с хранением окон агрегации для EVPT».

Задание константных значений конфигурационным параметрам#

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

Для задания константных значений необходимо:

  • создать файл preferred_ansible_vars.yml в директории Pipeline, которая размещается в скриптах установки;

  • указать в файле preferred_ansible_vars.yml необходимые параметры с константными значениями. Параметры необходимо указывать в том же формате, как и в файле vars.yml в inventories.

Структура заполненного файла vars.yml приведена в раздел Подготовка окружения EVPT на ВМ, подраздел «Пример заполненного файла vars.yml для EVPT».

Логика приоритетов:

  • При наличии файла preferred_ansible_vars.yml в директории Pipeline значения, указанные в нем, применяются как самые приоритетные и не могут быть изменены через inventories;

  • При наличии файла preferred_ansible_vars.yml в директории Pipeline и попытке изменить значения параметров в файле vars.yml новые заданные параметры не применятся — остается приоритет у данных из файла preferred_ansible_vars.yml;

  • При отсутствии файла preferred_ansible_vars.yml все параметры применяются из файла vars.yml.

Функциональность приоритетных параметров можно использовать при работе с Jenkins Job для EVPT - scheduler_VM.

Ручная установка EVPT с использованием Ansible#

Для ручной установки EVPT необходимо:

  1. Разархивировать дистрибутив скриптов развертывания. Перейти в папку Ansible развернутого дистрибутива. Подробнее в разделе Подготовка окружения EVPT на ВМ, подраздел «Получение скриптов развертывания Ansible для EVPT».

  2. Заполнить настройки inventory. Подробнее в разделе Подготовка окружения EVPT на ВМ, подраздел «Настройка inventory для EVPT».

  3. Проверить, что с сервера, с которого будет производиться установка, доступны все точки подключения к транспорту, указанные в пресетах inventory.

  4. Создать в корне директории Ansible директорию files.

  5. Распаковать дистрибутив ./EVPT-bin-{version}-distrib.zip.

  6. Перейти в директорию package/bh и заархивировать содержимое командой cd scheduler; zip -r ../scheduler.zip .; cd ...

  7. Библиотеку encryptor-cli-(version)-fatjar.jar перенести в корень директории Ansible.

  8. Перенести содержимое package/bh (кроме библиотеки encryptor-cli-(version)-fatjar.jar и папки scheduler) в директорию files.

  9. Установка EVPT производится из папки Ansible скриптов развертывания командой:

ansible-playbook -i inventories/<имя созданного инвентори>/inventory <PLAYBOOK>.yml --ask-vault-pass

Список возможных PLAYBOOKS:

  • prerequirements.yml — playbook для автоматической настройки пререквизитов: устанавливает необходимые пакеты, модифицирует лимиты, настройки сети, прописывает sudo права для использования сервисов и создает директории установки/логов/данных;

  • reencrypt_passwords.yml – перешифровывает пароли;

  • <название сервиса>_system_service.yml — устанавливает системный сервис для EVPT на виртуальную машину;

  • <название сервиса>_user_service.yml — устанавливает пользовательский сервис для EVPT на виртуальную машину;

  • scheduler_system_service_delete.yml - удаление системного сервиса обслуживания EVPT на виртуальной машине;

  • scheduler_user_service_delete.yml - удаление пользовательского сервиса обслуживания EVPT на виртуальной машине;

  • scheduler_vm.yml — устанавливает EVPT на виртуальную машину.

  1. Проверить работоспособность сервиса: убедиться, что сборка завершена без ошибок.

Для использования продукта Platform V Synapse Event-domain management (Mayak)(EDMN) или любой другой системы мониторинга необходимо добавить настройки jmx-порта в скрипте запуска EVPT. Скрипт находится в директории bin.

Автоматическая установка EVPT с использованием Jenkins#

Чек-лист автоматической установки#

  1. Создайте файл с паролем, с помощью которого при автоматической установке будут расшифровываться пароли, зашифрованные через ansible-vault в параметрах (vars) выбранного inventory.

  2. Заполните inventory согласно инструкции в разделе Подготовка окружения EVPT на ВМ, подраздел «Настройка inventory для EVPT».

  3. Убедитесь, что созданы необходимые Jenkins Job. Jenkins Job должны быть настроены согласно инструкции в разделе Подготовка окружения EVPT на ВМ, подраздел «Создание Jenkins Job для автоматической установки EVPT» (например, было создано Jenkins Job scheduler_VM).

  4. Заполните параметры созданной Jenkins Job. Параметры для установки на ВМ указаны в разделе Подготовка окружения EVPT на ВМ, подраздел «Создание Jenkins Job для автоматической установки EVPT».

  5. Запустите Jenkins Job, дождитесь окончания выполнения работы со статусом SUCCESS.

  6. Проверьте работоспособность сервиса:

  • убедитесь, что установка завершена без ошибок.

Успешным результатом работы Jenkins Job будет запущенный EVPT на hosts, указанных в inventory.

Запуск установки EVPT под другим пользователем#

В случае запрета удаленного подключения под пользователем scheduler возможно использовать механизм запуска установки EVPT под другим пользователем (не под тем, что используется для подключения к серверу установки EVPT). Для этого предварительно необходимо добавить параметры в конфигурационный файл vars.yml:

# авторизация под другим пользователем и его паролем
ansible_become: 1 # Использование данного механизма при установке. Доступные значения: 0 и 1. Если 1 — при авторизации на сервере, представляемся другим пользователем. Установка будет производиться под пользователем, указанным в параметре *ansible_become_user* ниже. Значение по умолчанию: 0 (не используем данный механизм).
ansible_become_method: su # Способ представления пользователя в Linux. Доступные значения: su или sudo. При использовании sudo - можно не запрашивать пароль пользователя. Значение по умолчанию: sudo.
ansible_become_flags: --login # дополнительные ключи для режима su.
ansible_become_user: <имя пользователя> # пользователь, под которым будет производиться установка. Например, scheduler. В таком случае, в параметре ansible_user указывается пользователь, под которым осуществляется вход на сервер.
ansible_become_pass: <пароль пользователя> # пароль пользователя, под которым будет производиться установка (Например, scheduler).

Также можно изменить пользователя, используя sudo (при этом указывать пароль пользователя не требуется). Для этого пользователю нужно предоставить права в файле, который находится в каталоге /etc/sudoers.d/. В данном файле должен быть следующий текст user ALL=(<имя пользователя>) NOPASSWD:ALL:

# авторизация под другим пользователем с использованием sudo
ansible_become: 1
ansible_become_user: <имя пользователя> # пользователь, под которым будет производиться установка

При использовании механизма запуска установки под другим пользователем первая строка в файле inventory должна выглядеть так (отключаем механизм ansible_become для сервера, с которого происходит установка).

localhost ansible_connection=local ansible_become=0

После запуска установки с описанными параметрами установка EVPT будет осуществляться под пользователем, указанным в параметре ansible_become_user.

Настройка интеграции EVPT с сервисными системами#

Ниже описана процедура интеграции с рекомендованным АО «СберТех» продуктами:

  • Platform V Audit SE (компонент AUDT);

  • Platform V Monitor (компонент LOGA);

  • Platform V Synapse Event-domain management (компонент EDMN Synapse Event Monitoring system (Mayak)).

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

Элементы дистрибутива, содержащие файлы скриптов развертывания и управления, описаны в разделе Состав дистрибутива и информация о дистрибутиве EVPT.

Настройка интеграции со смежными сервисами происходит в процессе конфигурации параметров в файле vars.yml. Подробнее в разделе Подготовка окружения EVPT на ВМ, подраздел «Пример заполненного файла vars.yml для EVPT».

1. Интеграция с компонентом AUDT продукта Platform V Audit SE#

Настройка интеграции компонента EVPT с компонентом AUDT продукта Platform V Audit SE производится в файле vars.yml, блок настроек:

  audit: # Блок настроек аудита
    audit.service.type: http # Логирование событий
    audit.service.url: http://example
    audit.service.url.event.path: "/v1/event"
    audit.service.url.metamodel.path: "/v1/metamodel"
    audit.service.ssl.enabled: "false"
    audit.service.ssl.verify.hostname: "false"
    audit.service.send.metamodel: "true"
    audit.service.metamodel.module: EVPT Stream Processor
    audit.service.metamodel.version: 1.0
    audit.service.redelivery.enabled: "true"
    audit.service.add.redelivery.headers: "true"
    audit.service.redelivery.buffers: "in-memory-buffer"
    audit.service.redelivery.in-memory-buffer.type: "queue"
    audit.service.redelivery.in-memory-buffer.max.size: "10k"
    audit.service.redelivery.in-memory-buffer.clear.logger.name: "memory"
    audit.service.request.timeout.ms: "30000"

2. Интеграция с компонентом LOGA продукта Platform V Monitor#

Настройка интеграции компонента EVPT с компонентом LOGA продукта Platform V Monitor производится в файле vars.yml, блок настроек:

  logback_kafka_appender: # Блок настроек журналирования
    enable: false # Включение механизма отправки логов в Kafka через logback
    topic: evpt_topic # Топик для отправки логов
    never_block: true # Блокировка работы приложения при недоступности Kafka (по умолчанию - блокируется, при true недоставленные сообщения в kafka отбрасываются)
    discarding_threshold: 20 # Процент свободного места в очереди отправки сообщений, при достижении которого будут удаляться сообщения уровня TRACE, DEBUG, INFO
    queue_size: 512 # Размер очереди для отправки в Кафку
    retries: 3 # Количество переиницилизации продюсера, если параметр не задан. Значение по умолчанию: 3
    interval: 1000 # Интервал между переиницилизациями. Значение по умолчанию: 1000 мс. Задается в мс.
    multiplier: 1 # Множитель интервала переинициализации, по умолчанию значение 1.
    producer_configs: # Настройка Kafka продюсера
      bootstrap.servers: kafka-host-1:9093,kafka-host-2:9093 # bootstrap подключения к Apache Kafka вида host:port,host2:port2
      security.protocol: SSL # Тип протокола подключения. Значение по умолчанию: SSL
      ssl.keystore.location: /opt/scheduler/ssl/scheduler.jks # путь до хранилища сертификатов, для подключения к Kafka
      ssl.keystore.password: _PLACEHOLDER_ # пароль от keystore
      ssl.truststore.location: /opt/scheduler/ssl/scheduler.jks # путь до truststore
      ssl.truststore.password: _PLACEHOLDER_ # пароль от truststore
      ssl.endpoint.identification.algorithm: "" # Обязательный параметр. Значение не изменять. Отключение проверки хостнейма в сертификате, обязательно для стендов Kafka

3. Получение значений параметров ansible из HashiCorp Vault#

Также возможно реализовать получение значений параметров ansible из HashiCorp Vault. Для этого при указании параметров в файле vars.yml вместо значений параметров используется специальный синтаксис. Например:

ansible_password: "{{ lookup('hashi_vault', 'url=*** namespace=*** auth_method=approle role_id=*** secret_id=*** secret=*** validate_certs=0') }}"

, где:

  • url – URL для подключения к HashiCorp Vault. Например: https://my.vault.address;

  • namespace – используемый namespace;

  • auth_method – метод аутентификации. Например: approle;

  • role_id – используемый role.id;

  • secret_id – используемый secret.id;

  • secret – путь: ключ для получаемого секрета. Например: kv1/company/secret_keys:jks_password;

  • validate_certs – проверка доверия сертификата HashiCorp Vault.

Параметры подключения и аутентификации запрашиваются у администраторов HashiCorp Vault.

В результате значение переменной ansible_password будет получено из HashiCorp Vault при запуске установки.

4. Интеграция с компонентом EDMN (Mayak) продукта Platform V Synapse Event-domain management#

Настройка интеграции компонента EVPT с компонентом EDMN (Mayak) продукта Platform V Synapse Event-domain management производится в файле конфигурации batch.conf. В блоке batch необходимо указать следующие настройки:

Параметр

Описание

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

metrics.jmx.enabled

Включение метрик

true

metrics.jmx.domain

Корневой пакет для метрик

ru.sbt.ss.batch

metrics.jmx.step

Интервал для агрегирующих функций

1m

metrics.prometheus.enabled

Включение метрик

false

metrics.prometheus.histogramFlavor

Тип формата гистограмм

Prometheus

metrics.prometheus.step

Интервал для агрегирующих функций

1m

Подготовка базы данных для работы с хранением окон агрегации для EVPT#

Предусловия#

  1. Предварительно необходимо заполнить параметры в конфигурационном файле vars.yml в блоке db. Ознакомиться с примером можно в разделе Подготовка окружения EVPT на ВМ, подраздел «Пример заполненного файла vars.yml для EVPT».

  2. При ручной настройке базы данных необходимо:

  • разархивировать архив ./EVPT-dbinit-[version]-distrib.zip в папку files;

  • перенести библиотеку encryptor-cli-2.4.0-fatjar.jar из директории ./package/bh в корень директории Ansible.

Ручной способ с помощью Ansible#

Запустите настройку базы данных командой в терминале из папки Ansible:

ansible-playbook -i inventories/<ID>/inventory <PLAYBOOK>.yml --ask-vault-pass

где:

  • ID — имя недавно созданного inventory;

  • PLAYBOOK — playbook для настройки базы дынных: db.yml.

При помощи Jenkins#

Для настройки базы данных с помощью Jenkins используйте задание Jenkins db_action с выбором playbook db.yml без указания тегов. Процесс создания задания Jenkins db_action приведен в разделе Подготовка окружения EVPT на ВМ, подраздел «Создание Jenkins Job db_action».

Настраиваемые параметры:

  • job_config_renew — перенастройка задания Jenkins. Данный параметр используется, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path;

  • inventory — имя inventory для установки;

  • nexusUrl — полный путь до дистрибутива (можно указать несколько через запятую);

  • db_action — выбор действия, которое необходимо выполнить: update;

  • jenkins_slave — выбор jenkins slave;

  • jdk_tool — указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;

  • ansible_branch — используется для работы с несколькими ветками скриптов развертывания. Работает только при значении Branch Specifier (blank for „any“) равным ${ansible_branch};

  • ansible_version — указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;

  • nexus_user_cred — ID credential типа username with password для выкачивания дистрибутива компонента из Nexus. Чтобы получить username и password для Nexus из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsCredID |SecManPath:SecManKeys|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID c реквизитами для подключения к SecMan;

    • SecManPath — путь к секретам в SecMan;

    • SecManKeys — имена полей для username и password в SecMan (через запятую);

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|». Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/nexus:username,password|engineVersion:2

  • vault_cred — ID credential типа secret file со строкой для расшифровки паролей ansible vault (можно указывать несколько через запятую). Чтобы получить ansible vault password из SecMan, необходимо заполнить параметр secman_url в формате: JenkinsСredID|SecManPath:SecManKey|SecManParams, где:

    • JenkinsСredID — Jenkins Vault App Role Credential ID с реквизитами для подключения к SecMan;

    • SecManPath — путь к секрету в SecMan;

    • SecManKey — имя поля для ansible vault password в SecMan;

    • SecManParams — параметры для подключения к SecMan (через точку с запятой). Если данные параметры по умолчанию, то пропускаются вместе с «|» (в качестве пароля можно использовать не строку, а файл в base64 формате и секрет в SecMan с именем, оканчивающимся на «Base640», например: myVaultBase64). Примеры:

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password

      • SecManAppRoleCred|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password|engineVersion:2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2

      • SecManAppRoleCred1|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password1|engineVersion:2,SecManAppRoleCred2|/CI01994970_CI02618129_ES/A/DEV/APP/JEN/KV/vault:ansible_vault_password2|engineVersion:2

  • secman_url — URL для подключения к HashiCorp Vault;

  • ssl_verify — проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;

  • second_hand_approve — подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска Jenkins Job без подтверждения со стороны другого администратора;

  • inventories_repo — репозиторий с inventory (ssh://);

  • inventories_branch — ветка репозитория;

  • inventories_path — путь до inventories от корня репозитория.