Настройка модуля Расширенной аналитики для работы через S3

Логи PostgreSQL можно отправлять в S3-совместимое объектное хранилище (например, MinIO). Это позволяет хранить большие объёмы логов централизованно, анализировать их и использовать для расширенной аналитики.

По умолчанию поддержка S3 отключена. Чтобы включить ее, разверните любой S3-совместимый сервер и передайте параметры подключения в контейнер бэкенда через переменные окружения.

Примечание

Для корректной работы модуля добавьте разрешение для advanced_analytics_user в файле pg_hba.conf:

host    all        advanced_analytics_user        <platform_ip> /<mask>          scram-sha-256

Переменные окружения для подключения к S3

В контейнер бэкенда в секцию environment сервиса backend необходимо добавить следующие переменные:

- PMA_SERVER_S3_USER=${S3_USER}
- PMA_SERVER_S3_PASSWORD=${S3_PASSWORD}
- PMA_SERVER_S3_ENDPOINT=${S3_ENDPOINT}
- PMA_SERVER_S3_TLS_INSECURE=${S3_TLS_INSECURE}
  • PMA_SERVER_S3_USER — Access Key — имя пользователя S3;

  • PMA_SERVER_S3_PASSWORD — Secret Key — пароль;

  • PMA_SERVER_S3_ENDPOINT — URL S3-сервера. Например, https://s3.example.com:9000;

  • PMA_SERVER_S3_TLS_INSECURE — если значение параметра true, будет отключена проверка SSL-сертификата (например, для самоподписанных сертификатов).

Включение поддержки S3

Чтобы включить поддержку S3, выполните следующие действия:

  1. Откройте файл docker-compose.yml и добавьте переменные окружения в секции environment сервиса backend:

    services:
        backend:
            # ... остальные настройки ...
        environment:
            # ... другие переменные ...
            - PMA_SERVER_S3_USER=${S3_USER}
            - PMA_SERVER_S3_PASSWORD=${S3_PASSWORD}
            - PMA_SERVER_S3_ENDPOINT=${S3_ENDPOINT}
            - PMA_SERVER_S3_TLS_INSECURE=${S3_TLS_INSECURE}
    
  2. В файле platform.env (или в другом env-файле, который вы используете) добавьте следующие строки:

    S3_USER=myaccesskey
    S3_PASSWORD=mysecretkey
    S3_ENDPOINT=https://домен.com:9000   # укажите реальный домен или IP
    S3_TLS_INSECURE=false
    

    Важно

    • Если вы используете самоподписанный сертификат или сертификат, выпущенный внутренним CA, которому не доверяет клиент, установите S3_TLS_INSECURE=true.

    • Не используйте localhost в S3_ENDPOINT, так как из контейнера бэкенда localhost будет указывать на сам контейнер, а не на хост. Указывайте реальный домен или IP-адрес машины, где работает S3.

    • Значение поля CN или Subject Alternative Names сертификата должно совпадать с доменом, указанным в S3_ENDPOINT. Иначе даже при TLS_INSECURE=true могут возникать ошибки, если клиент проверяет соответствие имени.

Развёртывание MinIO в качестве S3-сервера с использованием существующих SSL-сертификатов

MinIO для работы по HTTPS ожидает файлы с именами public.crt и private.key в директории, указанной через флаг --certs-dir. Если у вас уже есть SSL-сертификаты в папке ./nginx/ssl, необходимо создать символические ссылки на существующие файлы сертификата certificate.pem и приватного ключа key.pem и смонтировать папку с сертификатами в контейнер. Для этого выполните следующие действия:

  1. Подготовьте папки и символические ссылки:

    • создайте каталог для данных MinIO:

      mkdir -p ./minio/data
      
    • перейдите в папку с сертификатами и создайте символические ссылки:

      cd ./nginx/ssl
      ln -sf certificate.pem public.crt
      ln -sf key.pem private.key
      
    • после выполнения в папке ./nginx/ssl появятся две символические ссылки:

      • public.crt — указывает на certificate.pem;

      • private.key — указывает на key.pem.

  2. Добавьте следующий блок в раздел services файла docker-compose.yml:

    minio:
        image: minio/minio:latest
        container_name: minio
        command: server /data --console-address ":9001" --certs-dir /certs
        ports:
            - "9000:9000"   # S3 API (HTTPS)
            - "9001:9001"   # веб-консоль MinIO (HTTP)
        environment:
            MINIO_ROOT_USER: ${S3_USER}
            MINIO_ROOT_PASSWORD: ${S3_PASSWORD}
        volumes:
            - ./minio/data:/data               # постоянное хранилище объектов
            - ./nginx/ssl:/certs:ro            # монтируем папку с сертификатами (только чтение)
        restart: unless-stopped
    
    • command — запускает MinIO с папкой для данных /data, веб-консолью на порту 9001 и указывает директорию сертификатов /certs через флаг --certs-dir. MinIO автоматически найдёт файлы public.crt и private.key в этой папке и включит HTTPS.

    • ports — пробрасывает порты на хост:

      • 9000 для S3 API (будет доступен по HTTPS),

      • 9001 для веб-консоли (HTTP).

    • environment — использует те же переменные S3_USER и S3_PASSWORD, что и для бэкенда. Убедитесь, что они заданы в вашем env-файле.

    • volumes – монтирует локальную папку ./minio/data как /data внутри контейнера (для хранения объектов) и папку с сертификатами /certs.

Настройка ранее сконфигурированных узлов

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

  1. В браузере перейдите на страницу системных действий модуля Explain и убедитесь, что хост наблюдаемой базы присутствует в списке:

    https://<platform-domain>/syslog/dashboard
    
  2. В строке нужного хоста нажмите на кнопку cross для отключения анализатора логов.

  3. После обновления страницы в строке нужного хоста нажмите на кнопку check для включения анализатора логов.

  4. После обновления страницы в строке нужного хоста нажмите на кнопку edit. На открывшейся странице в строке «Доступ к логу» выберите S3 и проверьте заполненные данные.

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

  1. Убедитесь, что MinIO запустился и доступен по HTTPS:

    • в браузере перейдите по адресу https://ваш-домен.com:9001 (веб-консоль);

    • примите предупреждение о самоподписанном сертификате, если оно появится;

    • войдите с логином S3_USER и паролем S3_PASSWORD.

  2. В веб-консоли MinIO проверьте, создаётся ли бакет для логов. Если бакет не создался автоматически, создайте его вручную. Название бакета должно совпадать с тем, что ожидает приложение, например, pglogs.

  3. После этого логи PostgreSQL должны начать отправляться в S3. Зайдите в раздел «Расширенная аналитика» Платформы — вы должны увидеть данные, поступающие из хранилища. Также можно проверить наличие файлов логов в бакете через веб-консоль MinIO.

Если логи не появляются:

  • Проверьте переменные окружения внутри контейнера:

    docker exec <backend_container> env | grep PMA_SERVER_S3.
    
  • Проверьте ошибки подключения к S3 в логах бэкэнда.

Альтернативные S3-решения

Вы можете использовать другое S3-совместимое хранилище: AWS S3, DigitalOcean Spaces, Yandex Object Storage, Ceph и т.д. В этом случае необходимо только правильно указать эндпоинт и учётные данные, а также убедиться в доступности хранилища из сети, где работает бэкенд. Сертификаты для таких сервисов обычно валидны, поэтому для S3_TLS_INSECURE можно оставить значение false.

После выполнения всех шагов вы сможете полноценно использовать расширенную аналитику на основе логов PostgreSQL, хранящихся в S3.