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

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 包:

    <PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.10.0" />
    <PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.10.0" />
    <PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.10.0" />
    <PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.10.0" />
    <PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.10.0" />
    <PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.10.0" />

4. 在 .NET Core 中配置 OpenTelemetry

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
var builder = WebApplication.CreateBuilder(args);<br> //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:

    ?
    1
    2
    3
    // 将 "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() //将追踪数据输出到控制台

     

更多参考:

 

原创作者: honglinjia 转载于: https://www.cnblogs.com/honglinjia/p/18803657
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值