В данной статье описано автоматическое развертывание системы хранения и обработки данных LogIQ с помощью плейбуков Ansible.
Подготовка серверов
Настройка SSH-подключения
OpenSSH должен быть настроен на стандартный 22 порт.
Для настройки SSH-подключения необходимо выполнить следующие действия:
Шаг 1. Если для развертывания LogIQ имеется потребность в использовании непривилегированного пользователя, отличного от root, то необходимо создать целевого SSH-пользователя на всех control- и managed-серверах, если этого не было сделано ранее. Для этого на всех control- и managed-серверах выполните следующие команды:
Шаг 2. Если целевой пользователь на control- и managed-серверах является непривилегированным, отличным от root, то на каждом из них необходимо добавить пользователя в sudo с отключением ввода пароля:
echo '<целевой_ssh_пользователь> ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers
Шаг 3. На control-сервере выполните генерацию SSH-ключей под целевым пользователем, под которым будет запускаться развертывание LogIQ:
su - <целевой_ssh_пользователь>
ssh-keygen -t rsa
Шаг 4. Скопируйте публичный SSH-ключ с control-сервера на каждый managed-сервер под целевым SSH-пользователем:
Для оффлайн-развертывания Системы необходимо загрузить на control-сервер оффлайн-версию LogIQ и затем распаковать ее. Для этого выполните следующие действия:
Шаг 1. Подключите USB-накопитель к устройству, с которого имеется доступ по SSH на control-сервер и загрузите оффлайн-сборку на него:
Конфигурация LogIQ описывается в конфигурационном файле, представляющем собой Ansible Inventory-файл.
В каталоге ./ansible/inventories/presets хранятся пресеты для различных конфигураций LogIQ, которые можно использовать как есть (за исключением пресетов, в которых необходимо задать параметры хостов) для развертывания LogIQ или для клонирования одного из пресетов с последующей перенастройкой LogIQ под специфические условия и окружение:
AIO-docker-offline.yml — All-in-One-конфигурация для оффлайн-развертывания LogIQ через Docker Compose локально на одном сервере. В качестве control- и managed- выступает один и тот же сервер;
AIO-helm-offline.yml — All-in-One конфигурация для оффлайн-развертывания LogIQ через Helm Chart в кластере K8s;
AIO-localhost-offline.yml — All-in-One-конфигурация для оффлайн-развертывания LogIQ локально на одном сервере. В качестве control и managed выступает один и тот же сервер/
Путь к конфигурационному файлу LogIQ можно указать через флаг -f </conf/path>. Если параметр не указан, то по умолчанию используется путь /etc/logiq/config.yml.
Рекомендуется использовать путь по умолчанию /etc/logiq/config.yml для хранения конфигурации LogIQ на control-сервере, чтобы исключить риск перетирания конфигурационного файла при обновлении каталога со сборкой LogIQ.
Процесс подготовки конфигурационного файла
Для того, чтобы подготовить конфигурационный файл, выполните на control-сервере следующую команду находясь в каталоге сборки LogIQ:
Ниже приведен пример структуры конфигурационного файла LogIQ и значение параметров:
# Определение целевых хостов для LogIQ. По умолчанию определяется только локальный хост `logiq-control`.
hosts: []
# Примеры:
#
# - name: "<имя_целевого_хоста>"
# address: "<IP-адрес|FQDN_целевого_хоста_или_переменная_ansible>"
# connection: "<local|ssh|docker>" # Опциональный параметр с указанием типа подключения ansible на целевые хосты. Если не указать, то будет использоваться значение 'ssh'.
# user: "<ssh_username>" # Обязательный параметр с указанием имени SSH-пользователя, если `connection: "ssh"`. Альтернатива параметру: задать переменную `ansible_user` в секции `variables_overrides` для всех хостов.
#
# - name: "logiq-control"
# address: "127.0.0.1"
# connection: "local"
# - name: "logiq-storage-01"
# address: "10.10.10.10"
# connection: "ssh"
# user: "root"
# Переопределение целевых хостов для конкретных компонентов LogIQ. По умолчанию для всех компонентов используется локальный хост `logiq-control`.
# Список доступных компонентов: clickhouse, postgres, s3, apigw, cadvisor, aptly, registry, vault, portainer, mpsiem_rabbitmq, venus, earth, saturn, mercury, prometheus, grafana, openldap, mailhog
targets_overrides: {}
#
# Пример:
#
# <наименование компонента>:
# hosts:
# - <значение параметра `name` целевого хоста из секции `hosts`>
#
# clickhouse:
# hosts:
# - example-logiq-storage-01
# - example-logiq-storage-02
# Переопределение переменных с параметрами развертывания LogIQ и его компонентов.
# Перечень доступных переменных можно посмотреть в /usr/share/logiq/ansible/inventories/defaults.yml.
variables_overrides:
deployment_type: "docker-compose" # Обязательный параметр с указанием типа развертывания. Возможные значения: docker-compose, helm
offline_mode: "true"
init_aptly: "true"
use_repo_aptly: "true"
logiq_taxonomy: "mpsiem" #В данном параметре можно выбрать формат регистрации событий. Возможные значения: mpsiem, json.
Для того, чтобы выбрать формат записи событий, необходимо установить его значение для параметра logiq_taxonomy в конфигурационном файле. Для отображения в формате MPSIEM установите значение "mpsiem" (значение по умолчанию), для формата JSON — "json".
Вы можете изменить формат записи событий после развертывания системы, следуя инструкции, но в таком случае все записанные события и пользовательские настройки системы будут удалены.
Запуск процесса подготовки хостов к развертыванию LogIQ
Данный подготовительный шаг необходимо выполнять только для Docker_compose-развертывания.
Для того, чтобы запустить процесс подготовки хостов к развертыванию LogIQ, выполните на control-сервере следующую команду находясь в каталоге сборки LogIQ:
Справка об использовании скрипта развертывания LogIQ
logiq --help
Справка об использовании скрипта развертывания LogIQ
Команды:
prepare-host Подготовить хосты и окружение к развертыванию или обновлению LogIQ
Использование: logiq prepare-host [--ansible-tags <tag1,tag2,...>]
Опциональные параметры:
--ansible-tags <tag1,tag2,...> Указать теги для запуска определенных задач Ansible. Если параметр не указан, то по умолчанию указываются все доступные Ansible теги
Доступные Ansible теги:
security_disable,set_sysctl,init_aptly,os_packages_install,docker_install
deploy|uninstall Развернуть/обновить или удалить компоненты LogIQ
Использование: logiq <deploy|uninstall> --components <module1,module2|service1,service2...>
Обязательные параметры:
--components <module1,module2|service1,service2...> Список модулей и/или сервисов для развертывания
ansible Прямой вызов ansible, путь к инвентарю необходимо передать через -f </conf/path> или создать его по пути /etc/logiq/config.yml
Использование: logiq ansible <ansible commands and flags>
ansible-playbook Прямой вызов ansible-playbook, путь к инвентарю необходимо передать через -f </conf/path> или создать его по пути /etc/logiq/config.yml
Использование: logiq ansible-playbook <ansible-playbook commands and flags>
get-config Вывести текущую полную конфигурацию LogIQ
Использование: logiq get-config
get-example-conf Вывести пример конфигурационного файла LogIQ
Использование: logiq get-example-conf
Дополнительные флаги:
-f </conf/path> Путь к конфигурационному файлу LogIQ. Если параметр не указан, то по умолчанию используется /etc/logiq/config.yml
--ansible-opts '<--param1 --param2 -P3>' Дополнительные параметры Ansible, например, '-diff --check --list-tasks --limit'
-h|--help|help Вывести эту справку
-v|--version|version Вывести версию LogIQ
Список доступных модулей и сервисов LogIQ:
registry: registry
tools: portainer,vault
storage: clickhouse,s3,postgres,mpsiem_rabbitmq
external: openldap,mailhog
services: earth,apigw,mercury,saturn,venus,saturn-agent
monitoring: prometheus,grafana,cadvisor,saturn-metrics-exporter
Для выбора всех вышеперечисленных модулей укажите: all
Пример развертывания LogIQ с внешним слоем хранения
# Выполняем развертывание Docker Registry и tools (portainer, vault)
logiq deploy --components registry,tools
# Создаем файл export_hashi_vault_secrets.json с cекретами LogIQ с тестовыми значениями
cat <<EOF | sudo tee export_hashi_vault_secrets.json
{"clickhouse": {"CLICKHOUSE_DB": "logger", "CLICKHOUSE_PASSWORD": "testpass", "CLICKHOUSE_USER": "logger"}, "ldap": {"LDAP_ADMIN_USERNAME": "admin", "LDAP_PASSWORDS": "testpass1,testpass2", "LDAP_USERS": "user01,user02", "app_password": "testpass", "app_username": "cn=admin,dc=example,dc=org", "base_dn": "dc=example,dc=org", "bind_on": "ou=users,dc=example,dc=org"}, "mailer": {"from_address": "hello@example.com", "from_name": "LogIQ", "password": "null", "username": "null"}, "mpsiem_rabbitmq": {"password": "testpass", "username": "rabbitmq"}, "postgres": {"PATRONI_REPLICATION_PASSWORD": "testpass", "PATRONI_REPLICATION_USERNAME": "replicator", "PATRONI_RESTAPI_PASSWORD": "testpass", "PATRONI_RESTAPI_USERNAME": "admin", "PATRONI_SUPERUSER_PASSWORD": "testpass", "PATRONI_SUPERUSER_USERNAME": "postgres", "PATRONI_admin_PASSWORD": "testpass", "app_password": "testpass", "app_username": "logiq"}, "s3": {"AWS_ACCESS_KEY_ID": "logiq-key", "AWS_SECRET_ACCESS_KEY": "test-secret", "MINIO_ROOT_PASSWORD": "testpass", "MINIO_ROOT_USER": "logiq"}}
EOF
# Запускаем процесс импорта секретов в Hashicorp Vault из файла export_hashi_vault_secrets.json
logiq ansible-playbook ./ansible/playbooks/mgmt/import_hashi_vault_secrets.yml
# Заходим в веб-интерфейс Hishicorp Vault и актуализируем значения секретов (s3, postgres, clickhouse) на целевые значения
# http://<IP_адрес_или_FQDN_managed_сервера_vault>:8200
# Для того, чтобы получить Vault Root Token используйте команду
logiq ansible-playbook ./ansible/playbooks/mgmt/get_hashi_vault_token.yml
# После актуализации секретов на целевые значения выполняем экспорт всех секретов LogIQ из Hashicorp Vault и копируем их в надежное место для возможности быстрого восстановления в случае потери данных
logiq ansible-playbook ./ansible/playbooks/mgmt/export_hashi_vault_secrets.yml
cat export_hashi_vault_secrets.json
# Запускаем развертывание служб и мониторинга
logiq deploy --components services,monitoring
Если вы используете внешний ClickHouse и хотите использовать JSON-формат записи событий, необходимо в конфигурационном файле config_clickhouse_profile.xml (или его аналоге) активировать флаг работы с JSON: <enable_json_type>1</enable_json_type>.
FAQ
Что такое control-сервер?
Control-сервер — это хост, с которого вы запускаете `logiq` и инструменты Ansible CLI (ansible-playbook, ansible, ansible-vault и другие).
Вы можете использовать любой компьютер, который соответствует требованиям к программному обеспечению, в качестве control сервера: например, ноутбук с Ubuntu/Debian (или Windows с WSL2), виртуальную машину c Ubuntu/Debian. Вы также можете запускать Ansible в контейнерах, известных как Execution Environments
Что такое managed-серверы?
Managed-серверы — это целевые хосты, которыми вы собираетесь управлять с помощью Ansible и на которые планируется развертывание компонентов LogIQ.
Что означает параметр `--components` командах `logiq deploy` или `logiq uninstall`?
В обязательном параметре `--components` необходимо перечислить список модулей и/или сервисов LogIQ, которые планируется развернуть, например, `logiq deploy --components <список_сервисов_и/или_модулей>` или `logiq uninstall --components <список_сервисов_и/или_модулей>`. Подробнее описано в справке `logiq --help`.
Какие модули необходимо указать в параметре `--components` при запуске команд `logiq deploy --components <список_сервисов_и/или_модулей>` или `logiq uninstall --components <список_сервисов_и/или_модулей>`?
Прочитайте справку `logiq --help`.
Как указать нужные версии сервисов?
Просмотрите файл stand.env, в нем можно указать какие версии сервисов использовать при развертывании LogIQ.
Как изменить конфигурацию LogIQ при развертывании?
Конфигурация LogIQ описывается в конфигурационном файле, представляющем собой Ansible Inventory-файл. В каталоге presets хранятся пресеты для различных конфигураций LogIQ, которые можно использовать как есть для развертывания LogIQ или для клонирования одного из пресеты с последующей перенастройкой LogIQ под специфичные условия и окружение.
Как остановить работу служб?
Для остановки работы служб используйте следующую команду: