Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Практические руководства
  • Веб-сервис
    • Все руководства
    • Статический сайт в Object Storage
    • Сайт на LAMP- или LEMP-стеке
    • Отказоустойчивый сайт с балансировкой нагрузки через Network Load Balancer
    • Отказоустойчивый сайт с балансировкой нагрузки через Application Load Balancer
    • Сайт на базе Joomla с БД PostgreSQL
    • Сайт на WordPress
    • Сайт на WordPress с БД MySQL
    • Перенос WordPress сайта с хостинга в Yandex Cloud
    • Веб-сайт на базе 1С-Битрикс
    • Организация виртуального хостинга
    • Создание балансировщика с защитой от DDoS
    • Публикация обновлений для игр
    • Интеграция L7-балансировщика с Cloud CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Терминирование TLS-соединений
  • Интернет-магазины
    • Все руководства
    • Интернет-магазин на 1С-Битрикс
    • Интернет-магазин на Opencart
  • Архив данных
    • Все руководства
    • Однонодовый файловый сервер
    • Настройка SFTP-сервера на Centos 7
    • Резервное копирование в Object Storage через Acronis
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Распознавание архива изображений в Yandex Vision
  • Тестовая среда
    • Все руководства
    • Тестирование приложений с помощью GitLab
    • Создание тестовых ВМ через GitLab CI
    • Высокопроизводительные вычисления на прерываемых виртуальных машинах
    • Эмуляция множества IoT-устройств
    • Нагрузочное тестирование gRPC-сервиса
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
    • HTTPS-тест с постоянной нагрузкой с помощью Phantom
    • HTTPS-тест со ступенчатой нагрузкой с помощью Pandora
    • Нагрузочное тестирование с нескольких агентов
  • Управление инфраструктурой
    • Все руководства
    • Начало работы с Terraform
    • Загрузка состояний Terraform в Object Storage
    • Начало работы с Packer
    • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
    • Автоматизация сборки образов ВМ с помощью Jenkins
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Создание кластера Linux-серверов «1С:Предприятия» с кластером Managed Service for PostgreSQL
    • Миграция в Yandex Cloud с помощью Hystax Acura
    • Защита от сбоев с помощью Hystax Acura
    • Настройка синхронизации времени NTP
    • Работа с группой ВМ с автоматическим масштабированием
    • Автомасштабирование группы ВМ по расписанию
    • Автомасштабирование группы ВМ для обработки сообщений из очереди
    • Обновление группы ВМ под нагрузкой
    • Передача логов с ВМ в Yandex Cloud Logging
    • Резервное копирование ВМ с помощью Hystax Acura Backup
    • Настройка отказоустойчивой архитектуры в Yandex Cloud
    • Создание SAP-программы в Yandex Cloud
    • Настройка локального кеширующего DNS-резолвера
    • Миграция DNS-зон из Яндекс 360
    • Интеграция с корпоративным сервисом DNS
    • Создание веб-хука резолвера ACME для ответов на DNS01-проверки
    • Запись логов балансировщика в PostgreSQL
    • Создание триггера для бюджетов, который вызывает функцию для остановки ВМ
  • Построение Data Platform
    • Все руководства
    • Миграция базы данных из стороннего кластера Apache Kafka® в Yandex Managed Service for Apache Kafka®
    • Поставка данных из Yandex Managed Service for MySQL в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for Apache Kafka® в Yandex Managed Service for ClickHouse с помощью Yandex Data Transfer
    • Перенос данных между кластерами Yandex Managed Service for Apache Kafka® с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for Apache Kafka® в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Поставка данных из Yandex Managed Service for MySQL в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for Apache Kafka® с помощью Debezium
    • Настройка Kafka Connect для работы с кластером Yandex Managed Service for Apache Kafka®
    • Управление схемами данных в Yandex Managed Service for Apache Kafka®
    • Использование Managed Schema Registry с Yandex Managed Service for Apache Kafka®
    • Использование Confluent Schema Registry с Yandex Managed Service for Apache Kafka®
    • Миграция базы данных из MySQL в ClickHouse с помощью Yandex Data Transfer
    • Асинхронная репликация данных из PostgreSQL в ClickHouse
    • Обмен данными между Yandex Managed Service for ClickHouse и Yandex Data Proc
    • Настройка Yandex Managed Service for ClickHouse для Graphite
    • Получение данных из Yandex Managed Service for Apache Kafka® в Yandex Managed Service for ClickHouse
    • Получение данных из RabbitMQ в Yandex Managed Service for ClickHouse
    • Сохранение потока данных Yandex Data Streams в Yandex Managed Service for ClickHouse
    • Использование гибридного хранилища в Yandex Managed Service for ClickHouse
    • Шардирование таблиц Yandex Managed Service for ClickHouse
    • Настройка Yandex Cloud DNS для доступа к кластерам управляемых баз данных из других облачных сетей
    • Настройка Yandex Cloud DNS для доступа к кластеру Yandex Managed Service for ClickHouse из других облачных сетей
    • Импорт данных из Yandex Managed Service for MySQL в Yandex Data Proc с помощью Sqoop
    • Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Proc с помощью Sqoop
    • Использование скриптов инициализации для настройки GeeseFS в Yandex Data Proc
    • Миграция данных из стороннего кластера Elasticsearch в Yandex Managed Service for Elasticsearch с помощью Reindex API
    • Миграция коллекций из стороннего кластера MongoDB в Yandex Managed Service for MongoDB
    • Миграция данных в Yandex Managed Service for MongoDB
    • Шардирование коллекций MongoDB
    • Анализ производительности и оптимизация MongoDB
    • Миграция базы данных из стороннего кластера MySQL в кластер Yandex Managed Service for MySQL
    • Анализ производительности и оптимизация Managed Service for MySQL
    • Синхронизация данных из стороннего кластера MySQL в Yandex Managed Service for MySQL с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL в сторонний кластер MySQL
    • Миграция базы данных из Yandex Managed Service for MySQL в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL в Yandex Object Storage с помощью Yandex Data Transfer
    • Создание кластера PostgreSQL для 1С
    • Анализ производительности и оптимизация Managed Service for PostgreSQL
    • Миграция базы данных из стороннего кластера PostgreSQL в кластер Yandex Managed Service for PostgreSQL
    • Миграция базы данных из Managed Service for PostgreSQL
    • Поставка данных из Yandex Managed Service for PostgreSQL в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for PostgreSQL в Yandex Object Storage
    • Миграция базы данных из Greenplum® в ClickHouse
    • Миграция базы данных из Greenplum® в PostgreSQL
    • Миграция базы данных из стороннего кластера Redis в Yandex Managed Service for Redis
    • Использование кластера Managed Service for Redis в качестве хранилища сессий PHP
  • Продукты Microsoft в Yandex Cloud
    • Все руководства
    • Развертывание Active Directory
    • Развертывание Microsoft Exchange
    • Развертывание Remote Desktop Services
    • Развертывание группы доступности Always On с внутренним сетевым балансировщиком
    • Развертывание Remote Desktop Gateway
  • Сетевая инфраструктура
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Настройки DHCP для работы с корпоративным DNS-сервером
    • Маршрутизация с помощью NAT-инстанса
    • Создание туннеля IPSec VPN
    • Установка виртуального роутера Cisco CSR 1000v
    • Установка виртуального роутера Mikrotik CHR
    • Соединение с облачной сетью при помощи OpenVPN
    • Создание и настройка шлюза UserGate в режиме прокси-сервера
    • Создание и настройка шлюза UserGate в режиме межсетевого экрана
    • Настройка сети для Yandex Data Proc
  • Визуализация и анализ данных
    • Все руководства
    • Визуализация данных из CSV-файла
    • Создание и публикация диаграммы с картой Москвы из CSV-файла
    • Анализ продаж сети магазинов из БД ClickHouse
    • Анализ открытых данных ДТП на дорогах России
    • Анализ продаж и локаций пиццерий на данных из БД ClickHouse и Marketplace
    • Веб-аналитика с подключением к Яндекс Метрике
    • Веб-аналитика с расчетом воронок и когорт на данных Яндекс Метрики
    • Аналитика мобильного приложения на данных AppMetrica
    • Анализ статистики подкастов Яндекс Музыки (для авторов подкастов)
    • Визуализация данных с помощью SQL-чарта
    • Анализ customer journey мобильного приложения на данных AppMetrica
    • Анализ логов Object Storage при помощи DataLens
  • Интернет вещей
    • Руководства по работе с интернетом вещей
    • Мониторинг состояния географически распределенных устройств
    • Мониторинг показаний датчиков и уведомления о событиях
  • Бессерверные технологии
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Разработка навыка Алисы и сайта с авторизацией
  1. Управление инфраструктурой
  2. Запись логов балансировщика в PostgreSQL

