Упражнение. Добавление OpenTelemetry в облачное приложение
В этом упражнении вы добавите в решение новый диагностический проект eShopLite . Вы увидите, как включить пакеты NuGet OpenTelemetry, а затем добавить наблюдаемость в службу продуктов .
Откройте среду разработки и создайте ресурсы 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).
- В поле "Имя" введите диагностику.
- В раскрывающемся списке Project выберите каталог по умолчанию.
Добавление пакетов 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
В области обозревателя разверните папку диагностики и выберите Diagnostics.csproj.
Измените в верхней части страницы
Project Sdk
:<Project Sdk="Microsoft.NET.Sdk.Web">
Приведенный
IConfiguration
выше код позволяет использовать класс в коде.Добавьте в нее
<PropertyGroup>
тип выходных данных:<OutputType>Library</OutputType>
Приведенный выше код гарантирует, что проект выполняет сборку в виде библиотеки. В противном случае компилятор ожидает
Program.cs
файл с методомmain
.
Добавление кода для использования OpenTelemetry
При добавлении пакетов OpenTelemetry теперь вы вводите код для их использования.
В области обозревателя щелкните правой кнопкой мыши файл 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)
Проект диагностики теперь готов к использованию службой продуктов .
В области обозревателя решений щелкните правой кнопкой мыши проект "Продукты" и выберите "Добавить ссылку на проект".
Выберите Диагностика.
В области обозревателя разверните папку "Продукты", а затем выберите Program.cs.
В примечании
// Add observability code here
кода добавьте вызов метода диагностики: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 ). Затем приложение запускается.
Если вы выполняете это упражнение в пространстве кода, выберите вкладку PORTS в нижней части окна 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 в службу продуктов . В следующем уроке вы узнаете, как лучше использовать данные телеметрии, просматривая их на таких средствах, как Prometheus и Grafana.