OpenTelemetry в Azure SDK для библиотек Rust

При работе с SDK Azure для Rust, необходимо иметь видимость операций SDK для отладки проблем, мониторинга производительности и понимания взаимодействия вашего приложения со службами Azure. В этой статье показано, как реализовать эффективные стратегии ведения журналов и телеметрии на основе OpenTelemetry, которые предоставляют аналитические сведения о внутренних работах приложений Rust в Azure.

Телеметрия для разработчиков Azure

Пакет SDK Azure для Rust crates обеспечивает полную наблюдаемость благодаря интеграции с OpenTelemetry, что рекомендуется для мониторинга и сценариев распределенной трассировки. Независимо от того, выполняется ли устранение неполадок с потоками проверки подлинности, циклами запросов API или анализом узких мест производительности, в этом руководстве рассматриваются средства и методы OpenTelemetry, необходимые для получения видимости операций с пакетом SDK Azure.

Пакет SDK Azure для Rust использует OpenTelemetry в качестве стандартного подхода к наблюдаемости, предоставляя:

  • Стандартная телеметрия в отрасли: использование форматов OpenTelemetry, совместимых с платформами мониторинга
  • Распределенная трассировка: отслеживание запросов между несколькими службами и ресурсами Azure
  • Расширенные экспортеры: отправка данных в Jaeger, Prometheus, Grafana и другие платформы наблюдения
  • Корреляция между службами: автоматическое распространение контекста трассировки между микрослужбами
  • Мониторинг рабочей среды: построен для высокомасштабируемых рабочих сред с оптимизацией выборки и производительности

Это важно

В настоящее время Microsoft не предоставляет прямого Azure Monitor экспортера OpenTelemetry для приложений Rust. Дистрибутив OpenTelemetry Azure Monitor поддерживает только .NET, Java, Node.jsи Python. Для приложений Rust необходимо экспортировать данные OpenTelemetry в промежуточную систему (например, службу хранилища Azure, Центры событий или сборщик OpenTelemetry) и импортировать эти данные в Azure Monitor с помощью поддерживаемых методов приема.

Настройка логирования OpenTelemetry

Чтобы использовать OpenTelemetry, вам потребуется azure_core_opentelemetry ящик. Пакет azure_core сам по себе не включает поддержку OpenTelemetry.

  1. Войдите в Azure CLI:

    az login
    
  2. Создайте ресурсы Azure Monitor с помощью Azure CLI:

    # Set variables
    RESOURCE_GROUP="rust-telemetry-rg"
    LOCATION="eastus"
    APP_INSIGHTS_NAME="rust-app-insights"
    LOG_ANALYTICS_WORKSPACE="rust-logs-workspace"
    
    # Create resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
    # Create Log Analytics workspace
    WORKSPACE_ID=$(az monitor log-analytics workspace create \
      --resource-group $RESOURCE_GROUP \
      --workspace-name $LOG_ANALYTICS_WORKSPACE \
      --location $LOCATION \
      --query id -o tsv)
    
    # Create Application Insights instance
    az extension add --name application-insights
    INSTRUMENTATION_KEY=$(az monitor app-insights component create \
      --app $APP_INSIGHTS_NAME \
      --location $LOCATION \
      --resource-group $RESOURCE_GROUP \
      --workspace $WORKSPACE_ID \
      --query instrumentationKey -o tsv)
    
    # Get connection string
    CONNECTION_STRING=$(az monitor app-insights component show \
      --app $APP_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query connectionString -o tsv)
    
    echo "Application Insights Connection String: $CONNECTION_STRING"
    
  3. Настройте проект Rust. Добавьте необходимые зависимости в вашу Cargo.toml:

    [dependencies]
    azure_core_opentelemetry = "*"
    azure_security_keyvault_secrets = "*"
    azure_identity = "*"
    opentelemetry = "0.31"
    opentelemetry_sdk = "0.31"
    opentelemetry-otlp = "0.31"  # For exporting to OpenTelemetry Collector
    tokio = { version = "1.47.1", features = ["full"] }
    

    Замечание

    Кейс opentelemetry-otlp включен для экспорта данных телеметрии в сборщик OpenTelemetry, который затем может пересылать данные в Azure Monitor. Прямой экспорт в Azure Monitor из приложений на Rust не поддерживается.

  4. Создайте основное приложение с конфигурацией OpenTelemetry. См. документацию azure_core_opentelemetry для получения дополнительных сведений.

  5. Задайте необходимые переменные среды и запустите приложение:

    # Set Key Vault URL (replace with your actual Key Vault URL)
    export AZURE_KEYVAULT_URL="https://mykeyvault.vault.azure.net/"
    
    # Run the application
    cargo run
    