Запись логов балансировщика в PostgreSQL

Статья создана
Yandex Cloud
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
  • Создайте облачную сеть
  • Создайте группы безопасности
  • Подготовьте базу данных в Yandex Managed Service for PostgreSQL
    • Создайте кластер
    • Подключитесь к кластеру и создайте таблицу
  • Создайте группу ВМ
  • Создайте необходимые ресурсы в Yandex Application Load Balancer
    • Создайте группу бэкендов
    • Создайте и настройте HTTP-роутер
    • Создайте L7-балансировщик
  • Получите идентификатор лог-группы для балансировщика
  • Создайте необходимые ресурсы в Yandex Cloud Functions
    • Создайте функцию для обработки данных
    • Создайте триггер
  • Проверьте работу балансировщика и запись логов
  • Как удалить созданные ресурсы

Сценарий описывает запись логов — сообщений с информацией о каждом входящем запросе к балансировщику Yandex Application Load Balancer — в базу данных PostgreSQL.

Для логирования работы балансировщика автоматически создается лог-группа. Поставка логов из этой лог-группы в БД будет настроена в сценарии с помощью ресурсов сервиса Yandex Cloud Functions — триггера и вызываемой им функции.

БД будет создана в сценарии с помощью сервиса Yandex Managed Service for PostgreSQL.

