Skip to content

Instantly share code, notes, and snippets.

@zolotyh
Last active February 17, 2025 17:11
Show Gist options
  • Save zolotyh/6b29300eed784daad51eeb453a0d84f0 to your computer and use it in GitHub Desktop.
Save zolotyh/6b29300eed784daad51eeb453a0d84f0 to your computer and use it in GitHub Desktop.
OpenTelemetry и JavaScript. Делаем веб-приложения прозрачными и легко анализируемыми

OpenTelemetry и JavaScript. Делаем веб-приложения прозрачными и легко анализируемыми

1. Введение: Почему Observability — это не просто мода

  1. Эволюция мониторинга: от логирования к трассировке и метрикам.
  2. Проблемы современных распределенных систем: микросервисы, облака, сложность отладки.
  3. Почему Observability — это must-have, а не nice-to-have.
  4. Роль OpenTelemetry в экосистеме Observability.

2. Архитектура OpenTelemetry: как это работает под капотом

  • Детальный разбор компонентов OpenTelemetry:
    • Tracer: Как создаются и передаются трассировки.
    • Meter: Как собираются и агрегируются метрики.
    • Logger: Как интегрируются логи в Observability.
    • Baggage Как передать конекстные данные
  • Форматы данных: OTLP, W3C Trace Context, OpenMetrics.
  • Семплирование: зачем оно нужно и как его правильно настроить.
    • Типы сэмплирования и примеры
    • Head-based sampling
    • Rate-limiting sampling
    • Tail-based sampling
  • Экспортеры: Jaeger, Prometheus, Zipkin, и другие.
  • Почему не достаточно просто логов
  • Почему не достаточно просто метрик
    • В чем отличие от Premetheus (Pull vs Push)

3. Глубокая инструментация: Node.js

  • Как работает автоматическая инструментация в Node.js.
  • Ручная инструментация: когда и зачем она нужна.
  • Интеграция с фреймворками: Express, NestJS, Fastify.
  • Сбор метрик: использование API Meter.
  • Трассировка: создание spans, добавление атрибутов и событий.
  • Пример: инструментация GraphQL-запросов и запросов к базе данных.

4. Глубокая инструментация: браузер

  • Особенности инструментации в браузере: ограничения и возможности.
  • Сбор данных о производительности: Navigation Timing API, Resource Timing API.
  • Интеграция с фронтенд-фреймворками: React, Angular, Vue.
  • Трассировка пользовательских взаимодействий: клики, загрузка страниц, ошибки.
  • Пример: инструментация SPA (Single Page Application).

5. Интеграция с существующими системами мониторинга

  • Как интегрировать OpenTelemetry с Jaeger, Prometheus, Grafana и другими инструментами.
  • Примеры дашбордов для визуализации данных.
  • Как избежать перегрузки системы мониторинга.

6. Советы и лучшие практики

  • Как правильно настраивать семплирование.
  • Оптимизация сбора данных.
  • Рекомендации по организации Observability в больших проектах.
  • Как избежать типичных ошибок при внедрении OpenTelemetry.
  • Не забываем про безопасность

7. Заключение

  • Резюме ключевых моментов.
  • Почему OpenTelemetry — это будущее Observability.
  • Призыв к действию: начать использовать OpenTelemetry в своих проектах.

Практический пример: Почему важно иметь Observability и на клиенте, и на сервере

Сценарий:
У вас есть веб-приложение, которое позволяет пользователям просматривать и заказывать товары. Пользователи начинают жаловаться на медленную загрузку страницы товара.

Проблема:
Задержка может быть вызвана:

  • Медленным API на сервере (например, из-за сложного запроса к базе данных).
  • Долгим рендерингом на стороне клиента (например, из-за тяжелого JavaScript).
  • Проблемами с сетью (например, высокий пинг или потеря пакетов).

Решение с OpenTelemetry:

  1. Серверная часть (Node.js):

    • Вы инструментируете API с помощью OpenTelemetry.
    • Собираете метрики времени ответа и трассировки.
    • Обнаруживаете, что запрос к базе данных занимает слишком много времени из-за отсутствия индекса.
  2. Клиентская часть (браузер):

    • Вы инструментируете загрузку страницы и пользовательские взаимодействия.
    • Собираете данные о времени загрузки ресурсов, рендеринге и сетевых запросах.
    • Обнаруживаете, что тяжелый JavaScript-код замедляет рендеринг страницы.
  3. Анализ данных:

    • Вы коррелируете данные между клиентом и сервером.
    • Обнаруживаете, что проблема заключается как в медленном API, так и в тяжелом JavaScript на клиенте.
    • Оптимизируете запрос к базе данных и улучшаете производительность JavaScript.

Вывод:
Без Observability на обеих сторонах вы могли бы упустить одну из причин проблемы. OpenTelemetry позволяет получить полную картину и быстро устранить проблему.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment