找回密码
 立即注册
首页 业界区 业界 .net core-利用OpenObserve 实现OpenTelemetry可观测性 ...

.net core-利用OpenObserve 实现OpenTelemetry可观测性标准(Logs,Traces,Metrics)

咸和璧 2025-6-2 00:36:27
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
  1. var builder = WebApplication.CreateBuilder(args);<br>//base
  2. var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes("root@example.com:root123"));
  3. // 配置OpenTelemetry 日志Log
  4. builder.Logging.ClearProviders();
  5. var resourceBuilder = ResourceBuilder.CreateDefault()
  6.     .AddService("xxxapi")
  7.     .AddAttributes(new Dictionary<string, object>
  8.     {
  9.         ["environment"] = "development",
  10.         ["service.version"] = "1.0.0"
  11.     });
  12. builder.Logging.AddOpenTelemetry(logging => {
  13.     logging.IncludeFormattedMessage = true;
  14.     logging.SetResourceBuilder(resourceBuilder)
  15.         .AddConsoleExporter()  // Keep console logging for debugging
  16.         .AddOtlpExporter(otlpOptions => {
  17.             otlpOptions.BatchExportProcessorOptions = new BatchExportProcessorOptions
  18.             {
  19.                 MaxQueueSize = 100,        // 减小队列避免堆积
  20.                 MaxExportBatchSize = 10,   // 减小批量大小
  21.                 ScheduledDelayMilliseconds = 500, // 更频繁导出
  22.             };
  23.             otlpOptions.Endpoint = new Uri("http://localhost:5080/api/default/v1/logs");
  24.             otlpOptions.Headers = $"Authorization=Basic {credentials}";
  25.             otlpOptions.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
  26.         });
  27. });
  28. // Add services to the container.
  29. builder.Services.AddControllers();
  30. builder.Services.AddEndpointsApiExplorer();
  31. builder.Services.AddSwaggerGen(c =>
  32. {
  33.     c.SwaggerDoc("v1", new OpenApiInfo { Title = "xxx API", Version = "v1" });
  34. });
  35. builder.Services.AddHttpClient();
  36. // 配置 OpenTelemetry 追踪Tracing
  37. builder.Services.AddOpenTelemetry()
  38.     .WithTracing(builder => builder
  39.         .SetResourceBuilder(resourceBuilder)
  40.         .AddSource("xxxapi")
  41.         .AddAspNetCoreInstrumentation()
  42.         .AddHttpClientInstrumentation()
  43.         .AddOtlpExporter(opts =>
  44.         {
  45.             opts.Endpoint = new Uri("http://localhost:5080/api/default/v1/traces");
  46.             opts.Headers = $"Authorization=Basic {credentials}";
  47.             opts.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
  48.         }));
  49. var app = builder.Build();
  50.       
  51. // Configure the HTTP request pipeline.
  52. if (app.Environment.IsDevelopment())
  53. {
  54.     app.UseSwagger();
  55.     app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "xxx API v1"));
  56. }
  57. app.UseHttpsRedirection();
  58. app.UseAuthorization();
  59. app.MapControllers();
  60. app.Run();
复制代码
5. 关键细节


  • OTLP 端点:OpenObserve 使用 /api/default/接收 OTLP 数据。
  • 认证:默认使用基本认证(账号 root@example.com,密码 root123)。需将凭据编码为 Base64:
    1. // 将 "root@example.com:root123" 转为 Base64
    2. var credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes("root@example.com:root123"));
    3. opt.Headers = $"Authorization=Basic {credentials}";
    复制代码
  • 数据类型:上述配置会向 OpenObserve 发送追踪(Traces)、指标(Metrics)和日志(Logs)。
6. 在 OpenObserve 中验证数据


  • 访问 http://localhost:5080:

    • 日志:在 Logs Explorer 中查看。
    • 1.png

       
    • 追踪:在 Traces Explorer 中查看。
    • 2.png

       
    • 指标:在 Metrics Explorer 中查看。
    • 3.png

       

7. 故障排除


  • 确保 OpenObserve 正在运行。
  • 检查 OTLP 端点和认证头是否正确。
  • 启用 OpenTelemetry 的诊断输出(调试用):
         logging.AddConsoleExporter() //将日志数据输出到控制台
         tracing.AddConsoleExporter() //将追踪数据输出到控制台
    1.  
    复制代码
更多参考:

  • OpenObserve 文档
  • OpenTelemetry .NET 文档
  • https://github.com/openobserve/dotnet-opentelemetry-tracing-application.git
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册