Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При работе с 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.
Войдите в Azure CLI:
az loginСоздайте ресурсы 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"Настройте проект 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 не поддерживается.Создайте основное приложение с конфигурацией OpenTelemetry. См. документацию azure_core_opentelemetry для получения дополнительных сведений.
Задайте необходимые переменные среды и запустите приложение:
# 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. Ниже приведены рекомендуемые методы.
Вариант 1. Сборщик OpenTelemetry (рекомендуется)
Сборщик OpenTelemetry выступает в качестве среднего слоя, который может получать данные телеметрии из приложения Rust и перенаправлять его в Azure Monitor:
- Разверните коллектор OpenTelemetry в вашей инфраструктуре (как сайдкар, агент или шлюз)
- Настройте приложение Rust для экспорта в коллектор с помощью OTLP (протокол OpenTelemetry)
- Настройка сборщика с помощью экспортера Azure Monitor для пересылки данных в Application Insights
Вариант 2. API приема данных и службы хранилища Azure
В сценариях, где требуется более контроль над обработкой данных:
- Экспорт данных телеметрии в службу хранения Azure (объектное хранилище BLOB или озеро данных)
- Обработка данных с помощью Функций Azure, Logic Apps или пользовательских приложений
- Прием обработанных данных в Azure Monitor с помощью API приема журналов
Вариант 3: Стриминг с помощью Event Hubs
Для обработки телеметрии в режиме реального времени:
- Передача данных телеметрии в Центры событий Azure из вашего приложения на Rust
- Обработка событий с помощью Azure Stream Analytics, Функций Azure или пользовательских потребителей
- Переадресация обработанной телеметрии в 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 с помощью одного из этих методов, вы можете проанализировать его:
Перейдите к Application Insights на портале Azure:
az monitor app-insights component show \ --app $APP_INSIGHTS_NAME \ --resource-group $RESOURCE_GROUP \ --query "{name:name,appId:appId,instrumentationKey:instrumentationKey}"Просмотр трассировок и журналов:
- Перейти кпоиску транзакций>
- Ищите трассировки с именами операций, например
get_keyvault_secrets - Проверьте раздел Журналы и выполните KQL-запросы:
traces | where timestamp > ago(1h) | where message contains "Azure operations" or message contains "secrets" | order by timestamp descПросмотр распределенных трассировок:
- Перейдите на карту приложений , чтобы просмотреть зависимости служб
- Выберите "Производительность", чтобы просмотреть время выполнения операции
- Использование сквозных сведений о транзакциях для просмотра полных потоков запросов
Пользовательские запросы 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.