VictoriaLogs

При установке Визион.Сервер сервер VictoriaLogs развёртывается на одном узле. Такая конфигурация не требует дополнительных настроек, но не обеспечивает отказоустойчивости. При выходе узла из строя работа VictoriaLogs будет нарушена.

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

Визион может использовать для хранения логов внешний сервер VictoriaLogs. Подробнее в инструкции Смена сервера VictoriaLogs.

Развёртывание кластера выполняется с помощью плейбука Ansible. Далее узел, на котором запускается плейбук, называется управляющим (control node).

Доступ к мастеру кластера выполняется через виртуальный IP-адрес (Virtual IP Address, VIP). Для отслеживания состояния узлов кластера и автоматического переназначения VIP на узлах кластера развёртывается служба keepalived.

Для развёртывания кластера VictoriaLogs можно использовать те же узлы, что и для развёртывания кластера VictoriaMetrics. В этом случае одна и та же служба keepalived будет обслуживать оба кластера.

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

Отказоустойчивая конфигурация предъявляет свои требования к узлам кластера VictoriaLogs в дополнение к основным:

  • ОС ALT Linux c10f1 или ALT Linux c10f2.

  • Подключены актуальные репозитории пакетов.

  • Установлен пакет openssl с поддержкой TLS 1.3.

  • Настроена синхронизация времени.

  • Настроен доступ по SSH.

К управляющему узлу предъявляются те же требования, что и к узлам кластера, однако, допускается использование другой ОС, если выполнены следующие условия:

  • Версия Ansible не ниже 1.15.

  • Если используется авторизация по паролю, установлена утилита sshpass.

  • Доступны пакеты Python packaging и pycryptodome.

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

vlauth

Исполняемый файл: /usr/local/bin/vlauth-prod.

Файлы конфигурации и сертификаты: /opt/victorialogs-vlauth/.

Таблица 1. Порты vlauth
Локальный адрес Порт Протокол Описание Клиенты сервиса

0.0.0.0

9427

TCP/HTTPS

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

grafana

vision_core

vmalert

127.0.0.1

9426

TCP/HTTPS

Внутренний интерфейс для служебных эндпоинтов vlauth: health check, metrics, status.

 — 

vlselect

Исполняемый файл: /usr/local/bin/vlselect-prod.

Файлы конфигурации и сертификаты: /opt/victorialogs-vlselect/.

Таблица 2. Порты vlselect
Локальный адрес Порт Протокол Описание Клиенты сервиса

0.0.0.0

9471

TCP/HTTPS

Компонент для выполнения запросов к данным в vlstorage. Предоставляет API для чтения метрик, vmui интерфейс и служебные эндпоинты

vlauth (локальный и с других узлов)

vlinsert

Исполняемый файл: /usr/local/bin/vlinsert-prod.

Файлы конфигурации и сертификаты: /opt/victorialogs-vlinsert/.

Таблица 3. Порты vlinsert
Локальный адрес Порт Протокол Описание Клиенты сервиса

0.0.0.0

9481

TCP/HTTPS

Компонент для приёма и распределения метрик по узлам vlstorage. Предоставляет API для записи метрик и служебные эндпоинты

vlauth (локальный и с других узлов)

vlstorage

Исполняемый файл: /usr/local/bin/vlstorage-prod.

Файлы конфигурации и сертификаты: /opt/victorialogs-vlstorage/.

Таблица 4. Порты vlstorage
Локальный адрес Порт Протокол Описание Клиенты сервиса

0.0.0.0

9491

TCP/HTTPS

HTTP API для приёма данных от vlinsert, для запроса данных от vlselect и для управления и мониторинга vlstorage (health checks, metrics, snapshots, удаление данных)

vlinsert (локальный и с других узлов)

vlselect (локальный и с других узлов)

keepalived

Исполняемый файл: /usr/sbin/keepalived.

Файлы конфигурации и сертификаты: /etc/keepalived/.

Таблица 5. Порты keepalived
Локальный адрес Порт Протокол Описание Клиенты сервиса

 — 

 — 

VRRP

Управление VIP кластера. Использует multicast для обмена сообщениями между узлами keepalived

keepalived (на других узлах кластера)

