Это только супер-альфа-пример*, предназначенный для проверки концепции интеграции инструментов наблюдения во внешнее веб-приложение.

* OpenTelemetryJS и многие связанные с ним инструменты находятся в АЛЬФА-версии на момент написания статьи, кроме того, приведенный ниже пример взламывает некоторые еще не реализованные компоненты с единственной целью демонстрации инструментов, которые мы, вероятно, будем использовать немного дальше по треку. ! (подробнее об этом в разделе «Примечания» в конце).

Короче говоря, давайте сосредоточимся на концепциях, а не на реализации 😬

Наблюдаемость?

У O’Reilly есть хорошая статья здесь — но, говоря очень просто, это относится к полезности, предоставляемой при объединении трех столпов (как определено в Distributed Systems Observability by Cindy Sridharan):

  1. Журналы:
    «журнал событий — это неизменяемая запись дискретных событий с отметками времени, которые происходили с течением времени».
  2. Метрики.
    «Метрики — это числовое представление данных, измеренных за определенные интервалы времени».
  3. Трассы:
    «трассировка — это представление серии причинно связанных распределенных событий, которые кодируют сквозной поток запросов через распределенную систему».

Эта статья посвящена интеграции трассировки во внешние веб-приложения (например, приложения React).

Инструменты

  • OpenTelemetry JS: это (альфа) JavaScript-версия OpenTelemetry, фреймворка для сбора трассировок, метрик и журналов из приложений.
  • Jaeger: обеспечивает сквозную распределенную трассировку с открытым исходным кодом. Мониторинг и устранение неполадок транзакций в сложных распределенных системах».

Шаг №1: запустите все вещи Jaeger:

# yes this example uses docker, cos, easy
docker run -d — name jaeger -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778 -p 16686:16686 -p 14268:14268 -p 9411:9411 jaegertracing/all-in-one:1.14

Откройте интерфейс Jaeger: http://localhost:16686/

Шаг № 2: запустите прокси-сервер CORS

docker run -p 8888:3000 psimonov/cors-anywhere

Шаг № 3: клонируйте демо-репозиторий

git clone https://github.com/danwild/opentelemetry-js.git

Шаг № 4: сборка пакетов и пример

# core repo
cd opentelemetry-js
npm install
# crude demo exporter
cd packages/opentelemetry-exporter-zipkin-web
npm install
npm run prepare
# crude demo web app
cd ../../examples/tracer-web-jaeger
npm install
npm start

Укажите в браузере: http://localhost:8090, чтобы запустить демонстрационные трассировки + экспорт.

Шаг № 5: изучите пользовательский интерфейс Jaeger

Обновите http://localhost:16686, и вы сможете увидеть свой сервис:

Выбрав службу, нажмите «Найти следы»:

Затем выберите трассу, чтобы более подробно изучить ее диапазоны:

Примечания

  • В этом примере используется формат отчетов Zipkin JSON v2 span для экспорта/импорта трассировок в Jaeger, на момент написания в jaeger-client-javascript есть заглушка проекта, поэтому следите за этим пространством.
  • Вокруг идет куча другой работы, все еще в движении — следите за https://github.com/open-telemetry/opentelemetry-js, чтобы не пропустить более мощные инструменты!
  • Если у вас есть проблемы с запуском примера веб-приложения/вы видите ошибки в консоли по адресу http://localhost:8090, вам может потребоваться проверить путь прокси, который использует host.docker.internal и был протестирован только на MacOS.