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

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

     

更多参考:

.net core-利用OpenObserve 实现OpenTelemetry可观测性标准(Logs,Traces,Metrics)的更多相关文章

  1. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

    前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...

  2. EF Core利用Transaction对数据进行回滚保护

    What? 首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务回滚,则没有任何操作应 ...

  3. ASP.NET Core - 利用Windsor Castle实现通用注册

    问题引入 在ASP.NET Core - 依赖注入这篇文章里面,我们知道了如何利用ASP.NET Core原生的容器来实现依赖注入的,那我们为什么要替换掉默认的 IoC容器呢?从ASP.NET Cor ...

  4. .net core 利用日志查看ef生成的SQL语句

    EF Core 没有直接提供像 EF6 那样方便的在日志中记录最终生成的 SQL 的功能,可以通过官方提供的日志记录(Microsoft.Extensions.Logging)实现. 一. 使用 Mi ...

  5. EF Core创建实体的Code First标准方法

    针对关系型数据库,实体之间的关系最常见的就是通过外键关联的一对一.一对多和多对多的关系,新的EF Core通过注释和Fluent API 能够做到接近于数据库通过DML创建模型的效果了.实际上,通过D ...

  6. .net core利用MySqlBulkLoader大数据批量导入MySQL

    最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...

  7. 温故知新,.Net Core利用UserAgent+rDNS双解析方案,正确识别并反爬虫/反垃圾邮件

    背景 一般有价值的并保有数据的网站或接口很容易被爬虫,爬虫会占用大量的流量资源,接下来我们参考历史经验,探索如何在.Net Core中利用UserAgent+rDNS双解析方案来正确识别并且反爬虫. ...

  8. .Net Core利用反射动态加载类库的方法(解决类库不包含Nuget依赖包的问题)

    在.Net Framework时代,生成类库只需将类库项目编译好,然后拷贝到其他项目,即可引用或动态加载,相对来说,比较简单.但到了.Net Core时代,动态加载第三方类库,则稍微麻烦一些. 一.类 ...

  9. .NET Core 利用委托进行动态流程组装

    引言 在看.NET Core 源码的管道模型中间件(Middleware)部分,觉得这个流程组装,思路挺好的,于是就分享给大家.本次代码实现就直接我之前写的动态代理实现AOP的基础上直接改了,就不另起 ...

  10. .net core 利用中间件处理常见的网站功能 包括 session、routers、重定向、重写和文件下载

    在.net core中所有的请求都会被请求中间件所处理,所以我们可以通过在中间件里边添加对应的功能然后在服务中添加注入来实现对应的功能 文件位置:Startup.cs=>Configure方法, ...

随机推荐

  1. ClustrixDB-new数据库

    ClustrixDB是一种集群式RDBMS,可确保事务处理符合ACID特性,同时可轻松的提供可扩展性和容错能力. ClustrixDB集群由三个或更多节点(联网的同构服务器)组成.ClustrixDB ...

  2. Linux curl brew命令详解

    命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具 ...

  3. Redis(3)---Redis事务|主从复制

    Redis事务 Redis 通过 MULTI .EXEC. DISCARD  和 WATCH 四个命令来实现事务功能. MULTI :标记一个事务块的开始. EXEC: 执行所有事务块内的命令. DI ...

  4. 文章学习 | MPC 是下一代私钥安全的7大原因

    文章学习:MPC 是下一代私钥安全的7大原因 前言 多重签名钱包与单一密钥钱包相比,因其提升了资产安全性,如今已成为机构管理加密货币的标准做法.然而,最近在多方计算(MPC)领域的密码学突破正引领私钥 ...

  5. Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2)

    题目链接:Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2) 总结:Bwa两发,C读假题.发挥很一般,补题感觉到E都是能做的,红温. A. ...

  6. JMeter + ant + Jenkins 接口测试持续集成

    JMeter + ant + Jenkins 接口测试持续集成 操作系统:linux 环境变量 地址 jdk11 https://www.oracle.com/java/technologies/do ...

  7. waterdrop同步mysql数据到hive

    一.shell类型任务,提交到yarn集群 #!bin/bash#=========================数据源配置,只读账号=========================jdbc_ur ...

  8. Yarn角色

    一.ResourceManager ResourceManager中的调度器负责资源的分配 二.NodeManager NodeManager则负责资源的供给和隔离 ResourceManager将某 ...

  9. DeepSeek+AnythingLLM,搭建本地AI知识库,真的太香了!三分钟搞定智能助手,小白也能轻松上手!

    1. 痛点暴击:你的知识管理还在原始时代吗? 你是否每次查找文档翻遍文件夹,会议纪要总在关键时刻"失踪"? 别慌!今天揭秘一个"真香"组合--DeepSeek+ ...

  10. const char*和char*的区别