Это только супер-альфа-пример*, предназначенный для проверки концепции интеграции инструментов наблюдения во внешнее веб-приложение.
* OpenTelemetryJS и многие связанные с ним инструменты находятся в АЛЬФА-версии на момент написания статьи, кроме того, приведенный ниже пример взламывает некоторые еще не реализованные компоненты с единственной целью демонстрации инструментов, которые мы, вероятно, будем использовать немного дальше по треку. ! (подробнее об этом в разделе «Примечания» в конце).
Короче говоря, давайте сосредоточимся на концепциях, а не на реализации 😬
Наблюдаемость?
У O’Reilly есть хорошая статья здесь — но, говоря очень просто, это относится к полезности, предоставляемой при объединении трех столпов (как определено в Distributed Systems Observability by Cindy Sridharan):
- Журналы:
«журнал событий — это неизменяемая запись дискретных событий с отметками времени, которые происходили с течением времени». - Метрики.
«Метрики — это числовое представление данных, измеренных за определенные интервалы времени». - Трассы:
«трассировка — это представление серии причинно связанных распределенных событий, которые кодируют сквозной поток запросов через распределенную систему».
Эта статья посвящена интеграции трассировки во внешние веб-приложения (например, приложения 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.