После настройки OpenTelemetry в приложении и его запуска можно добавить настраиваемое инструментирование и отслеживать данные телеметрии.

Экспорт телеметрии в Azure Monitor

Так как Rust не имеет прямого экспортера Azure Monitor OpenTelemetry, необходимо реализовать косвенный подход для получения данных телеметрии в Azure Monitor. Ниже приведены рекомендуемые методы.

Сборщик OpenTelemetry выступает в качестве среднего слоя, который может получать данные телеметрии из приложения Rust и перенаправлять его в Azure Monitor:

  1. Разверните коллектор OpenTelemetry в вашей инфраструктуре (как сайдкар, агент или шлюз)
  2. Настройте приложение Rust для экспорта в коллектор с помощью OTLP (протокол OpenTelemetry)
  3. Настройка сборщика с помощью экспортера Azure Monitor для пересылки данных в Application Insights

Вариант 2. API приема данных и службы хранилища Azure

В сценариях, где требуется более контроль над обработкой данных:

  1. Экспорт данных телеметрии в службу хранения Azure (объектное хранилище BLOB или озеро данных)
  2. Обработка данных с помощью Функций Azure, Logic Apps или пользовательских приложений
  3. Прием обработанных данных в Azure Monitor с помощью API приема журналов

Вариант 3: Стриминг с помощью Event Hubs

Для обработки телеметрии в режиме реального времени:

  1. Передача данных телеметрии в Центры событий Azure из вашего приложения на Rust
  2. Обработка событий с помощью Azure Stream Analytics, Функций Azure или пользовательских потребителей
  3. Переадресация обработанной телеметрии в Azure Monitor или Application Insights

Настройка данных телеметрии

OpenTelemetry предоставляет гибкую платформу для настройки данных телеметрии в соответствии с потребностями приложения. Используйте эти стратегии для улучшения телеметрии:

Инструментируйте код приложения

Добавление пользовательского инструментирования в код приложения помогает сопоставить бизнес-логику с операциями пакета SDK Azure. Эта корреляция упрощает понимание полного потока операций.

Technique Цель Implementation
Настраиваемые диапазоны для операций Azure Создание четкой иерархии, которая показывает, как логика приложения связана с операциями Azure Оберните вызовы SDK Azure с помощью методов создания спанов OpenTelemetry
Сопоставление логики приложения с вызовами ПАКЕТА SDK Подключение бизнес-операций с помощью базовых вызовов Azure SDK Используйте контекст охвата для связывания бизнес-операций с вызовами служб Azure
Создание диагностических хлебных крошек Захват важного контекста для телеметрии в рабочих процессах Добавление структурированных полей (идентификаторы пользователей, идентификаторы запросов, идентификаторы бизнес-объектов) в диапазоны

Анализ производительности

OpenTelemetry предоставляет подробные сведения о шаблонах производительности пакета SDK Для Azure. Эти аналитические сведения помогают выявлять и устранять узкие места производительности.

Тип анализа Что он показывает Использование
Длительность операции пакета SDK Сколько времени занимает различные операции Azure Используйте временные параметры интервалов, автоматически фиксируемые OpenTelemetry, для выявления медленных операций
Узкие места в обработке сервисных вызовов Где приложение тратит время на ожидание ответов Azure Сравнение времени между службами и операциями Azure для поиска проблем с производительностью
Шаблоны параллельных операций Перекрытие и зависимости между операциями Анализ данных телеметрии для понимания возможностей параллелизации при выполнении нескольких вызовов Azure

Диагностика ошибок

OpenTelemetry записывает расширенный контекст ошибки, который выходит за рамки простых сообщений об ошибках. Этот контекст помогает понять не только то, что не удалось, но почему и в каких обстоятельствах.

Понимание распространения ошибок SDK: Отслеживание того, как ошибки поднимаются через код вашего приложения и слои Azure SDK. Эта трассировка помогает понять полный путь ошибки и определить первопричину.

Различие между временными и постоянными сбоями: различает временные сбои (например, тайм-аут в сети, которые могут быть устранены повторными попытками) и постоянные сбои (например, ошибки аутентификации, требующие изменения конфигурации). Это различие помогает создавать устойчивые приложения.

Общие сведения о журналах, метриках и оповещениях

Приложения и службы создают данные телеметрии, помогающие отслеживать их работоспособность, производительность и использование. Azure классифицирует эту телеметрию в журналы, метрики и оповещения.

Azure предлагает четыре типа телеметрии:

Тип телеметрии Что это дает вам Где это найти для каждой службы
Metrics Числовые данные временного ряда (процессор, память и т. д.) Метрики на портале или az monitor metrics интерфейсе командной строки
Уведомления Упреждающие уведомления при достижении пороговых значений Оповещения на портале или az monitor metrics alert интерфейсе командной строки
Logs Текстовые события и диагностика (веб-приложение) Журналы службы приложений, монитор функций, диагностикаконтейнерных приложений
Пользовательские журналы Телеметрия вашего приложения с помощью App Insights Таблица логов ресурса Application Insights (Трассировка)

Выберите правильную телеметрию для вашего вопроса:

Scenario Использование журналов Используйте метрики Использование оповещений
"Моё веб-приложение запустилось и отвечает?" Журналы веб-сервера службы приложений N/A N/A
"Время ожидания или сбой моей функции?" Журналы вызовов функций (монитор) Метрика длительности выполнения функции Оповещение об ошибке функции >0
"Насколько занята моя служба и может ли она масштабироваться?" N/A Пропускная способность службы и ЦП в метриках Оповещение автомасштабирования при уровне использования процессора > 70%
"Какие исключения вызывают мой код?" Пользовательские журналы трассировки в Application Insights N/A Оповещение о "ServerExceptions >0"
Я превысил лимиты по транзакциям или квоте? N/A Метрики, связанные с квотами (транзакции, регулирование) Оповещение об ограничении количества >0

Просмотр данных телеметрии в Azure Monitor

После настройки OpenTelemetry в приложении Rust и настройки промежуточного механизма экспорта можно просмотреть данные телеметрии в Azure Monitor с помощью Application Insights. Так как Rust не имеет прямых возможностей экспорта Azure Monitor, вам потребуется реализовать один из следующих подходов:

  • Сборщик OpenTelemetry: настройте сборщик OpenTelemetry для получения данных из приложения Rust и перенаправьте его в Azure Monitor
  • Интеграция службы хранилища Azure. Экспорт телеметрии в службу хранилища Azure и использование API приема данных Azure Monitor для импорта данных
  • Стриминг через Event Hubs: передача данных телеметрии через Центры событий Azure и их обработка для интеграции с Azure Monitor

Когда данные телеметрии достигают Azure Monitor с помощью одного из этих методов, вы можете проанализировать его:

  1. Перейдите к Application Insights на портале Azure:

    az monitor app-insights component show \
      --app $APP_INSIGHTS_NAME \
      --resource-group $RESOURCE_GROUP \
      --query "{name:name,appId:appId,instrumentationKey:instrumentationKey}"
    
  2. Просмотр трассировок и журналов:

    • Перейти кпоиску транзакций>
    • Ищите трассировки с именами операций, например get_keyvault_secrets
    • Проверьте раздел Журналы и выполните KQL-запросы:
    traces
    | where timestamp > ago(1h)
    | where message contains "Azure operations" or message contains "secrets"
    | order by timestamp desc
    
  3. Просмотр распределенных трассировок:

    • Перейдите на карту приложений , чтобы просмотреть зависимости служб
    • Выберите "Производительность", чтобы просмотреть время выполнения операции
    • Использование сквозных сведений о транзакциях для просмотра полных потоков запросов
  4. Пользовательские запросы KQL для приложения Rust:

    // View all custom logs from your Rust app
    traces
    | where customDimensions.["service.name"] == "rust-azure-app"
    | order by timestamp desc
    
    // View Azure SDK HTTP operations
    dependencies
    | where type == "HTTP"
    | where target contains "vault.azure.net"
    | order by timestamp desc
    
    // Monitor error rates
    traces
    | where severityLevel >= 3  // Warning and above
    | summarize count() by bin(timestamp, 1m), severityLevel
    | render timechart
    

Мониторинг в режиме реального времени

Настройте динамический мониторинг для просмотра данных по мере поступления:

# Stream live logs (requires Azure CLI)
az monitor app-insights events show \
  --app $APP_INSIGHTS_NAME \
  --resource-group $RESOURCE_GROUP \
  --event traces \
  --start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%S)

Оптимизация затрат

Вы можете значительно сократить затраты на Azure Monitor , понимая рекомендации по настройке и возможностям для уменьшения объема собираемых данных Azure Monitor.

Ключевые стратегии для приложений Rust:

  • Используйте соответствующие уровни журналирования: настройте уровни журналов OpenTelemetry для производственной среды, чтобы уменьшить объем.
  • Внедрение выборки: Настройка выборки OpenTelemetry для приложений с большим объемом
  • Фильтрация конфиденциальных данных: избегайте введения в журнал секретов, токенов или больших нагрузок, повышающих затраты
  • Мониторинг приема данных: регулярно просматривайте использование и затраты на данные Application Insights.

Ресурсы и дальнейшие действия