.NET程序对接 OpenTelemetry logs

OpenTelemetry 简介
OpenTelemetry 是一个由 CNCF(Cloud Native Computing Foundation)托管的开源项目,旨在为观察性(Observability)提供一套全面的工具,包括度量(Metrics)、日志(Logs)和追踪(Traces)。它的目标是为所有类型的遥测数据提供一种标准化的方法。
OpenTelemetry 提供了一套 API 和 SDK,使得开发者可以在他们的应用程序中生成和收集遥测数据。此外,OpenTelemetry 还提供了一套收集器(Collector),可以接收、处理和导出遥测数据,以便于后续的分析和可视化。
本文不是用来介绍 OpenTelemetry 的,所以更多的细节就不提了。

OpenTelemetry 的优点
OpenTelemetry 的主要优点是其广泛的兼容性和灵活性。它支持多种编程语言,包括 Java、Python、Go、JavaScript 和 .NET 等。此外,它还可以与多种后端服务进行集成,包括但不限于 Prometheus、Jaeger、Zipkin 和 Grafana 等。
Otlp
总的来说 OpenTelemetry 最大的优点是他的 “标准化”。在数字的世界里,标准才是王道,比如 TCP, Http。OpenTelemetry 定义了 Otlp(OpenTelemetry Protocol) 协议。通过 Otlp 对接其他组件。因为大家都知道市面上做观测的产品有很多,有 Elastic APM 这种全家桶,有专注于 Traceing 的 Jaeger,有专注日志的 loki 跟 Seq。
按照传统,当我们要对接这些组件的时候我们需要导入特定的包,这样其实是让我们的产品跟某个第三方的组件做了深度绑定。比如 AgileConfig 如果对接了 Seq,那么当你想看日志的时候你必须安装一个 Seq。
但是现在使用 Otlp 的话,问题就不存在了。我们的应用程序不需要对接特定的三方组件。我们只需要对接 Otlp 就行了。因为他是标准的协议,所以只要是实现了 Otlp 协议的组件后面都可以很方便的跟应用程序做对接。
这一点对做公共组件的项目非常有用。比如 AgileConfig 你不能要求用户非要安装一个 Seq。用户的生产环境可能是 Elastic。
Seq
Seq 是一款使用现代化技术(.NET)构建的结构化日志存储,查询,分析工具。比起 ELK 这种组合要轻量级许多。只需要一个安装包就具有数据存储,查询,图表分析功能。它对 windows 友好,直接提供了安装包。当然也可以使用 docker 来部署。Seq 对于单个用户是免费的,比较遗憾的是并不开源。Seq 一个比较强大的功能是提供了类似 Sql 语句的数据查询及处理能力,使得用户可以直接写 Select from 来得到自己想要的数据。
示例:在 .NET 中使用 OpenTelemetry logs 对接 Seq
下面让我们来演示一下 .NET 项目如何对接 OpenTelemetry。注意这次我们只演示如何对接 logs,其他两个 traces,metrics 因为概念上有点复杂所以放到后面再说。
首先,我们需要在 .NET 项目中安装 OpenTelemetry。你可以通过 NuGet 包管理器来安装。
- 在你的项目文件中添加以下包:
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.8.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.8.1" />
以上我们可以看到我们并不依赖任何 Seq 相关的包。
- 获取 Seq 的 otlp logs endpoint,通过查询 Seq 文档,得知 logs 的 endpoint 如下:
http://xxx:5341/ingest/otlp/v1/logs
- 接下来,我们需要在 Program.cs 文件中配置 OpenTelemetry logs:
var builder = WebApplication.CreateBuilder(args);
builder.Logging.AddOpenTelemetry(options =>
{
options.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(builder.Environment.ApplicationName));
options.IncludeScopes = true;
options.AddOtlpExporter(otlpOptions =>
{
otlpOptions.Protocol = OtlpExportProtocol.HttpProtobuf;
otlpOptions.Endpoint = new Uri("http://xxx:5341/ingest/otlp/v1/logs");
});
});
现在,我们可以开始在 .NET 应用程序中记录日志了。
- 你可以使用 ILogger 接口来记录日志,如下所示:
using Microsoft.AspNetCore.Mvc;
namespace WebApplication2.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogInformation("Hi......");
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
每次访问接口的时候我们都可以在 Seq 里查询到对应的日志内容。这说明通过 Otlp 对接 Seq 成功了。

总结
通过使用 OpenTelemetry,你可以轻松地收集和分析你的应用程序的遥测数据,从而更好地理解和优化你的应用程序的性能和行为。OpenTelemetry 提供了一套通用的传输协议 Otlp。这可以使我们做设计跟开发产品或项目的时候轻松跟第三方可观测组件进行解耦。
关注我的公众号一起玩转技术

