Данные маршрутизации
Существует несколько вариантов использования разделения входящих записей на разные потоки, например, для разделения данных, не относящихся к производству, или предоставления группам возможности безопасно форматировать только записи тех приложений и служб, которыми они владеют.
В этом руководстве показано, как направлять логи нескольких производственных служб в выделенные конвейеры.
Для кого это?
Эта статья предназначена для администраторов, управляющих потоками данных.
Определите состояние
Вы можете использовать блокноты для определения необходимого количества маршрутов и условий их соответствия. Для определения условий предоставления важных для производства услуг.
1. Извлекайте логи всех служб, имеющих отношение к продукту, и суммируйте записи по атрибуту.
При извлечении логов через DQL в Notebooks вы получаете обзор обнаруженных атрибутов, которые можно использовать для сужения результатов, например, k8s.deployment.name.
Следующий запрос DQL извлекает логи с пространством имен Kubernetes prod и суммирует результаты по имени развертывания.
| fetch logs
| filter k8s.namespace.name == "prod" | summarize by:{k8s.deployment.name}, count() |
2. Определите пары «ключ-значение», которые идентифицируют важные службы.
Пары «ключ-значение» будут использоваться в качестве условий сопоставления. Данное руководство посвящено четырём сервисам, которые идентифицируются следующими парами «ключ-значение»:
k8s.deployment.name == "checkoutservice-*"k8s.deployment.name == "currencyservice-*"k8s.deployment.name == "emailservice-*"k8s.deployment.name == "paymentservice-*"
Вы определили, сколько маршрутов вам нужно (4) и условия их соответствия (например, k8s.deployment.name == "checkoutservice-*).
Создайте пайплайны
- Перейдите в Настройки > Обработка и контекстуализация > OpenPipeline > Логи > Конвейеры.
- Создайте конвейер для каждой службы.
- Выберите + Конвейер и введите название конвейера, например, для службы checkoutservice
Checkout service pipeline. - Выберите Сохранить .
- Выберите + Конвейер и введите название конвейера, например, для службы checkoutservice
Вы создали пустой конвейер для каждой службы.
Записи маршрута в выделенный пайплайн
Создайте маршрут для каждого конвейера.
- Перейдите в Настройки > Обработка и контекстуализация > OpenPipeline : > Логи > Конвейеры > Динамический маршрут.
- Определите условие маршрутизации с помощью
- Название
- Условие соответствия
- Целевой конвейер В следующей таблице приведены примеры условий на основе пространства имен Kubernetes и развертывания для маршрутизации логов каждой службы в соответствующий конвейер.
| Название | Условие соответствия | Целевой конвейер |
|---|---|---|
| Checkout service | k8s.deployment.name == "checkoutservice-*"
|
Checkout service pipeline |
| Currency service | k8s.deployment.name == "currencyservice-*"
|
Currency service pipeline |
| Email service | k8s.deployment.name == "emailservice-*"
|
Email service pipeline |
| Payment service | k8s.deployment.name == "paymentservice-*"
|
Payment service pipeline |
Логи, соответствующие условиям маршрутизации, направляются в целевой конвейер. Таблица маршрутизации теперь включает новые маршруты.
Заключение
Вы направили строки логов для каждой значимой для продукта службы в выделенный пустой конвейер.
Сообщите командам, что они могут изменять содержимое конвейера и создавать правила обработки для своих сервисов. После того, как логи будут загружены и направлены в один из созданных конвейеров, они будут обработаны в соответствии с заданными правилами.
Строки логов, относящиеся к продукту и не соответствующие ни одному из новых заданных условий, продолжают направляться по маршруту по умолчанию в классический конвейер. Определите новые условия, чтобы направить их в другой конвейер.
Чтобы изменить способ обработки логов, можно изменить условие сопоставления, чтобы исключить или включить другие строки логов, направить строки логов на другой конвейер обработки или изменить целевое хранилище. Например, можно создать новый конвейер, чтобы пропустить хранилище с помощью процесса Без назначения хранилища и направить все логи, не относящиеся к производству, которые соответствуют условию isNotNull(k8s.namespace.name) and k8s.namespace.name != "prod".