.NET 程序通过 OpenTelemetry Logs 对接 Seq

目录

OpenTelemetry 简介

 ​编辑

OpenTelemetry 的优点

Otlp

Seq

示例:在 .NET 中使用 OpenTelemetry logs 对接 Seq

总结 


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

示例:在 .NET 中使用 OpenTelemetry logs 对接 Seq

下面让我们来演示一下 .NET 项目如何对接 OpenTelemetry。注意这次我们只演示如何对接 logs,其他两个 tracesmetrics 因为概念上有点复杂所以放到后面再说。
首先,我们需要在 .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。这可以使我们做设计跟开发产品或项目的时候轻松跟第三方可观测组件进行解耦。 

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧加群:601122412 ,享受一起成长的快乐。

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根提供的引用内容,您遇到的问题可能是由于连接拒绝导致的。在启动docker容器时,您需要增加一些参数来确保正确的访问权限和连接配置。您可以尝试使用以下命令来启动docker容器并查看日志: ``` sudo docker run -u root -itd -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock <容器名称> sudo docker logs --tail 100 <容器名称> ``` 这样,您应该能够查看到最近100行的日志,并找到导致连接拒绝的具体错误信息。 另外,您还提到了Jenkins服务无法访问https://api.github.com和Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock的问题。这可能是由于网络连接问题或权限问题导致的。您可以尝试检查以下几个方面来解决这些问题: 1. 确保Jenkins服务器能够访问https://api.github.com。您可以尝试在Jenkins服务器上执行以下命令来检查网络连接是否正常: ``` curl https://api.github.com ``` 如果返回结果显示连接被拒绝,可能是由于防火墙或代理等原因导致的。您可以尝试调整网络配置或联系网络管理员进行进一步排查。 2. 确保Jenkins服务器具有正确的权限以访问Docker守护进程。您可以尝试使用以下命令来检查Docker守护进程的权限问题: ``` sudo docker ps ``` 如果返回结果显示权限被拒绝,您可以尝试使用sudo命令或添加您的用户到docker用户组中,并重新启动Jenkins服务。 综上所述,您可以尝试通过检查网络连接和权限配置来解决连接拒绝的问题。如果问题仍然存在,请提供更多详细的错误信息以便进行进一步排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值