0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Урок

Структурированное журналирование и распределённая трассировка

Сделайте развёртывания наблюдаемыми с помощью структурированных журналов, идентификаторов корреляции и распределённой трассировки, чтобы отлаживать сбои между службами в конвейере CI/CD

«Структурированное журналирование и распределённая трассировка» — бесплатный урок CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CI/CD with GitHub Actions & DevOps Pipelines, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 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) и разблокировать остальной курс CI/CD with GitHub Actions & DevOps Pipelines, подпишись на CoddyKit PRO. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.

Чему я научусь в уроке «Структурированное журналирование и распределённая трассировка»?

Сделайте развёртывания наблюдаемыми с помощью структурированных журналов, идентификаторов корреляции и распределённой трассировки, чтобы отлаживать сбои между службами в конвейере CI/CD Ты практикуешь CI/CD with GitHub Actions & DevOps Pipelines с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать CI/CD with GitHub Actions & DevOps Pipelines?

Предыдущий опыт не требуется. CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Структурированное журналирование и распределённая трассировка»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке CI/CD with GitHub Actions & DevOps Pipelines?

Да. Каждый урок CI/CD with GitHub Actions & DevOps Pipelines включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Стратегии мониторинга конвейеров
  2. Интеграция с внешними сервисами
  3. Настройка уведомлений и оповещений
  4. Структурированное журналирование и распределённая трассировка
← Назад к CI/CD with GitHub Actions & DevOps Pipelines