Сервіс рекомендацій
Цей сервіс відповідає за отримання списку рекомендованих продуктів для користувача на основі наявних ідентифікаторів продуктів, які переглядає користувач.
Автоінструментування
Цей сервіс на основі Python використовує автоінструментатор OpenTelemetry для Python, що досягається за допомогою обгортки opentelemetry-instrument для запуску скриптів. Це можна зробити в команді ENTRYPOINT для Dockerfile сервісу.
ENTRYPOINT [ "opentelemetry-instrument", "python", "recommendation_server.py" ]
Трейси
Ініціалізація трасування
SDK OpenTelemetry ініціалізується в блоці коду __main__. Цей код створить провайдера трасування та встановить процесор відрізків для використання. Експортні точки доступу, атрибути ресурсів та імʼя сервісу автоматично встановлюються автоінструментатором OpenTelemetry на основі змінних середовища.
tracer = trace.get_tracer_provider().get_tracer("recommendation")
Додавання атрибутів до автоінструментованих відрізків
Під час виконання автоінструментованого коду ви можете отримати поточний відрізок з контексту.
span = trace.get_current_span()
Додавання атрибутів до відрізка здійснюється за допомогою set_attribute на обʼєкті відрізка. У функції ListRecommendations атрибут додається до відрізка.
span.set_attribute("app.products_recommended.count", len(prod_list))
Створення нових відрізків
Нові відрізки можуть бути створені та поміщені в активний контекст за допомогою start_as_current_span з обʼєкта трасувальника OpenTelemetry. Коли використовується разом з блоком with, відрізок автоматично завершиться, коли блок завершить виконання. Це робиться у функції get_product_list.
with tracer.start_as_current_span("get_product_list") as span:
Метрики
Ініціалізація метрик
SDK OpenTelemetry ініціалізується в блоці коду __main__. Цей код створить провайдера метрик. Експортні точки доступу, атрибути ресурсів та імʼя сервісу автоматично встановлюються автоінструментатором OpenTelemetry на основі змінних середовища.
meter = metrics.get_meter_provider().get_meter("recommendation")
Власні метрики
Наразі доступні наступні користувацькі метрики:
app_recommendations_counter: Кумулятивна кількість рекомендованих продуктів за виклик сервісу
Автоінструментовані метрики
Наступні метрики доступні через автоінструментування, завдяки opentelemetry-instrumentation-system-metrics, який встановлюється як частина opentelemetry-bootstrap при побудові Docker-образу сервісу recommendation:
runtime.cpython.cpu_timeruntime.cpython.memoryruntime.cpython.gc_count
Логи
Ініціалізація логів
SDK OpenTelemetry ініціалізується в блоці коду __main__. Наступний код створює провайдера логів з пакетним процесором, експортером логів OTLP та обробником логів. Нарешті, він створює логер для використання в застосунку.
logger_provider = LoggerProvider(
resource=Resource.create(
{
'service.name': service_name,
}
),
)
set_logger_provider(logger_provider)
log_exporter = OTLPLogExporter(insecure=True)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(log_exporter))
handler = LoggingHandler(level=logging.NOTSET, logger_provider=logger_provider)
logger = logging.getLogger('main')
logger.addHandler(handler)
Створення записів логів
Створюйте логи за допомогою логера. Приклади можна знайти у функціях ListRecommendations та get_product_list.
logger.info(f"Receive ListRecommendations for product ids:{prod_list}")
Як ви бачите, після ініціалізації, записи логів можуть бути створені так само як у стандартному Python. Бібліотеки OpenTelemetry автоматично додають ідентифікатор трасування та ідентифікатор відрізка для кожного запису логу, і таким чином дозволяють корелювати логи та трейси.
Примітки
Логи для Python все ще експериментальні, і можна очікувати деякі зміни. Реалізація в цьому сервісі слідує прикладу логів для Python.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!