Примечание

Некоторые шаги сценария нельзя выполнить в консоли управления. Получить идентификатор лог-группы и создать триггер с этим идентификатором можно только через интерфейс командной строки (CLI) или API.

Чтобы настроить запись логов:

  1. Подготовьте облако к работе.
  2. Создайте облачную сеть.
  3. Создайте группы безопасности.
  4. Подготовьте базу данных в Yandex Managed Service for PostgreSQL.
  5. Создайте группу ВМ.
  6. Создайте необходимые ресурсы в Yandex Application Load Balancer.
  7. Получите идентификатор лог-группы для балансировщика.
  8. Создайте необходимые ресурсы в Yandex Cloud Functions.
  9. Проверьте запись логов.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работе

Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
  2. На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсы

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

  • плата за постоянно запущенные виртуальные машины (см. тарифы Yandex Compute Cloud);
  • плата за вычислительные ресурсы, объем хранилища и резервных копий для кластера PostgreSQL (см. тарифы Yandex Managed Service for PostgreSQL);
  • плата за вызовы функции для обработки логов и вычислительные ресурсы, выделенные на выполнение функции (см. тарифы Yandex Cloud Functions).

Создайте облачную сеть

Все ресурсы, созданные в сценарии, будут относиться к одной облачной сети.

Чтобы создать сеть:

Консоль управления
  1. В консоли управления выберите сервис Virtual Private Cloud.
  2. Нажмите кнопку Создать сеть.
  3. Укажите Имя сети: alb-logging-network.
  4. В поле Дополнительно выберите опцию Создать подсети.
  5. Нажмите кнопку Создать сеть.

Создайте группы безопасности

Примечание

Группы безопасности находятся на стадии Preview. Если они недоступны в вашей сети, для ресурсов будет разрешен весь входящий и исходящий трафик и дополнительной настройки не требуется.

