Упражнение. Добавление OpenTelemetry в облачное приложение
В этом упражнении вы добавите новый диагностический проект в решение eShopLite. Вы увидите, как добавить пакеты NuGet OpenTelemetry, а затем добавить наблюдаемость в сервис Products.
Откройте среду разработки и создайте ресурсы Azure
Вы можете использовать пространство кода GitHub, в котором размещено упражнение или выполнить упражнение локально в Visual Studio Code.
Чтобы использовать пространство кода, создайте предварительно настроенное пространство кода GitHub с помощью этого шаблона создания Codespace.
Этот шаг занимает несколько минут, пока GitHub создает и настраивает пространство кода. После завершения процесса вы увидите файлы кода для упражнения. Код, используемый для остальной части этого модуля, находится в каталоге /dotnet-observability.
Чтобы использовать Visual Studio Code, клонируйте репозиторий https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative на локальный компьютер. Тогда:
- Установите все системные требования для запуска контейнера разработки в Visual Studio Code.
- Убедитесь, что Docker запущен.
- В новом окне Visual Studio Code откройте папку клонированного репозитория
- Нажмите клавиши Ctrl+Shift+P, чтобы открыть палитру команд.
- Поиск: контейнеры разработки: перестроение и повторное открытие в контейнере >
- Выберите eShopLite — dotnet-observability из раскрывающегося списка. Visual Studio Code создает контейнер разработки локально.
Добавление диагностического проекта в решение
Первым шагом к добавлению наблюдаемости в приложение eShopLite является введение нового диагностического проекта в решение. Этот проект содержит все пакеты и конфигурации OpenTelemetry, которые будут использоваться для добавления наблюдаемости в приложение.
- В палитре команд Visual Studio Code введите >.NET: open Solution.
- Выберите dotnet-observability/eShopLite/eShopLite.sln.
- В обозревателя решенийв нижней части области обозревателя щелкните правой кнопкой мыши решение eShopLite, а затем выберите Новый проект.
- В диалоговом окне "Выбор шаблона для создания нового проекта .NET" выберите "Библиотека классов (Common, Library)".
- В поле Имя введите диагностика.
- В раскрывающемся списке выберите "Создать проект", а затем выберите "Каталог по умолчанию ".
Добавление пакетов OpenTelemetry
Теперь добавьте пакеты OpenTelemetry в новый проект диагностики.
С помощью области терминала, расположенной в нижней части Visual Studio Code, перейдите в папку проекта Диагностика.
cd dotnet-observability/eShopLite/Diagnostics
Выполните следующие команды
dotnet add
:dotnet add package OpenTelemetry.Exporter.Console dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Instrumentation.AspNetCore dotnet add package OpenTelemetry.Instrumentation.EventCounters --prerelease dotnet add package OpenTelemetry.Instrumentation.Runtime dotnet add package OpenTelemetry.Instrumentation.SqlClient --prerelease dotnet add package OpenTelemetry.Instrumentation.Http
В области EXPLORER разверните папку Diagnostics, а затем выберите Diagnostics.csproj.
Измените
Project Sdk
в верхней части на:<Project Sdk="Microsoft.NET.Sdk.Web">
Приведенный выше код позволяет использовать класс
IConfiguration
в коде.Добавьте выходной тип в
<PropertyGroup>
:<OutputType>Library</OutputType>
Приведенный выше код гарантирует, что проект выполняет сборку в виде библиотеки. В противном случае компилятор ожидает файл
Program.cs
с методомmain
.
Добавление кода для использования OpenTelemetry
При добавлении пакетов OpenTelemetry теперь вы вводите код для их использования.
В области EXPLORER щелкните правой кнопкой мыши файл Class1.cs и выберите Переименовать.
Переименуйте файл в DiagnosticServiceCollectionExtensions.cs.
Замените код в файле следующим кодом:
using OpenTelemetry.Metrics; using OpenTelemetry.Resources; using OpenTelemetry.Trace; namespace Microsoft.Extensions.DependencyInjection; public static class DiagnosticServiceCollectionExtensions { public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration) { // create the resource that references the service name passed in var resource = ResourceBuilder.CreateDefault().AddService(serviceName: serviceName, serviceVersion: "1.0"); // add the OpenTelemetry services var otelBuilder = services.AddOpenTelemetry(); otelBuilder // add the metrics providers .WithMetrics(metrics => { metrics .SetResourceBuilder(resource) .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEventCountersInstrumentation(c => { c.AddEventSources( "Microsoft.AspNetCore.Hosting", "Microsoft-AspNetCore-Server-Kestrel", "System.Net.Http", "System.Net.Sockets"); }) .AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel") .AddConsoleExporter(); }) // add the tracing providers .WithTracing(tracing => { tracing.SetResourceBuilder(resource) .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddSqlClientInstrumentation(); }); return services; } }
В области терминала выполните следующую команду, чтобы создать проект:
dotnet build
Вы должны увидеть выходные данные, аналогичные этому примеру:
Build succeeded. 0 Warning(s) 0 Error(s)
Проект диагностики теперь готов к использованию сервисом продуктов.
На панели EXPLORER, в окне SOLUTION EXPLORER, щелкните правой кнопкой мыши на проекте Продукты и выберите Добавить ссылку на проект.
Выберите Диагностика.
В области обозревателя разверните папку Products и выберите Program.cs.
Под комментарием к коду
// Add observability code here
добавьте вызов метода Diagnostics:builder.Services.AddObservability("Products", builder.Configuration);
В панели ТЕРМИНАЛ перейдите в папку Продукты:
cd ../Products
Выполните следующую команду, чтобы создать проект:
dotnet build
Вы должны увидеть выходные данные, аналогичные этому примеру:
Build succeeded. 0 Warning(s) 0 Error(s)
Обновление параметров Docker и запуск приложения
В области ТЕРМИНАЛ перейдите к корню папки dotnet-observability.
cd .. dotnet publish /p:PublishProfile=DefaultContainer
Выполните следующие команды Docker:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/ docker compose up
Должны создаваться серверные контейнеры (продукты службы) и внешний (store service). Затем приложение запускается.
Если вы выполняете это упражнение в пространстве кода, выберите вкладку ПОРТЫ в нижней части окна Visual Studio Code. Щелкните ссылку Открыть в браузере рядом со службой Фронтенд.
Если вы выполняете это упражнение локально в Visual Studio Code, в новой вкладке браузера откройте приложение по адресу
http://localhost:32000
.В приложении выберите Продукты на панели навигации.
Выберите обновить запасы для нескольких товаров. Затем в диалоговом окне измените стоимость акций и выберите Обновить.
Перейдите на вкладку терминала и прокрутите сообщения. Обратите внимание, что есть сообщения из OpenTelemetry, такие как:
backend-1 | Export ec.Microsoft-AspNetCore-Server-Kestrel.connection-queue-length, Meter: OpenTelemetry.Instrumentation.EventCounters/1.5.1.1 backend-1 | (2023-11-09T19:55:14.8933518Z, 2023-11-09T20:04:44.8596671Z] http.request.method: PUT http.response.status_code: 200 http.route: /api/Stock/{id} network.protocol.name: http network.protocol.version: 1.1 url.scheme: http Histogram backend-1 | Value: Sum: 0.05144170000000001 Count: 4 Min: 0.0039736 Max: 0.0359739
Чтобы остановить приложение, нажмите клавиши CTRL+C.
Вы успешно добавили OpenTelemetry в службу Products. В следующем уроке вы узнаете, как лучше использовать данные телеметрии, просматривая их на таких средствах, как Prometheus и Grafana.