.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+小程序技术打造微信小程序助手 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 从零到一的完整项目开发实战过程,项目开发聚焦重要知识点,先原理后实战 ...
随机推荐
- 重新点亮linux 命令树————查看进程[二十一]
前言 简单介绍一下进程. 正文 进程管理: 进程的概念与进程查看 进程的控制命令 进程的通信方式---信号 守护进程和系统日志 服务管理工具 systemctl SELinux 简介 进程概念: ht ...
- sumo简单安装及运行实例
下载解压并添加环境变量 记录一下今天SUMO的安装及使用经验,写的可能比较潦草,没看懂的小伙伴在下方评论,我看到一定会解答. 第一步先打开网址下载sumo: https://sourceforge.n ...
- iframe跨域,获取iframe中元素
1.需求让iframe嵌入页面,并且没有滚动条,也就是相当于两个页面拼接在一起 跨域解决,通过框架配置代理 proxy: { '/medical': { target: 'https://exampl ...
- Oracle 与当前日期有关的内容
Oracle 与当前日期有关的内容 求当前日期是周几: 大概就是下面这种方法 to_char(date,'D') Select to_char(date,'ss') from dual取当前时间秒部分 ...
- 【漫画】最近,老王又双叒get了CDN的新技能—可编程化敏捷开发
原文链接本文为阿里云原创内容,未经允许不得转载.
- Java 定时任务技术趋势
简介:定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等. 作者:黄晓萌(学仁) Java 中自带的解决方案 使用 Time ...
- 双11特刊|一站式在线数据管理平台DMS技术再升级,高效护航双11
简介: 10万+企业共同选择的数据库服务平台 阿里云数据库已连续多年稳定支撑天猫双11,历经极端流量场景淬炼.除了保障稳定顺滑的基本盘,今年大促期间数据库通过全面云原生化,大幅提升用户体验,让技术帮 ...
- HTML中元素分类与对应的CSS样式特点
元素就是标签,布局中常用的有三种标签,块元素.内联元素.内联块元素,了解这三种元素的特性,才能熟练的进行页面布局. 块元素 块元素,也可以称为行元素,布局中常用的标签如:div.p.ul.li.h1~ ...
- 2018-8-29-dotnet-core-2.1-使用阶梯编译
title author date CreateTime categories dotnet core 2.1 使用阶梯编译 lindexi 2018-08-29 08:49:12 +0800 201 ...
- 2019-10-14-云之幻-UWP-视频教程
title author date CreateTime categories 云之幻 UWP 视频教程 lindexi 2019-10-14 21:8:26 +0800 2019-10-14 21: ...