Группы безопасности содержат правила, которые:

  • разрешают балансировщику получать входящий трафик и отправлять его на ВМ, а ВМ — получать этот трафик;
  • разрешают балансировщику отправлять логи в лог-группу, а кластеру PostgreSQL — получать логи из нее.

В сценарии будут созданы три группы безопасности: для балансировщика, для всех ВМ и для кластера.

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

Консоль управления
  1. В консоли управления выберите сервис Virtual Private Cloud.

  2. Откройте вкладку Группы безопасности.

  3. Создайте группу безопасности для балансировщика:

    1. Нажмите кнопку Создать группу.

    2. Укажите Имя группы: alb-logging-sg-balancer.

    3. Выберите Сеть alb-logging-network.

    4. В блоке Правила создайте следующие правила по инструкции под таблицей:

      Направление
      трафика
      Описание Диапазон
      портов
      Протокол Тип источника /
      назначения
      Источник /
      назначение
      Исходящий any Весь Любой CIDR 0.0.0.0/0
      Входящий ext-http 80 TCP CIDR 0.0.0.0/0
      Входящий ext-https 443 TCP CIDR 0.0.0.0/0
      Входящий healthchecks 30080 TCP Проверки состояния балансировщика —
      1. Выберите вкладку Исходящий трафик или Входящий трафик.

      2. Нажмите кнопку Добавить правило.

      3. В открывшемся окне в поле Диапазон портов укажите один порт или диапазон портов, куда или откуда будет поступать трафик.

      4. В поле Протокол укажите нужный протокол или оставьте Любой, чтобы разрешить передачу трафика по всем протоколам.

      5. В поле Назначение или Источник выберите назначение правила:

        • CIDR — правило будет применено к диапазону IP-адресов. В поле CIDR блоки укажите CIDR и маски подсетей, в которые или из которых будет поступать трафик. Чтобы добавить несколько CIDR, нажимайте кнопку Добавить CIDR.
        • Группа безопасности — правило будет применено к ВМ из текущей группы или из выбранной группы безопасности.
        • Проверки состояния балансировщика — правило, которое позволяет балансировщику проверять состояние ВМ.
      6. Нажмите кнопку Сохранить. Таким образом создайте все правила из таблицы.

    5. Нажмите кнопку Сохранить.

  4. Аналогично создайте группу безопасности для ВМ с именем alb-logging-sg-vms, той же сетью alb-logging-network и следующими правилами:

    Направление
    трафика
    Описание Диапазон
    портов
    Протокол Тип источника Источник
    Входящий balancer 80 TCP Группа безопасности alb-logging-sg-balancer
    Входящий ssh 22 TCP CIDR 0.0.0.0/0
  5. Аналогично создайте группу безопасности для кластера PostgreSQL с именем alb-logging-sg-cluster, той же сетью alb-logging-network и следующим правилом:

    Направление
    трафика
    Описание Диапазон
    портов
    Протокол Тип источника Источник
    Входящий db 6432 TCP CIDR 0.0.0.0/0

Подготовьте базу данных в Yandex Managed Service for PostgreSQL

Создайте кластер

Логи, полученные от балансировщика, будут записываться в базу данных, которая входит в состав кластера Managed Service for PostgreSQL.

Чтобы создать кластер и базу данных:

Консоль управления
  1. В консоли управления выберите сервис Managed Service for PostgreSQL.

  2. Нажмите кнопку Создать кластер.

  3. В поле Имя кластера введите alb-logging-cluster.

  4. В поле Окружение выберите PRODUCTION.

  5. В поле Версия выберите 12.

  6. В блоке Класс хоста:

    • Укажите платформу Intel Cascade Lake.
    • Выберите тип burstable.
    • Укажите класс b2.nano.

    Важно

    Класс b2.nano был выбран только в рамках тестирования. В реальных проектах использовать хосты с гарантированной долей vCPU ниже 100% не рекомендуется.

  7. В блоке Размер хранилища:

    • Выберите network-ssd.
    • Укажите размер равным 10 ГБ.

    Примечание

    Тип и размер диска следует выбирать в соответствии с решаемыми задачами. Значения, указанные выше, используются для тестирования.

  8. В блоке База данных укажите атрибуты БД:

    • Имя базы данных. Имя БД должно быть уникальным в рамках каталога и содержать только латинские буквы, цифры и подчеркивания.
    • Имя пользователя — владельца БД. Имя пользователя должно содержать только латинские буквы, цифры и подчеркивания.
    • Пароль пользователя. Длина — от 8 до 128 символов.

    Для базы данных, которая создается вместе с кластером, устанавливаются настройки набора символов (кодировки) LC_CTYPE=C и LC_COLLATE=C. После создания эти настройки изменить нельзя, но вы можете создать новую базу с нужными настройками.

  9. В блоке Сетевые настройки:

    • Выберите сеть alb-logging-network.
    • Выберите группу безопасности alb-logging-sg-cluster.
  10. В блоке Хосты добавьте хост, который будет доступен извне Yandex Cloud. Для этого включите опцию Публичный доступ.

  11. В блоке Дополнительные настройки включите опции Доступ из консоли управления и Доступ из Serverless.

  12. Остальные поля оставьте заполненными по умолчанию.

  13. Нажмите кнопку Создать кластер.

Подробнее о создании кластера — в разделе Как создать кластер PostgreSQL.

В дальнейшем настройки кластера можно будет изменить.

Подключитесь к кластеру и создайте таблицу

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

  • type — протокол запроса: HTTP или gRPC.
  • time — дата и время запроса.
  • http_status — HTTP-код ответа балансировщика на запрос.
  • backend_ip — IP-адрес ВМ, обработавшей запрос.
  • request_processing_times.request_time — длительность соединения между клиентом и балансировщиком.

Таблицу для записи нужно создать заранее:

Консоль управления

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

  1. Дождитесь, когда статус кластера alb-logging-cluster изменится на Alive, и выберите этот кластер.

  2. Перейдите на вкладку SQL.

  3. Выберите пользователя, созданного вместе с кластером, и введите его пароль.

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

  5. В окне редактирования введите следующий запрос:

    CREATE TABLE load_balancer_requests (
        type            varchar(24) NOT NULL,
        "time"          timestamptz NOT NULL,
        http_status     varchar(4) NOT NULL,
        backend_ip      varchar(40) NULL,
        request_time    numeric NULL
    );
    
  6. Нажмите кнопку Выполнить.

  7. Дождитесь появления надписи о завершении выполнения запроса.

Создайте группу ВМ

В качестве веб-серверов для сайта будет выступать группа виртуальных машин Compute Cloud. В этом сценарии серверы будут реализованы на LEMP-стеке (Linux, nginx, MySQL, PHP; подробнее см. в сценарии использования Веб-сайт на LAMP- или LEMP-стеке).

Чтобы создать группу ВМ:

Консоль управления
  1. В консоли управления выберите сервис Compute Cloud.

  2. Откройте вкладку Группы виртуальных машин. Нажмите кнопку Создать группу.

  3. Укажите имя группы ВМ: alb-logging-ig.

  4. В блоке Распределение выберите несколько зон доступности, чтобы обеспечить отказоустойчивость хостинга.

  5. В блоке Шаблон виртуальной машины нажмите кнопку Задать.

  6. В блоке Выбор образа/загрузочного диска откройте вкладку Cloud Marketplace и нажмите кнопку Посмотреть больше. Выберите продукт LEMP и нажмите кнопку Использовать.

  7. В блоке Вычислительные ресурсы:

    • Выберите платформу виртуальной машины.
    • Укажите необходимое количество vCPU и объем RAM.

    Для функционального тестирования сайта хватит минимальной конфигурации:

    • Платформа — Intel Cascade Lake.
    • Гарантированная доля vCPU — 5%.
    • vCPU — 2.
    • RAM — 1 ГБ.
  8. В блоке Сетевые настройки выберите Сеть alb-logging-network, созданную ранее, и ее подсети.

  9. В поле Публичный адрес выберите Автоматически.

  10. Выберите группу безопасности alb-logging-sg-vms, созданную ранее.

  11. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.

    • В поле SSH-ключ вставьте содержимое файла открытого ключа.

      Пару ключей для подключения по SSH необходимо создать самостоятельно, см. раздел о подключении к виртуальным машинам по SSH.

    Внимание

    IP-адрес и имя хоста (FQDN) для подключения к машине назначатся ей при создании. Если вы выбрали вариант Без адреса в поле Публичный адрес, вы не сможете обращаться к ВМ из интернета.

  12. Нажмите кнопку Сохранить.

  13. В блоке Масштабирование укажите Размер группы ВМ — 2.

  14. В блоке Интеграция с Application Load Balancer выберите опцию Создать целевую группу и укажите имя группы — alb-logging-tg. Подробнее о целевых группах.

  15. Нажмите кнопку Создать.