Подготовка управляющего узла

Подготовьте управляющий узел к работе:

  1. Распакуйте архив с плейбуками и виртуальным окружением в произвольную директорию.

  2. Если управляющий узел работает под управлением ОС, отличающейся от ALT Linux c10f1 или ALT Linux c10f2, перейдите в директорию с коллекциями Ansible и установите их:

    cd collections/ && ansible-galaxy collection install . -v --force

Подготовка узлов кластера

Чтобы подготовить узлы кластера:

  1. Убедитесь, что время на всех трёх узлах синхронизировано.

  2. Убедитесь, что необходимые репозитории подключены и актуальны.

Установка

После подготовительных работ переходите к установке:

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

  2. Если управляющий узел работает под управлением ALT Linux c10f1 или ALT Linux c10f2, распакуйте и активируйте виртуальное окружение Python:

    source venv/activate_venv.sh
  3. В конфигурационном файле playbooks/inventory.yml укажите параметры подключения к узлам кластера.

    Используйте адреса сети, по которой узлы кластера будут взаимодействовать друг с другом.

  4. В конфигурационном файле playbooks/cluster-vip/group_vars/all/keepalived.yml укажите параметры развёртывания keepalived. Значения параметров зависят от того, на одних и тех же или на разных узлах развёртываются кластеры VictoriaLogs и VictoriaMetrics.

    • keepalived_virtual_router_id — одно и то же значение, если VictoriaLogs и VictoriaMetrics развёртываются на одних и тех же узлах, и уникальное значение для каждого кластера в противном случае.

    • keepalived_virtual_status_command

      VictoriaLogs и VictoriaMetrics на одних и тех же узлах
      "/bin/bash -c '/sbin/systemctl is-active --quiet vmauth.service && /sbin/systemctl is-active --quiet vlauth.service'"
      VictoriaLogs на отдельных узлах
      "/bin/bash -c '/sbin/systemctl is-active --quiet vlauth.service'"
  5. Если используется авторизация по паролю, установите пакет sshpass:

    apt-get update && apt-get install sshpass --yes
  6. Запустите развёртывание кластера VictoriaLogs:

    ansible-playbook \
       -i playbooks/inventory.yml \
       playbooks/cluster-vl/deploy.yml
  7. Если keepalived не развёрнут, запустите развёртывание:

    ansible-playbooks \
       -i playbooks/inventory.yml \
       playbooks/cluster-vip/deploy.yml

Секреты

В результате выполнения плейбуков в директории playbooks/tmp/secrets/ формируются файлы с конфиденциальными сведениями (секреты), необходимыми для работы кластера и подключения к ним внешних клиентов.

Не удаляйте секреты без необходимости!

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

  • CAVictoriaExternal.crt — корневой сертификат для внешних подключений к серверу.

  • <vip>_external_client.crt — сертификат для внешних подключений к серверу.

  • <vip>_external_client.key — ключ сертификата для внешних подключений к серверу.

  • <hostname>_vmauth_server.crt — сертификат для серверов vlauth и vmauth, обрабатывающих внешние подключения.

  • <hostname>_vmauth_server.key — ключ сертификата для серверов vlauthи vmauth, обрабатывающих внешние подключения.

  • CAVictoriaInternal.crt — корневой сертификат для внутренних подключений между компонентами кластера.

  • <hostname>_vmauth_client.crt — сертификат для подключения vlauth и vmauth в качестве клиентов.

  • <hostname>_vmauth_client.key — ключ сертификата для подключения vlauth и vmauth в качестве клиентов.

  • <hostname>_vinsert.crt — сертификат для подключения vlinsert в качестве клиента.

  • <hostname>_vinsert.key — ключ сертификата для подключения vlinsert в качестве клиента.

  • <hostname>_vselect.crt — сертификат для подключения vselect в качестве клиента.

  • <hostname>_vselect.key — ключ сертификата для подключения vselect в качестве клиента.

  • <hostname>_vstorage.crt — сертификат для подключения vstorage в качестве клиента.

  • <hostname>_vstorage.key — ключ сертификата для подключения vstorage в качестве клиента.

  • <vip>_global_basic_auth_password — пароль BasicAuth для внутренних подключений между компонентами кластера.

  • <vip>_keepalived_auth_password — пароль keepalived, используемый для авторизации между узлами.

  • <vip>_vmauth_external_user_password — пароль для внешних подключений vision_core и других компонентов Визион к vlauth и vmauth.

