Введение в OpenTelemetry
В мире разработки программного обеспечения, где всё может быть хаотично, понимание того, как работает ваше приложение, имеет решающее значение. Здесь на помощь приходит OpenTelemetry, как супергерой, спасающий ситуацию.
OpenTelemetry — это открытый фреймворк, предназначенный для унифицированного сбора, генерации и экспорта данных телеметрии, включая метрики, логи и трассировки. Давайте подробнее рассмотрим, как можно использовать его силу для создания надёжной системы анализа производительности приложений.
Что такое OpenTelemetry?
Это результат слияния проектов OpenTracing и OpenCensus, теперь инкубируемых Cloud Native Computing Foundation (CNCF). Он предлагает набор API, SDK и инструментов, которые стандартизируют сбор и передачу данных телеметрии. Это упрощает мониторинг и отладку приложений без привязки к инструментам наблюдения конкретного поставщика.
Основные компоненты OpenTelemetry:
- Трассировки, метрики и логи. OpenTelemetry позволяет создавать и собирать три основных типа данных телеметрии:
- трассировки показывают, как запросы проходят через систему, предоставляя информацию о производительности и поведении приложения;
- метрики предоставляют количественные данные о производительности системы, такие как использование процессора, потребление памяти и задержка запроса;
- логи содержат подробную информацию об отдельных событиях в приложении.
- Инструментирование. Это процесс интеграции OpenTelemetry в код приложения. Может осуществляться двумя способами:
- кодовое инструментирование: вручную добавляются API OpenTelemetry для создания трасс, метрик и логов;
- нулевое кодовое инструментирование использует библиотеки автоматического инструментирования, автоматически добавляющие телеметрию в приложение без изменения кода.
- Коллектор и экспортёры. OpenTelemetry Collector — служба, которая получает, обрабатывает и экспортирует данные телеметрии. Её можно развернуть как отдельный сервис или в виде «сайдкара».
Collector использует приёмники для получения данных от служб, процессоры для их обработки и экспортёры для отправки данных в инструменты анализа.
Настройка OpenTelemetry
Вот пошаговое руководство по настройке OpenTelemetry для вашего приложения:
- Установите OpenTelemetry SDK. Сначала установите SDK OpenTelemetry для используемого языка программирования. Пример для Node.js:
const { NodeTracerProvider } = require('@opentelemetry/node');
const { SimpleSpanProcessor } = require('@opentelemetry/tracing');
const { ConsoleSpanExporter } = require('@opentelemetry/tracing';
const provider = new NodeTracerProvider();
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.register();
- Инструментируйте своё приложение. Затем инструментируйте приложение для генерации данных телеметрии. Вот как создать трассы для входящих HTTP-запросов в приложении Node.js:
const express = require('express');
const { trace } = require('@opentelemetry/api');
const app = express();
const tracer = trace.getTracer('my-service');
app.get('/hello', (req, res) => {
const span = tracer.startSpan('hello-request');
try {
res.send('Hello, World!');
} finally {
span.end();
}
});
- Настройте Collector. Настройте OpenTelemetry Collector для приёма и экспорта данных телеметрии. Пример конфигурации для Collector:
receivers:
otlp:
protocol: http
host: localhost
port: 55678
processors:
batch:
exporters:
otlp:
endpoint: http://localhost:55678
headers:
"Content-Type": "application/x-protobuf"
Диаграмма: архитектура OpenTelemetry
Здесь представлена высокоуровневая диаграмма архитектуры OpenTelemetry с использованием синтаксиса Mermaid:
Оптимизация производительности с помощью OpenTelemetry
Важно учитывать влияние на производительность при интеграции OpenTelemetry. Вот несколько советов по оптимизации производительности:
- Тестирование нагрузки и профилирование. Прежде чем внедрять OpenTelemetry в производство, проведите тестирование нагрузки для понимания влияния на производительность. Например, DoorDash провёл тесты нагрузки на своих сервисах и наблюдал увеличение использования ЦП при включении экспортера трасс. Они использовали профилирование ЦП для выявления проблемы с производительностью, связанной с BatchSpanProcessor.
- Параметры конфигурации. Оптимизируйте конфигурацию BatchSpanProcessor (BSP), чтобы уменьшить нагрузку на ЦП. Вот некоторые параметры конфигурации, которые можно настроить:
otel.bsp.max.queue.size
управляет максимальным количеством трасс в очереди ожидания;otel.bsp.max.export.batch.size
определяет размер пакета перед отправкой трасс коллектору;otel.bsp.schedule.delay
устанавливает задержку между пакетными экспортами.
Пример: оптимизация конфигурации BSP:
exporters:
otlp:
endpoint: http://localhost:55678
headers:
"Content-Type": "application/x-protobuf"
processors:
batch:
max_queue_size: 2048
max_export_batch_size: 512
schedule_delay_millis: 5000
Заключение
Создание системы анализа производительности приложения с OpenTelemetry — мощный способ получить представление о поведении и производительности вашего приложения. Следуя шагам, описанным выше, и оптимизируя конфигурацию для конкретного случая использования, вы можете гарантировать, что ваша система останется производительной и наблюдаемой.