Создание группы ВМ может занять несколько минут. После создания группа перейдет в статус RUNNING, а все ВМ в ней — в статус RUNNING_ACTUAL.

ig-running

Создайте необходимые ресурсы в Yandex Application Load Balancer

Создайте группу бэкендов

Целевую группу, созданную вместе с группой ВМ, нужно привязать к группе бэкендов с настройками распределения трафика.

Для бэкендов в группе будет создана проверка состояния: балансировщик будет периодически отправлять проверочные запросы к ВМ и ожидать ответа в течение определенного периода.

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

Консоль управления
  1. В консоли управления выберите сервис Application Load Balancer.
  2. Откройте вкладку Группы бэкендов. Нажмите кнопку Создать группу бэкендов.
  3. Укажите Имя группы бэкендов: alb-logging-bg.
  4. В блоке Бэкенды нажмите кнопку Добавить.
  5. Укажите Имя бэкенда: alb-logging-backend.
  6. В поле Целевая группа выберите группу alb-logging-tg.
  7. Укажите Порт, на котором ВМ бэкенда будут принимать входящий трафик от балансировщика: 80.
  8. Нажмите кнопку Добавить проверку состояния.
  9. Укажите Порт, на котором ВМ бэкенда будут принимать проверочные соединения: 80.
  10. Укажите Путь, к которому будет обращаться балансировщик при проверке состояния: /.
  11. Нажмите кнопку Создать.

Создайте и настройте HTTP-роутер

Группу бэкендов нужно привязать к HTTP-роутеру с правилами маршрутизации HTTP-запросов.

Чтобы создать HTTP-роутер:

Консоль управления
  1. В консоли управления выберите сервис Application Load Balancer.
  2. Откройте вкладку HTTP-роутеры. Нажмите кнопку Создать HTTP-роутер.
  3. Укажите Имя HTTP-роутера: alb-logging-router.
  4. Нажмите кнопку Добавить виртуальный хост.
  5. Укажите Имя виртуального хоста: alb-logging-host.
  6. Нажмите кнопку Добавить маршрут.
  7. Укажите Имя маршрута: alb-logging-route.
  8. В поле Группа бэкендов выберите группу alb-logging-bg.
  9. Нажмите кнопку Создать.

Создайте L7-балансировщик

Чтобы создать балансировщик:

Консоль управления
  1. В консоли управления выберите сервис Application Load Balancer.
  2. Нажмите кнопку Создать L7-балансировщик.
  3. Укажите Имя балансировщика: alb-logging-balancer.
  4. В блоке Сетевые настройки выберите сеть alb-logging-network и группу безопасности alb-logging-sg-balancer, созданные ранее.
  5. В блоке Обработчики нажмите кнопку Добавить обработчик.
  6. Укажите Имя обработчика: alb-logging-listener.
  7. В поле Протокол выберите пункт HTTP.
  8. В поле HTTP-роутер выберите роутер alb-logging-router, созданный ранее.
  9. Нажмите кнопку Создать.

Получите идентификатор лог-группы для балансировщика

Примечание

Этот шаг нельзя выполнить в консоли управления.