Проверка корректности

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

  • <ca_cert> — путь к корневому сертификату для внешних подключений, playbooks/cluster-vm/tmp/secrets/CAVictoriaExternal.crt.

  • <vip> — VIP, указанный в инвентори-файле.

  • <user> — имя пользователя vlauth. По умолчанию в VictoriaLogs создаётся пользователь vision.

  • <password> — пароль для доступа к vlauth. Используйте значение из файла playbooks/cluster-vm/tmp/secrets/vmauth_external_user_password.

  • <port> — порт для подключения. По умолчанию сервер VictoriaLogs слушает порт 9427.

Статусы служб и журналы работы

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

  1. Проверьте статусы служб:

    • vlauth.service;

    • vlinsert.service;

    • vlselect.service;

    • vlstorage.service;

    • keepalived.service.

  2. Чтобы убедиться в отсутствии ошибок в журналах работы компонентов кластера, следуйте инструкции.

Состояние хранилища

Запрос:

curl -v \
  --cacert <ca_cert> \
  -u <user>:<password> \
  "https://<vip>:<port>/-/healthy"

Ответ должен обладать следующими свойствами:

  • HTTP Status Code: 200 OK.

  • Body: VictoriaLogs is Healthy.

Запись лога в vlinsert через vlauth

Запрос:

curl -v -X POST \
  -H "Content-Type: application/stream+json" \
  --cacert <ca_cert> \
  -u <user>:<password> \
  --data-binary @- \
 "https://<vip>:<port>/insert/jsonline?_stream_fields=app_name&_time_field=date&_msg_field=log.message" <<EOF
{ "log": { "level": "info", "message": "hello world" }, "date": "0", "app_name": "test" }
{ "log": { "level": "error", "message": "oh no!" }, "date": "0", "app_name": "test" }
EOF

Ответ должен обладать следующими свойствами:

  • HTTP Status Code: 200 OK.

  • Body: отсутствует.

Чтение лога из vlselect через vlauth

Запрос:

curl -v \
  --cacert <ca_cert> \
  -u <user>:<password> \
  "https://<vip>:<port>/select/logsql/query?query=*"

Ответ должен обладать следующими свойствами:

  • HTTP Status Code: 200 OK.

  • Body: отсутствует или содержит корректный JSON с данными.

Доступ к интерфейсу VMUI через браузер

vlauth проксирует доступ к интерфейсу VMUI с помощью запросов, которые обрабатывает компонент vlselect. Для проверки его работоспособности перейдите по ссылке:

https://<user>:<password>@<vip>:<port>/vmui

Отсутствие ошибок получения данных указывает на корректность выполненных настроек.

Перемещение VIP

Перемещение VIP позволяет убедиться в корректности работы служб keepalived и vip-manager.

Перемещение при остановке keepalived

  1. Найдите узел с VIP:

    ip -br a
  2. Подключитесь к узлу с VIP и остановите службу keepalived:

    systemctl stop keepalived.service
  3. Убедитесь, что VIP переместился на другой узел.

  4. Повторяйте шаги 1—​3 до тех пор, пока VIP не будет перемещён на нужный узел.

  5. Запустите службу keepalived на всех узлах кластера:

    systemctl start keepalived.service

Перемещение при остановке vlauth

  1. Найдите узел с VIP:

    ip -br a
  2. Подключитесь к узлу с VIP и остановите службу vlauth:

    systemctl stop vlauth.service
  3. Убедитесь, что VIP переместился на другой узел.

  4. Повторяйте шаги 1—​3 до тех пор, пока служба vlauth не будет остановлена на всех узлах.

  5. Найдите узел без VIP:

    ip -br a
  6. Запустите сервис vlauth:

    systemctl start vlauth.service
  7. Убедитесь, что VIP перемещён на узел с работающей службой vlauth.

    На перемещение VIP может потребоваться несколько секунд.
  8. Запустите службу vlauth на всех остальных узлах кластера.