Структурированное логирование

Отправляйте структурированные логи в StatusRadar через OTLP.

Обзор

OTLP-логи обеспечивают:

  • Структурированные поля (JSON)
  • Уровни важности (severity)
  • Корреляцию с трейсами
  • Точность временных меток
  • Богатые возможности поиска

Базовое логирование

Node.js

const { logs } = require('@opentelemetry/api-logs');
const logger = logs.getLogger('my-service');

logger.emit({
  severityText: 'INFO',
  body: 'User logged in',
  attributes: {
    'user.id': '12345',
    'user.email': '[email protected]',
    'login.method': 'password'
  }
});

Python

from opentelemetry._logs import get_logger

logger = get_logger(__name__)

logger.emit(
    severity_text='INFO',
    body='User logged in',
    attributes={
        'user.id': '12345',
        'user.email': '[email protected]',
        'login.method': 'password'
    }
)

Уровни важности

  • TRACE — детальная отладка
  • DEBUG — информация для разработки
  • INFO — штатные операции
  • WARN — предупреждения
  • ERROR — события ошибок
  • FATAL — критические сбои

Корреляция с трейсами

Связывайте логи с трейсами:

const { trace, context } = require('@opentelemetry/api');

const span = tracer.startSpan('process_payment');
const spanContext = span.spanContext();

logger.emit({
  body: 'Payment processed',
  attributes: {
    'trace_id': spanContext.traceId,
    'span_id': spanContext.spanId
  }
});

Поиск и фильтрация

Dashboard → Observability → Apps → Logs

Синтаксис поиска:

level:ERROR
user.id:12345
message:"payment failed"
timestamp:[2024-01-01 TO 2024-01-31]

Лучшие практики

✅ Используйте структурированные атрибуты вместо подстановки строк ✅ Включайте trace/span ID для корреляции ✅ Добавляйте пользовательский контекст ✅ Используйте подходящие уровни важности

❌ Не логируйте чувствительные данные (пароли, токены) ❌ Не логируйте высокочастотные события (используйте метрики) ❌ Не включайте крупные payload-ы

Дальнейшие шаги