Настройка модуля Расширенной аналитики для работы через 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, выполните следующие действия:
Откройте файл 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}В файле 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 и смонтировать папку с сертификатами в контейнер. Для этого выполните следующие действия:
Подготовьте папки и символические ссылки:
создайте каталог для данных 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.
Добавьте следующий блок в раздел
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-stoppedcommand — запускает 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 выполните следующие действия:
В браузере перейдите на страницу системных действий модуля Explain и убедитесь, что хост наблюдаемой базы присутствует в списке:
В строке нужного хоста нажмите на кнопку
для отключения анализатора логов.После обновления страницы в строке нужного хоста нажмите на кнопку
для включения анализатора логов.После обновления страницы в строке нужного хоста нажмите на кнопку
. На открывшейся странице в строке «Доступ к логу» выберите S3 и проверьте заполненные данные.
Проверка работоспособности
Убедитесь, что MinIO запустился и доступен по HTTPS:
в браузере перейдите по адресу https://ваш-домен.com:9001 (веб-консоль);
примите предупреждение о самоподписанном сертификате, если оно появится;
войдите с логином
S3_USERи паролемS3_PASSWORD.
В веб-консоли MinIO проверьте, создаётся ли бакет для логов. Если бакет не создался автоматически, создайте его вручную. Название бакета должно совпадать с тем, что ожидает приложение, например, pglogs.
После этого логи 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.