Структурированное журналирование и распределённая трассировка
Сделайте развёртывания наблюдаемыми с помощью структурированных журналов, идентификаторов корреляции и распределённой трассировки, чтобы отлаживать сбои между службами в конвейере CI/CD
«Структурированное журналирование и распределённая трассировка» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Три столпа наблюдаемости
Наблюдаемость опирается на три столпа: метрики, журналы и трассировки.
- Метрики показывают, что что-то не так
- Журналы показывают, что произошло
- Трассировки показывают, где это произошло в потоке запроса
Мониторинг конвейера обычно начинается с метрик; на этом уроке вы подробнее изучите журналы и трассировки.
Почему важно структурированное журналирование
Строку журнала в обычном тексте трудно запрашивать. Структурированный журнал — это машиночитаемая запись, обычно в формате JSON, с именованными полями.
Инструменты вроде Loki, Elasticsearch и Datadog могут фильтровать и агрегировать структурированные журналы, а также создавать по ним оповещения.
Обычный и структурированный формат
Сравните неструктурированную строку со структурированной. Структурированная версия позволяет напрямую выполнять запрос по status=500.
// Unstructured
Deploy failed for service api at 12:01
// Structured (JSON)
{"level":"error","event":"deploy_failed","service":"api","status":500}Формирование журналов JSON
В большинстве языков есть средства структурированного журналирования. Основная идея — записывать объект, а не объединённую строку.
const log = (level, event, fields) =>
console.log(JSON.stringify({ level, event, ...fields }));
log('info', 'deploy_started', { service: 'api', version: '1.4.2' });Идентификаторы корреляции
Одно развёртывание затрагивает множество шагов и сервисов. ID корреляции (или ID трассировки) — это уникальное значение, добавляемое к каждой строке журнала одной логической операции.
Поиск по этому ID позволяет восстановить полную картину работы всех компонентов.
- name: Set correlation id
run: echo "TRACE_ID=$(uuidgen)" >> $GITHUB_ENVУровни журналирования
Используйте единообразные уровни журналирования, чтобы настраивать подробность журналов и оповещения:
debug— подробная диагностикаinfo— обычные событияwarn— проблемы, после которых можно продолжить работуerror— ошибки, требующие внимания
Настройте оповещения по error, применяйте выборку к info и отключайте debug в рабочей среде.
Что такое распределённая трассировка
Распределённая трассировка отслеживает запрос при его прохождении через несколько сервисов. Каждый этап — это span; несколько span объединяются в трассировку.
Трассировка показывает временную шкалу и то, какой span выполнялся медленно или завершился ошибкой, что особенно важно при развёртывании микросервисов.
OpenTelemetry
OpenTelemetry (OTel) — независимый от поставщика стандарт для создания трассировок, метрик и журналов.
Инструментируйте приложение с помощью SDK OpenTelemetry и экспортируйте данные в серверную систему, например Jaeger, Tempo или облачный APM.
import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('deploy-service');
const span = tracer.startSpan('deploy');
// ... do work
span.end();Трассировка самого конвейера
Можно отслеживать не только приложение, но и сам конвейер. Инструменты создают по одному span для каждого задания и шага, чтобы показать, какой этап CI/CD является узким местом.
Так длинный рабочий процесс превращается в наглядную временную диаграмму, показывающую, где расходуется время.
Централизованное агрегирование
Отправляйте журналы и трассировки каждого задания и сервиса на централизованную платформу. Исполнители среды непрерывной интеграции недолговечны, поэтому журналы, оставшиеся на исполнителе, исчезают после завершения запуска.
Пересылайте данные в хранилище журналов во время запуска, чтобы разбор инцидентов был возможен и после удаления исполнителя.
От сигнала к действию
Наблюдаемость полезна только тогда, когда приводит к действиям. Создавайте панели мониторинга, показывающие частоту ошибок и медленные трассировки, и подключайте важные закономерности к уже настроенным оповещениям.
Цель — по одному оповещению сразу перейти к трассировке и строке структурированного журнала, объясняющей причину.
Быстрая проверка
Проверьте, насколько хорошо вы понимаете журналы и трассировки.
Повторение
Вы углубили знания о наблюдаемости с помощью журналов и трассировок.
- Создавайте структурированные журналы (JSON) с единообразными уровнями
- Добавляйте идентификаторы корреляции, чтобы отслеживать одну операцию
- Используйте распределённую трассировку и OpenTelemetry для поиска медленных или завершающихся ошибкой span
- Агрегируйте всё централизованно до того, как временные исполнители исчезнут
Это дополняет метрики и оповещения, обеспечивая полную наблюдаемость конвейера.
Часто задаваемые вопросы
Урок «Структурированное журналирование и распределённая трассировка» бесплатный?
Да — полный текст урока «Структурированное журналирование и распределённая трассировка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Структурированное журналирование и распределённая трассировка»?
Сделайте развёртывания наблюдаемыми с помощью структурированных журналов, идентификаторов корреляции и распределённой трассировки, чтобы отлаживать сбои между службами в конвейере CI/CD Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Структурированное журналирование и распределённая трассировка»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Стратегии мониторинга конвейеров
- Интеграция с внешними сервисами
- Настройка уведомлений и оповещений
- Структурированное журналирование и распределённая трассировка