I am trying to get an ASP.NET Core application to send logs to opentelemetry-collection by following the examples from https://opentelemetry.io/docs/languages/dotnet/exporters/
Here is my C# program:
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
using OpenTelemetry;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
const string serviceName = "Grocery.Price.Example";
var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddOpenTelemetry(logging =>
{
logging
.SetResourceBuilder(
ResourceBuilder.CreateDefault()
.AddService(serviceName))
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://localhost:4318/v1/logs");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
});
});
// Add OpenTelemetry logging provider by calling the WithLogging extension.
builder.Services.AddOpenTelemetry()
.ConfigureResource(resource => resource.AddService(serviceName))
.WithTracing(tracing => tracing
// The rest of your setup code goes here
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://localhost:4318/v1/traces");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
}))
.WithMetrics(metrics => metrics
// The rest of your setup code goes here
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://localhost:4318/v1/metrics");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
}));
var app = builder.Build();
app.MapGet("/", (ILogger logger) =>
{
logger.FoodPriceChanged("artichoke", 9.99);
return "Hello from OpenTelemetry Logs!";
});
app.Logger.StartingApp();
app.Run();
internal static partial class LoggerExtensions
{
[LoggerMessage(LogLevel.Information, "Starting the app...")]
public static partial void StartingApp(this ILogger logger);
[LoggerMessage(LogLevel.Information, "Food `{name}` price changed to `{price}`.")]
public static partial void FoodPriceChanged(this ILogger logger, string name, double price);
}
It is based on a sample from https://github.com/open-telemetry/opentelemetry-dotnet
My collector-config.yaml (from https://opentelemetry.io/docs/collector/configuration/#exporters):
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
debug:
verbosity: detailed
service:
pipelines:
traces:
receivers: [otlp]
exporters: [debug]
metrics:
receivers: [otlp]
exporters: [debug]
logs:
receivers: [otlp]
exporters: [debug]
I use this command to start the collector:
Docker run -p 4318:4318 -p 4317:4317 -p 55679:55679 --rm -v .\collector-config.yaml:/etc/otelcol/config.yaml otel/opentelemetry-collector:0.143.1
The program runs, but nothing is being communicated to the collector. What could be the issue?