我正在尝试使用一个简单示例使用 .NET 和 OpenTelemetry 设置日志。
using Microsoft.Extensions.Logging;
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Resources;
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.ClearProviders();
builder.AddOpenTelemetry(options =>
{
options
.ConfigureResource(c => c.AddService("GettingStarted"))
.AddConsoleExporter()
.AddOtlpExporter(config =>
{
config.Endpoint = new Uri("http://localhost:4318");
config.Protocol = OtlpExportProtocol.HttpProtobuf;
});
});
});
var logger = loggerFactory.CreateLogger<Program>();
for (var i = 0; i < 100; i++)
{
logger.LogError("{count}: Hello World!", i);
await Task.Delay(1000);
}
收集器配置(otel-collector-config.yaml):
receivers:
otlp:
protocols:
http:
exporters:
logging:
loglevel: debug
service:
telemetry:
logs:
level: debug
pipelines:
logs:
receivers: [otlp]
exporters: [logging]
OpenTelemetry 收集器(docker-compose.yml):
services:
opentelemetry-collector:
image: otel/opentelemetry-collector:0.67.0
ports:
- 4318:4318
volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
日志进入控制台 (ConsoleExporter),但我没有在收集器的日志 (stdout) 中看到它。
我做错了什么?
我最好的预感是您在撰写文件中的收集器条目缺少
command
属性:
services:
opentelemetry-collector:
image: otel/opentelemetry-collector:0.67.0
ports:
- 4318:4318
# Add this line here
command: ["--config=/etc/otel-collector-config.yaml"]
volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
所以你的配置实际上没有在收集器中应用。