Вместе с балансировщиком создается лог-группа, в которую записываются логи. Идентификатор лог-группы нужно будет использовать при создании триггера в Cloud Functions.

Чтобы получить идентификатор лог-группы:

CLI
API

Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.

Выполните команду:

yc alb load-balancer get alb-logging-balancer | grep log_group_id

Используйте вызов gRPC API LoadBalancerService/Get или метод REST API get. Идентификатор лог-группы будет указан в поле log_group_id.

Создайте необходимые ресурсы в Yandex Cloud Functions

Создайте функцию для обработки данных

Функция будет получать сообщения из лог-группы и записывать их в таблицу, созданную ранее.

Чтобы создать функцию:

Консоль управления
  1. В консоли управления выберите сервис Cloud Functions.

  2. Нажмите кнопку Создать функцию.

  3. Введите имя функции: alb-logging-function.

  4. Нажмите кнопку Создать. После создания функции вы автоматически будете перенаправлены на страницу Редактор.

  5. Выберите среду выполнения Python и нажмите кнопку Продолжить.

  6. Очистите область редактирования файла и вставьте в нее следующий код:

    Код функции
    import os
    import logging
    import psycopg2
    import json
    
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    verboseLogging = eval(os.environ['VERBOSE_LOG'])
    if verboseLogging:
        logger.info('Loading handler function')
    
    def handler(event, context):
        statusCode = 500
        
        if verboseLogging:
            logger.info(event)
            logger.info(context)
        
        connection_string = (
            "host='{db_hostname}' port='{db_port}' dbname='{db_name}' "
            "user='{db_user}' password='{db_password}' sslmode='require'"
        ).format(
            db_hostname=os.environ['DB_HOSTNAME'],
            db_port=os.environ['DB_PORT'],
            db_name=os.environ['DB_NAME'],
            db_user=os.environ['DB_USER'],
            db_password=os.environ['DB_PASSWORD']
        )
            
        if verboseLogging:
            logger.info(f'Connecting: {connection_string}')
    
        conn = psycopg2.connect(connection_string)
        cursor = conn.cursor()
    
        messages = event['messages'][0]['details']['messages']
    
        for message in messages:
            alb_message = json.loads(message['message'])
            alb_message['table_name'] = 'load_balancer_requests'
            insert_statement = (
                'INSERT INTO {table_name} ' 
                '(type, "time", http_status, backend_ip, request_time) ' 
                'VALUES(\'{type}\', timestamptz \'{time}\', \'{http_status}\', ' 
                '\'{backend_ip}\', {request_processing_times[request_time]});'
            ).format(**alb_message)
    
            if verboseLogging:     
                logger.info(f'Exec: {insert_statement}')
            try:
                cursor.execute(insert_statement)
                statusCode = 200
            except Exception as error:
                logger.error(error)
            
            conn.commit()
            
        cursor.close()
        conn.close()
    
        return {
            'statusCode': statusCode,
            'headers': {
                'Content-Type': 'text/plain'
            }
        }
    
  7. Задайте следующие параметры версии:

    • Таймаут, с: 10.
    • Память: 128 МБ.
  8. Создайте сервисный аккаунт:

    1. Нажмите кнопку Создать аккаунт (или Создать новый). Откроется дополнительное окно.
    2. В поле Имя введите alb-logging-function-service-account.
    3. Добавьте роли: serverless.functions.invoker и editor.
    4. Нажмите кнопку Создать.

    Созданный аккаунт автоматически добавится в поле Сервисный аккаунт. От имени этого аккаунта функция будет записывать данные в БД.

  9. Добавьте переменные окружения:

    • VERBOSE_LOG — параметр, отвечающий за вывод подробной информации о выполнении функции. Введите значение True.
    • DB_HOSTNAME — имя хоста БД PostgreSQL для подключения.
    • DB_PORT — порт для подключения.
    • DB_NAME — имя базы данных для подключения.
    • DB_USER — имя пользователя для подключения.
    • DB_PASSWORD — пароль, который был введен при создании кластера.

    Чтобы определить значения параметров для подключения:

    1. В консоли управления выберите сервис Managed Service for PostgreSQL.
    2. Выберите кластер alb-logging-cluster.
    3. Нажмите значок в строке с нужной БД.
    4. Выберите пункт Подключиться.
    5. На вкладке Shell найдите пример строки подключения.
    6. Перенесите значения переменных host, port, dbname и user в соответствующее поле Значение переменных окружения функции.
  10. В правом верхнем углу нажмите кнопку Создать версию.

