Skip to content
EN

Что такое Observability

Коротко:

Observability — способность понять internal state системы из её external outputs. Three pillars: **metrics** (numbers over time — CPU, QPS), **logs** (events — errors, audit trail), **traces** (request path через distributed services). Отличие от monitoring: monitoring = знание known unknowns (CPU high). Observability = exploring unknown unknowns (новая bug type).

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Metrics: Prometheus, Grafana, Datadog, New Relic. Aggregated, efficient
  • Logs: Loki, ELK stack, CloudWatch. Full-text, expensive at scale
  • Traces: Jaeger, Zipkin, Tempo. Per-request detailed flow
  • Correlation: trace_id линкует все 3 (standard через OpenTelemetry)
  • Cardinality explosion: high-cardinality labels (user_id) убивают Prometheus

Пример

// OpenTelemetry instrumented code
const tracer = trace.getTracer('my-app');
const span = tracer.startSpan('db-query');
try {
  await db.query('SELECT ...')
} finally {
  span.end();  // exports trace to Jaeger/Tempo
}

Смежные термины

TL;DR: Что такое наблюдаемость и её три столпа

Наблюдаемость (Observability) — это способность системы предоставлять информацию о её внутреннем состоянии, что позволяет эффективно выявлять и устранять проблемы. Три основных столпа наблюдаемости: логирование, мониторинг и трейсинг. Каждый из этих компонентов играет ключевую роль в обеспечении производительности и надежности приложений, позволяя разработчикам и операторам быстро реагировать на инциденты и оптимизировать работу систем.

Логирование: основы и лучшие практики

Логирование — это процесс записи событий, происходящих в системе. Это важный аспект наблюдаемости, так как логи предоставляют детальную информацию о работе приложения и могут помочь в диагностике проблем. Чтобы эффективно использовать логирование, необходимо следовать нескольким рекомендациям:

  • Структурированные логи: Используйте формат JSON для логов, чтобы упростить их парсинг и анализ. Например, лог записи может выглядеть так: { "timestamp": "2023-10-01T12:00:00Z", "level": "ERROR", "message": "Ошибка подключения к базе данных", "userId": "12345" }.
  • Уровни логирования: Разделяйте логи по уровням важности (DEBUG, INFO, WARN, ERROR). Это позволит фильтровать информацию в зависимости от нужд.
  • Централизованное логирование: Используйте инструменты, такие как ELK Stack (Elasticsearch, Logstash, Kibana), для централизованного сбора и анализа логов.

Пример команды для отправки логов в Elasticsearch с помощью Logstash:

input { stdin { } } output { elasticsearch { hosts => ["http://localhost:9200"] } }

Эта команда позволяет отправлять логи, вводимые в стандартный поток, в Elasticsearch для дальнейшего анализа.

Мониторинг и трейсинг: как обеспечить надежность системы

Мониторинг — это процесс отслеживания состояния системы и ее компонентов в реальном времени. Это позволяет быстро реагировать на возможные сбои и поддерживать высокую доступность. Основные аспекты мониторинга включают:

  • Метрики производительности: Собирайте данные о времени отклика, загрузке CPU, использовании памяти и других критически важных метриках.
  • Алерты: Настраивайте уведомления при достижении определенных пороговых значений. Например, если загрузка CPU превышает 80%, отправляйте уведомление в Slack или по электронной почте.

Трейсинг, в свою очередь, позволяет отслеживать путь запросов через различные компоненты системы. Это особенно полезно для распределенных приложений, где запрос может проходить через множество сервисов. Инструменты, такие как Jaeger или Zipkin, могут помочь в реализации трейса.

Пример конфигурации для Jaeger:

const { initTracer } = require('jaeger-client');
const config = {
  service: 'my-service',
  reporter: {
    logSpans: true,
    agentHost: 'localhost',
    agentPort: 6831,
  },
};
const tracer = initTracer(config, {});

С помощью этой конфигурации вы сможете отправлять данные о спанах в Jaeger для дальнейшего анализа. Внедрение всех трех столпов наблюдаемости — логирования, мониторинга и трейса — позволит вам значительно повысить надежность и производительность ваших приложений.

Больше по теме

Часто задаваемые вопросы

Observability vs Monitoring?

Monitoring = alerts на предetermined conditions. Observability = ad-hoc investigation через exploration. Overlap большой, но observability deeper.

Нужно ли все 3 pillars?

Минимум: metrics + logs. Traces — когда есть microservices/distributed. В monolith начинаем с first two.

Stack suggestions?

Small team: Datadog (SaaS, all-in-one) или Grafana Cloud (cheaper). Self-host: Prometheus + Loki + Tempo + Grafana (LGTM).

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.