.NET程序对接 OpenTelemetry logs的更多相关文章
- 微信小程序对接显示阿里云数据库数据
现实需求 在项目中需求,有时候现场设备发生故障,需要远程的人员知道.除了邮件方式,以微信小程序的方式也很好.今天进行尝试,并制作了一个demo版本. 1.微信小程序申请制作前端 1.1lists文件( ...
- App与小程序对接
背景: 商品详情页,点击分享,分享到微信好友,点开链接App拉起小程序. 用户在小程序浏览完成,跳转至原App购买商品. 功能点: 实现APP与小程序互调. 前提: 已对接好友盟ShareSDK(需要 ...
- 微信小程序对接串口摄像头
串口摄像头由树莓派控制,代码如下: # _*_ coding:utf-8 import serial import time import traceback import pycurl import ...
- Winfrom 程序打包及安装
前言 近期被公司外派到驻空调厂的项目组,支援一个TCP相关的程序对接.主要是做智能门禁系统,然后主要是统计出实时的进出人数. 我这边能作为服务端,门禁设备作为客户端,整个流程并不算复杂,根据协议来写, ...
- 咫尺论坛|即速应用-微信小程序社区
咫尺论坛|即速应用-微信小程序社区 是一个集微信和支付宝小程序行业资讯.开发资源.技术交流于一身的大型小程序开发论坛,成立伊始便迅速聚集了一大批小程序开发爱好者,短时间内成为了国内领先的小程序开发者社 ...
- Winform 程序打包及安装
前言 近期被公司外派到驻空调厂的项目组,支援一个TCP相关的程序对接.主要是做智能门禁系统,然后主要是统计出实时的进出人数. 我这边能作为服务端,门禁设备作为客户端,整个流程并不算复杂,根据协议来写, ...
- Java Service Wrapper将java程序设置为服务
有时候我们希望我们java写的程序作为服务注册到系统中,Java Service Wrapper(下面简称wrapper)是目前较为流行的将Java程序部署成Windows服务的解决方案, 本文将讨论 ...
- 微信小程序学习指南
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Java Service Wrapper 发布Java程序为Windows服务
下载Windows版本:https://www.krenger.ch/blog/java-service-wrapper-3-5-37-for-windows-x64/ 转自:F:\java\bhGe ...
- Django+小程序技术打造微信小程序助手 ✌✌
Django+小程序技术打造微信小程序助手 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 从零到一的完整项目开发实战过程,项目开发聚焦重要知识点,先原理后实战 ...
随机推荐
- 批处理for 的理解及例子
前言 首先for的代码形式是: for %i in (set) do command 这里面有一些小知识知识点: 比如说i是变量,那么i可以换成其他字符吗?答案是可以的.但是必须是26个字母中的其中一 ...
- MMdeploy TensorRT 模型实时监控桌面,PyQt5实现
本项目遵从:GNU General Public License v3.0 个人博客『 gy77 』: GitHub仓库 :代码源码详见仓库 demo_qt.py 我的CSDN博客 我的博客园 简介: ...
- 必须经典GPT4.0
学习C#编程,有一些经典的教材和资源值得关注.下面列出了一些建议供你参考: 1. <C# 编程黄皮书>(C# Programming Yellow Book):Rob Miles 编著的这 ...
- 树上点差分的经典应用 LuoguP3258松鼠的新家
树上点差分的核心就是如何避免重复,即正确的运用差分数组 例如a,b点路径上点权值加1,则把a,b路径找到,并找到其LCA,此时可以把a到根,b到根这两条路径看出两条链,把每条链看出我们熟悉的 顺序差分 ...
- 面试题 02.07(Java). 链表相交(简单)
题目: 本题与:力扣160相交链表 一致 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点.如果两个链表没有交点,返回 null . 图示两个链表在节点 c ...
- 怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东
简介: 跟郭旭东聊过之后,我对程序员的敬佩又多一分.这个92年的开发者,难能可贵地兼备朝气蓬勃的技术能量与长远深刻的行业洞见.独自承担DevOps平台从0到1的所有工作,我打趣说超级开发者不过如此,他 ...
- DataV 3D 平面地图 2.0 焕新上线
简介:DataV3月,3D平面地图2.0现已上线~ 3D 平面地图 2.0 现已上线~ 让我们来看看更新了哪些功能吧! 01 交互升级,省市区自由下钻 自带行政区域数据,无需配置: 甚至,可以通 ...
- 阿里巴巴云原生大数据运维平台 SREWorks 正式开源
简介:阿里巴巴云原生大数据运维平台 SREWorks,沉淀了团队近10年经过内部业务锤炼的 SRE 工程实践,今天正式对外开源,秉承"数据化.智能化"运维思想,帮助运维行业更多的 ...
- OpenTelemetry 简析
简介: OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型.采集.处理.导出等的标准化问题,提供与三方 vendor 无关的服务. ...
- Dapr 在阿里云原生的实践
简介: Faas 场景下,比较吸引用户的是成本和研发效率,成本主要通过按需分配和极致的弹性效率来达成.而应用开发者期望通过 FaaS 提供多语言的编程环境,提升研发效率,包括启动时间.发布时间.开发的 ...