.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
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
.net core-利用OpenObserve 实现OpenTelemetry可观测性标准(Logs,Traces,Metrics)的更多相关文章
- asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...
- EF Core利用Transaction对数据进行回滚保护
What? 首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务回滚,则没有任何操作应 ...
- ASP.NET Core - 利用Windsor Castle实现通用注册
问题引入 在ASP.NET Core - 依赖注入这篇文章里面,我们知道了如何利用ASP.NET Core原生的容器来实现依赖注入的,那我们为什么要替换掉默认的 IoC容器呢?从ASP.NET Cor ...
- .net core 利用日志查看ef生成的SQL语句
EF Core 没有直接提供像 EF6 那样方便的在日志中记录最终生成的 SQL 的功能,可以通过官方提供的日志记录(Microsoft.Extensions.Logging)实现. 一. 使用 Mi ...
- EF Core创建实体的Code First标准方法
针对关系型数据库,实体之间的关系最常见的就是通过外键关联的一对一.一对多和多对多的关系,新的EF Core通过注释和Fluent API 能够做到接近于数据库通过DML创建模型的效果了.实际上,通过D ...
- .net core利用MySqlBulkLoader大数据批量导入MySQL
最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...
- 温故知新,.Net Core利用UserAgent+rDNS双解析方案,正确识别并反爬虫/反垃圾邮件
背景 一般有价值的并保有数据的网站或接口很容易被爬虫,爬虫会占用大量的流量资源,接下来我们参考历史经验,探索如何在.Net Core中利用UserAgent+rDNS双解析方案来正确识别并且反爬虫. ...
- .Net Core利用反射动态加载类库的方法(解决类库不包含Nuget依赖包的问题)
在.Net Framework时代,生成类库只需将类库项目编译好,然后拷贝到其他项目,即可引用或动态加载,相对来说,比较简单.但到了.Net Core时代,动态加载第三方类库,则稍微麻烦一些. 一.类 ...
- .NET Core 利用委托进行动态流程组装
引言 在看.NET Core 源码的管道模型中间件(Middleware)部分,觉得这个流程组装,思路挺好的,于是就分享给大家.本次代码实现就直接我之前写的动态代理实现AOP的基础上直接改了,就不另起 ...
- .net core 利用中间件处理常见的网站功能 包括 session、routers、重定向、重写和文件下载
在.net core中所有的请求都会被请求中间件所处理,所以我们可以通过在中间件里边添加对应的功能然后在服务中添加注入来实现对应的功能 文件位置:Startup.cs=>Configure方法, ...
随机推荐
- Spring-RetryTemplate-RestTemplate的使用
------------------------------------------------------------------------------------ 1.基本概念 1.1应用场景 ...
- DCT实现水印嵌入与提取(带攻击)
问题: 想要用DCT技术,在Matlib上实现水印的隐藏和提取(带GUI界面),且加上一些攻击(噪声.旋转.裁剪),以及用NC值评判! 流程 选择载体 [filename,pathname]=uige ...
- Kotlin:反引号中的函数命名、匿名函数、函数类型与隐式返回
- Python 潮流周刊#87:媲美 OpenAI-o1 的开源模型(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 第2章 C# 语言基础
第2章 C# 语言基础 难点提纲 mindmap 第2章 C#语言基础 数值类型 数值字面量 溢出检查 特殊的浮点值 decimal 舍入误差 数组 简化初始化的<br/>两种方式 变量和 ...
- 创新+1+1+1+1!筑牢算力底座,助推AI产业繁荣发展!
近日,ICT中国·2024高层论坛-云原生发展论坛在北京国家会议中心举办.天翼云出席<城市算力互联网实践指南>编制工作启动仪式.AI Cloud人工智能云服务标准体系阶段性成果发布仪式.算 ...
- 一种提升SQL改写效率的方法
本文分享自天翼云开发者社区<一种提升SQL改写效率的方法>,作者:唐****律 一.背景 SQL改写是数据库产品中使用比较频繁的一个技术,在大多数产品中的调用频率也非常高,通常对性能的需求 ...
- Flink同步kafka到iceberg数据延迟,两个checkpoint后才可查询
一.问题描述 用户配置了高级参数很多,观察kafka增量数据不多,flink负载不高情况下两个checkpoint后才可查询到数据. 排查时hdfs有数据文件产生,但是mainfast文件中最新快 ...
- 创建Linux iscsi target存储
配置targetcli 创建存储对象 创建块存储对象 cd /backstores/block \ create block1 dev=/dev/ ...
- 为DeepSeek添加本地知识库
为什么要尝试给DeepSeek添加本地知识库呢?作为一个程序员,以前也用过很多AI产品,直到春节DeepSeek爆火,成功在自己的电脑上把AI模型跑起来的时候才真正感受到AI已近在咫尺.未来很多应用和 ...