Browse Source

Basket.API instrumented with OpenTelemetry

pull/1638/head
Alan West 3 years ago
parent
commit
8d144372d3
No known key found for this signature in database GPG Key ID: 10C64B6E349D00BC
5 changed files with 75 additions and 1 deletions
  1. +10
    -0
      src/Services/Basket/Basket.API/Basket.API.csproj
  2. +53
    -0
      src/Services/Basket/Basket.API/OpenTelemetry.cs
  3. +2
    -1
      src/Services/Basket/Basket.API/Startup.cs
  4. +4
    -0
      src/docker-compose.opentelemetry.console.yml
  5. +6
    -0
      src/docker-compose.opentelemetry.otlp.yml

+ 10
- 0
src/Services/Basket/Basket.API/Basket.API.csproj View File

@ -42,6 +42,16 @@
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="OpenTelemetry" Version="1.0.1" />
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.0.1" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.0.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.0.0-rc2" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.0.0-rc2" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.0.0-rc2" />
<PackageReference Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.0.0-rc2" />
</ItemGroup>
<ItemGroup>
<Protobuf Include="Proto\basket.proto" GrpcServices="Server" Generator="MSBuild:Compile" />
<Content Include="@(Protobuf)" />


+ 53
- 0
src/Services/Basket/Basket.API/OpenTelemetry.cs View File

@ -0,0 +1,53 @@
using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using StackExchange.Redis;
using System;
static class OpenTelemetryExtensions
{
public static void AddOpenTelemetry(ConnectionMultiplexer connectionMultiplexer)
{
if (connectionMultiplexer == null) throw new ArgumentException("!!!!conn is null!");
var exportType = Environment.GetEnvironmentVariable("OTEL_USE_EXPORTER")?.ToLower();
if (exportType == null)
{
return;
}
var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder();
// Configure resource
tracerProviderBuilder
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService("Basket.API"));
// Configure instrumentation
tracerProviderBuilder
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddRedisInstrumentation(connectionMultiplexer);
// Configure exporter
switch (exportType)
{
case "otlp":
tracerProviderBuilder.AddOtlpExporter(options =>
{
var endpoint = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_ENDPOINT")
?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT");
options.Endpoint = new Uri(endpoint);
var headers = Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_TRACES_HEADERS")
?? Environment.GetEnvironmentVariable("OTEL_EXPORTER_OTLP_HEADERS");
options.Headers = headers;
});
break;
default:
tracerProviderBuilder.AddConsoleExporter();
break;
}
tracerProviderBuilder.Build();
}
}

+ 2
- 1
src/Services/Basket/Basket.API/Startup.cs View File

@ -185,8 +185,9 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, ConnectionMultiplexer connectionMultiplexer)
{
OpenTelemetryExtensions.AddOpenTelemetry(connectionMultiplexer);
//loggerFactory.AddAzureWebAppDiagnostics();
//loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace);


+ 4
- 0
src/docker-compose.opentelemetry.console.yml View File

@ -6,6 +6,10 @@ version: '3.4'
# docker-compose -f docker-compose.yml -f docker-compose.override.yml -f docker-compose.opentelemetry.console.yml up
services:
basket-api:
environment:
- OTEL_USE_EXPORTER=console
webmvc:
environment:
- OTEL_USE_EXPORTER=console

+ 6
- 0
src/docker-compose.opentelemetry.otlp.yml View File

@ -14,6 +14,12 @@ services:
ports:
- "4317" # OTLP gRPC receiver
basket-api:
environment:
- OTEL_USE_EXPORTER=otlp
- OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-http://otel-collector:4317}
- OTEL_EXPORTER_OTLP_HEADERS=${OTEL_EXPORTER_OTLP_HEADERS}
webmvc:
environment:
- OTEL_USE_EXPORTER=otlp


Loading…
Cancel
Save