1. 什么是 OpenObserve?
-
OpenObserve 是一个开源的可观测性平台(支持日志、指标、追踪),旨在成为 Elasticsearch/Datadog 的轻量级替代方案。
-
它支持通过 OpenTelemetry(OTLP)协议接收数据。
2. 搭建 OpenObserve
-
docker 本地运行或部署 OpenObserve(参考 官方文档):
-
docker run -d --name openobserve -p 5080:5080 -e ZO_ROOT_USER_EMAIL="root@example.com" -e ZO_ROOT_USER_PASSWORD="root123" public.ecr.aws/zinclabs/openobserve:latest
-
访问
http://localhost:5080
(默认账号:root@example.com
,密码:root123
)。
3. .NET Core 的 OpenTelemetry 配置
-
安装必要的 NuGet 包:
4. 在 .NET Core 中配置 OpenTelemetry
var builder = WebApplication.CreateBuilder(args);
//base var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes("root@example.com:root123")); // 配置OpenTelemetry 日志Log builder.Logging.ClearProviders(); var resourceBuilder = ResourceBuilder.CreateDefault() .AddService("xxxapi") .AddAttributes(new Dictionary<string, object> { ["environment"] = "development", ["service.version"] = "1.0.0" }); builder.Logging.AddOpenTelemetry(logging => { logging.IncludeFormattedMessage = true; logging.SetResourceBuilder(resourceBuilder) .AddConsoleExporter() // Keep console logging for debugging .AddOtlpExporter(otlpOptions => { otlpOptions.BatchExportProcessorOptions = new BatchExportProcessorOptions<Activity> { MaxQueueSize = 100, // 减小队列避免堆积 MaxExportBatchSize = 10, // 减小批量大小 ScheduledDelayMilliseconds = 500, // 更频繁导出 }; otlpOptions.Endpoint = new Uri("http://localhost:5080/api/default/v1/logs"); otlpOptions.Headers = $"Authorization=Basic {credentials}"; otlpOptions.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf; }); }); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "xxx API", Version = "v1" }); }); builder.Services.AddHttpClient(); // 配置 OpenTelemetry 追踪Tracing builder.Services.AddOpenTelemetry() .WithTracing(builder => builder .SetResourceBuilder(resourceBuilder) .AddSource("xxxapi") .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddOtlpExporter(opts => { opts.Endpoint = new Uri("http://localhost:5080/api/default/v1/traces"); opts.Headers = $"Authorization=Basic {credentials}"; opts.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf; })); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "xxx API v1")); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
5. 关键细节
-
OTLP 端点:OpenObserve 使用
/api/default/
接收 OTLP 数据。 -
认证:默认使用基本认证(账号
root@example.com
,密码root123
)。需将凭据编码为 Base64:// 将 "root@example.com:root123" 转为 Base64 var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes("root@example.com:root123")); opt.Headers = $"Authorization=Basic {credentials}";
-
数据类型:上述配置会向 OpenObserve 发送追踪(Traces)、指标(Metrics)和日志(Logs)。
6. 在 OpenObserve 中验证数据
-
访问
http://localhost:5080
:-
日志:在 Logs Explorer 中查看。
-
-
追踪:在 Traces Explorer 中查看。
-
-
指标:在 Metrics Explorer 中查看。
-
-
7. 故障排除
-
确保 OpenObserve 正在运行。
-
检查 OTLP 端点和认证头是否正确。
-
启用 OpenTelemetry 的诊断输出(调试用):
logging.AddConsoleExporter() //将日志数据输出到控制台
tracing.AddConsoleExporter() //将追踪数据输出到控制台
更多参考:
- https://github.com/openobserve/dotnet-opentelemetry-tracing-application.git