Формат логов
Общие принципы
Формат — JSON-log per line (JSONL)
Каждое событие = один JSON-объект в одной строке (без переносов). Внутренние переносы должны экранироваться (
\\n).Поля должны быть совместимы с OpenTelemetry semantic conventions
Временная метка — UTC, ISO-8601 с миллисекундами (2025-09-09T12:34:56.789Z)
Уровень логирования — дублируется в
levelиseverity_number(OTel)Сообщение — всегда строка (
message→Body)
JSON-формат
{
"timestamp": "2025-09-09T12:34:56.789Z",
"level": "error",
"severity_number": 17,
"service.name": "billing-api",
"deployment.environment": "prod",
"host.name": "win-app-01",
"process.pid": 1234,
"thread.name": "9",
"message": "Payment processing failed",
"exception.type": "AggregateException",
"exception.message": "One or more errors occurred",
"exception.stacktrace": "...",
"http.method": "POST",
"http.url": "/api/payments",
"http.status_code": 500,
"http.response_time_ms": 350,
"user.id": "u-12345",
"client.address": "192.168.1.25",
"trace_id": "abc123abc123abc123abc123abc123ab",
"span_id": "def456def456def4",
"tags": ["billing", "retry", "external:bank", "timeout"]
}Для наглядности JSON представлен в виде pretty print. В хранилище событие хранится в виде одной строки.
Теги
tags: string[], максимум 8 тегов^[a-z0-9][a-z0-9:_\-]{1,31}$Только категории, без PII и уникальных значений
Общий словарь:
billing,auth,timeout,external:bankи т.п.
Минимальный набор полей
Специфика источников
.NET/IIS → Serilog/NLog JSON sink с маппингом на OTel
Nginx →
log_format json+ Fluent Bit/OTel Collector parserWindows Event Log → Fluent Bit input winlog → нормализация к OTel-полям
Kubernetes stdout/stderr → kubelet JSON → Collector добавляет
service.name,k8s.pod.name,k8s.namespace.name
Для ClickStack
timestamp →
Timestampmessage →
Bodylevel →
SeverityTextseverity_number →
SeverityNumber(1–24)service.name, deployment.environment, host.name, k8s.*, trace_id, span_id → отдельные колонки
Остальное →
AttributesJSON-колонка
Пример события
JSON Schema (адаптированная)
timestamp— ISO 8601level— enum (trace…fatal)severity_number— integer (1–24)service.name,deployment.environment,host.name— обязательныеtrace_id/span_id— hex (32/16)message— обязательное текстовое полеДопустимы
http.*,exception.*,k8s.*,tags
Последнее обновление