Обработка логов Yandex Cloud Logging
Yandex Cloud Logging — это сервис, который позволяет читать и записывать логи сервисов Yandex Cloud и пользовательских приложений.
Логи можно отправить в поток Yandex Data Streams и далее обработать в реальном времени с помощью Yandex Query. Обработанные данные можно:
- отправить в Yandex Monitoring для построения графиков и алертинга;
- записать в поток Data Streams и далее отправить на обработку в Yandex Cloud Functions;
- записать в поток Data Streams и далее передать в Yandex Data Transfer для отправки в различные системы хранения.
В этом сценарии вы отправите логи Cloud Logging в поток Data Streams, а затем выполните к ним запрос с помощью Query. В результате выполнения запроса вы получите количество сообщений по каждому хосту, сгруппированное по интервалам продолжительностью 10 секунд.
Для выполнения сценария:
- Создайте поток данных Data Streams.
- Создайте лог-группу Cloud Logging.
- Запустите отправку данных в лог-группу.
- Подключите Query к потоку данных.
- Выполните запрос к данным.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Установите интерфейс командной строки Yandex Cloud.
Создайте поток данных Data Streams
Создайте поток данных c именем cloud-logging-stream
.
Создайте лог-группу Cloud Logging
Создайте лог-группу c именем cloud-logging-group
. При задании параметров лог-группы укажите созданный на предыдущем шаге поток данных cloud-logging-stream
.
Запустите отправку данных в лог-группу
Чтобы запустить отправку данных в лог-группу, выполните следующую команду:
while true; do yc logging write \
--group-name=cloud-logging-group \
--message="test_message" \
--timestamp="1s ago" \
--level=INFO \
--json-payload='{"request_id": "1234", "host":"test_host"}' \
--folder-id b1kmrhakmf8a********; \
sleep 1; \
done
--group-name
— название лог-группы, в которую отправляются сообщения;--message
— текст сообщения;--json_payload
— дополнительные данные сообщения в формате JSON;--folder-id
— идентификатор каталога, в котором создана лог-группа.
Примечание
Флаги --group-name
, --message
, --json-payload
можно опустить и указать только значения параметров. Например: cloud-logging-group "test_message" '{"request_id": "1234", "host":"test_host"}'
.
Подключите Query к потоку данных
- Создайте соединение с именем
cloud-logging-connection
и типомData Streams
. - На странице создания привязки:
- Выберите Автоматически заполнить настройки для Cloud Logging.
- Введите имя привязки
cloud-logging-binding
. - Укажите поток данных
cloud-logging-stream
. - Задайте формат
json-list
.
- Нажмите кнопку Создать.
Выполните запрос к данным
В редакторе запросов в интерфейсе Query выполните следующий запрос:
$cloud_logging_data =
SELECT
CAST(JSON_VALUE(data, "$.timestamp") AS Timestamp) AS `timestamp`,
JSON_VALUE(data, "$.jsonPayload.host") AS host
FROM bindings.`cloud-logging-binding`;
SELECT
host,
COUNT(*) AS message_count,
HOP_END() AS `timestamp`
FROM $cloud_logging_data
GROUP BY
HOP(`timestamp`, "PT10S", "PT10S", "PT10S"),
host
LIMIT 2;
Результат:
# | host | message_count | timestamp |
---|---|---|---|
1 | "test_host" | 3 | 2023-05-09T10:34:00.000000Z |
2 | "test_host" | 4 | 2023-05-09T10:34:10.000000Z |
Примечание
Данные из потокового источника передаются в виде бесконечного потока. Чтобы остановить обработку и получить результат в консоли, данные в примере ограничены с помощь оператора LIMIT
, который задает количество строк результата.