Сервіс Реклами

Цей сервіс визначає відповідну рекламу для показу користувачам на основі ключів контексту. Реклама буде для продуктів, доступних у магазині.

Сирці сервісу реклами

Автоматична інструменталізація

Цей сервіс використовує агент OpenTelemetry Java для автоматичної інструменталізації бібліотек, таких як gRPC, і для налаштування SDK OpenTelemetry. Агент передається в процес за допомогою аргументу командного рядка -javaagent. Аргументи командного рядка додаються через JAVA_TOOL_OPTIONS у Dockerfile і використовуються під час автоматично згенерованого скрипту запуску Gradle.

ENV JAVA_TOOL_OPTIONS=-javaagent:/app/opentelemetry-javaagent.jar

Трейси

Додавання атрибутів до автоматично інструментованих відрізків

Під час виконання автоматично інструментованого коду ви можете отримати поточний відрізок з контексту.

Span span = Span.current();

Додавання атрибутів до відрізка здійснюється за допомогою setAttribute на обʼєкті відрізка. У функції getAds до відрізка додається кілька атрибутів.

span.setAttribute("app.ads.contextKeys", req.getContextKeysList().toString()); span.setAttribute("app.ads.contextKeys.count", req.getContextKeysCount());

Додавання подій до відрізка

Додавання події до відрізка здійснюється за допомогою addEvent на обʼєкті відрізка. У функції getAds подія з атрибутом додається, коли виникає помилка.

span.addEvent("Error", Attributes.of(AttributeKey.stringKey("exception.message"), e.getMessage()));

Встановлення статусу відрізка

Якщо результат операції є помилкою, статус відрізка слід встановити відповідно за допомогою setStatus на обʼєкті відрізка. У функції getAds статус відрізка встановлюється, коли виникає помилка.

span.setStatus(StatusCode.ERROR);

Створення нових відрізків

Нові відрізки можна створити та запустити за допомогою Tracer.spanBuilder("spanName").startSpan(). Новостворені відрізки слід встановити в контекст за допомогою Span.makeCurrent(). Функція getRandomAds створить новий відрізок, встановить його в контекст, виконає операцію і, нарешті, завершить відрізок.

// створити та запустити новий відрізок вручну Tracer tracer = GlobalOpenTelemetry.getTracer("ad"); Span span = tracer.spanBuilder("getRandomAds").startSpan(); // помістити відрізок у контекст, щоб якщо будь-який дочірній відрізок буде запущений, батьківський відрізок буде встановлений правильно try (Scope ignored = span.makeCurrent()) { Collection<Ad> allAds = adsMap.values(); for (int i = 0; i < MAX_ADS_TO_SERVE; i++) { ads.add(Iterables.get(allAds, random.nextInt(allAds.size()))); } span.setAttribute("app.ads.count", ads.size()); } finally { span.end(); }

Метрики

Ініціалізація метрик

Подібно до створення відрізків, першим кроком у створенні метрик є ініціалізація екземпляра Meter, наприклад, GlobalOpenTelemetry.getMeter("ad"). Звідти, використовуйте різні методи побудови, доступні на екземплярі Meter, щоб створити бажаний інструмент метрики, наприклад:

meter .counterBuilder("app.ads.ad_requests") .setDescription("Рахує запити реклами за типом запиту та відповіді") .build();

Поточні метрики

Зверніть увагу, що всі назви метрик нижче зʼявляються в Prometheus/Grafana з перетвореними символами . на _.

Власні метрики

Наразі доступні такі власні метрики користувача:

  • app.ads.ad_requests: Лічильник запитів на рекламу з вимірами, що описують, чи був запит цільовим за ключами контексту чи ні, і чи була відповідь цільовою або випадковою рекламою.

Автоматично інструментовані метрики

Для застосунку доступні такі автоматично інструментовані метрики:

Логи

Сервіс Реклами використовує Log4J, який автоматично налаштовується агентом OTel Java.

Він включає контекст трейсу в записи логів, що дозволяє кореляцію логів з трейсами.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (bd70b52d)