Создайте триггер

Триггер будет принимать копии сообщений от балансировщика и передавать их в функцию для обработки.

Примечание

Application Load Balancer использует лог-группу специального типа. Перед созданием триггера запросите в технической поддержке возможность создавать триггеры для таких лог-групп. Триггер можно создать только с помощью CLI или API.

Чтобы создать триггер:

CLI
API

Выполните команду:

yc serverless trigger create cloud-logs alb-logging-trigger \
  --log-groups <идентификатор лог-группы> \
  --invoke-function-name alb-logging-function \
  --invoke-function-service-account-name alb-logging-function-service-account \
  --batch-size 10 \
  --batch-cutoff 15s

Где:

  • --log-groups — идентификатор лог-группы для балансировщика, полученный ранее.
  • --invoke-function-name — имя функции, созданной ранее.
  • --invoke-function-service-account-name — имя сервисного аккаунта, созданного вместе с функцией.
  • --batch-size — максимальное количество сообщений, одновременно отправляемых в функцию.
  • --batch-cutoff — максимальное время между последовательными отправками сообщений в функцию.

Подробнее о команде см. в справочнике CLI.

Используйте вызов gRPC API TriggerService/Create или метод REST API create.

Проверьте работу балансировщика и запись логов

  1. Получите публичный IP-адрес балансировщика:

    Консоль управления
    1. В консоли управления выберите сервис Application Load Balancer.
    2. Найдите в списке балансировщик alb-logging-balancer и скопируйте его IP-адрес.
  2. Откройте в браузере сайт http://<IP-адрес балансировщика>. Перезагрузите страницу несколько раз.

  3. Проверьте, что в логах появилась информация о ваших запросах к балансировщику:

    Консоль управления
    1. В консоли управления выберите сервис Managed Service for PostgreSQL.
    2. Выберите кластер alb-logging-cluster.
    3. Перейдите на вкладку SQL.
    4. Выберите пользователя, созданного вместе с кластером, и введите его пароль.
    5. Выберите базу данных, созданную вместе с кластером, и нажмите кнопку Подключиться.
    6. Нажмите на таблицу load_balancer_requests. Вы должны увидеть первые строки этой таблицы, соответствующие вашим запросам к балансировщику.

Как удалить созданные ресурсы

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

  1. Удалите нетарифицируемые ресурсы, которые блокируют удаление тарифицируемых ресурсов:

    1. Удалите L7-балансировщик alb-logging-balancer.
    2. Удалите HTTP-роутер alb-logging-router.
    3. Удалите группу бэкендов alb-logging-bg.
  2. Удалите группу виртуальных машин alb-logging-ig.

  3. Удалите триггер alb-logging-trigger.

  4. Удалите функцию alb-logging-function.

  5. Удалите кластер alb-logging-cluster.

Была ли статья полезна?

Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
В этой статье:
  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте облачную сеть
  • Создайте группы безопасности
  • Подготовьте базу данных в Yandex Managed Service for PostgreSQL
  • Создайте кластер
  • Подключитесь к кластеру и создайте таблицу
  • Создайте группу ВМ
  • Создайте необходимые ресурсы в Yandex Application Load Balancer
  • Создайте группу бэкендов
  • Создайте и настройте HTTP-роутер
  • Создайте L7-балансировщик
  • Получите идентификатор лог-группы для балансировщика
  • Создайте необходимые ресурсы в Yandex Cloud Functions
  • Создайте функцию для обработки данных
  • Создайте триггер
  • Проверьте работу балансировщика и запись логов
  • Как удалить созданные ресурсы