Сервіс Реклами
Цей сервіс визначає відповідну рекламу для показу користувачам на основі ключів контексту. Реклама буде для продуктів, доступних у магазині.
Автоматична інструменталізація
Цей сервіс використовує агент 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.
Він включає контекст трейсу в записи логів, що дозволяє кореляцію логів з трейсами.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!