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.
Бесплатный онлайн-инструмент — проверка HTTP-заголовков: результат мгновенно, без регистрации.
// 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
}Наблюдаемость (Observability) — это способность системы предоставлять информацию о её внутреннем состоянии, что позволяет эффективно выявлять и устранять проблемы. Три основных столпа наблюдаемости: логирование, мониторинг и трейсинг. Каждый из этих компонентов играет ключевую роль в обеспечении производительности и надежности приложений, позволяя разработчикам и операторам быстро реагировать на инциденты и оптимизировать работу систем.
Логирование — это процесс записи событий, происходящих в системе. Это важный аспект наблюдаемости, так как логи предоставляют детальную информацию о работе приложения и могут помочь в диагностике проблем. Чтобы эффективно использовать логирование, необходимо следовать нескольким рекомендациям:
{ "timestamp": "2023-10-01T12:00:00Z", "level": "ERROR", "message": "Ошибка подключения к базе данных", "userId": "12345" }.Пример команды для отправки логов в Elasticsearch с помощью Logstash:
input { stdin { } } output { elasticsearch { hosts => ["http://localhost:9200"] } }Эта команда позволяет отправлять логи, вводимые в стандартный поток, в Elasticsearch для дальнейшего анализа.
Мониторинг — это процесс отслеживания состояния системы и ее компонентов в реальном времени. Это позволяет быстро реагировать на возможные сбои и поддерживать высокую доступность. Основные аспекты мониторинга включают:
Трейсинг, в свою очередь, позволяет отслеживать путь запросов через различные компоненты системы. Это особенно полезно для распределенных приложений, где запрос может проходить через множество сервисов. Инструменты, такие как 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 для дальнейшего анализа. Внедрение всех трех столпов наблюдаемости — логирования, мониторинга и трейса — позволит вам значительно повысить надежность и производительность ваших приложений.
Monitoring = alerts на предetermined conditions. Observability = ad-hoc investigation через exploration. Overlap большой, но observability deeper.
Минимум: metrics + logs. Traces — когда есть microservices/distributed. В monolith начинаем с first two.
Small team: Datadog (SaaS, all-in-one) или Grafana Cloud (cheaper). Self-host: Prometheus + Loki + Tempo + Grafana (LGTM).
Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.