.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

Seq 是一款使用现代化技术(.NET)构建的结构化日志存储,查询,分析工具。比起 ELK 这种组合要轻量级许多。只需要一个安装包就具有数据存储,查询,图表分析功能。它对 windows 友好,直接提供了安装包。当然也可以使用 docker 来部署。Seq 对于单个用户是免费的,比较遗憾的是并不开源。Seq 一个比较强大的功能是提供了类似 Sql 语句的数据查询及处理能力,使得用户可以直接写 Select from 来得到自己想要的数据。 我曾经在介绍微服务的时候写过一篇介绍:

.Net Core with 微服务 - 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。这可以使我们做设计跟开发产品或项目的时候轻松跟第三方可观测组件进行解耦。

 引入地址

<think>好的,我现在需要帮助用户解决如何通过IIS管理器为应用程序池单独指定.NET 4.8版本的问题。首先,我得回想一下之前的对话历史,用户之前询问的是在Windows Server 2008 R2上安装.NET Framework 4.8的步骤,现在他们可能已经完成安装,接下来需要配置应用程序池来使用这个新版本。 用户的问题明确指向IIS管理器中的应用程序池配置,所以我需要详细说明步骤。首先,我需要确定在IIS中如何访问应用程序池设置,然后找到.NET CLR版本的选择。可能需要注意,不同的IIS版本界面可能略有不同,但用户使用的是Server 2008 R2,对应的IIS版本应该是7.5,所以步骤应该适用。 接下来,我需要确认用户是否已经正确安装了.NET 4.8,因为如果安装不成功,这里可能看不到选项。用户之前的问题里已经提供了安装步骤,但可能需要提醒他们先验证安装是否成功,比如检查注册表或者使用PowerShell命令,这在之前的回答中已经提到过。 然后,步骤应该包括打开IIS管理器,找到应用程序池,选择或创建新的应用程序池,然后在基本设置中修改.NET Framework版本。需要注意的是,对于现有的应用程序,用户可能需要更改关联的应用程序池,或者新建一个并指定.NET 4.8,然后将应用程序指向这个新的池子。 还需要提醒用户,如果看不到.NET 4.8的选项,可能的问题包括未安装成功、没有安装ASP.NET 4.8集成,或者需要重新注册ASP.NET。可能需要指导他们如何通过aspnet_regiis.exe工具进行注册,这在安装.NET Framework后是必要的步骤。 另外,用户可能会遇到权限问题,比如需要以管理员身份运行IIS管理器,或者执行命令提示符来运行注册命令。这也是需要强调的点,避免他们因为权限不足导致操作失败。 最后,常见问题部分应该涵盖无法选择版本的情况和应用程序池启动失败的可能原因,比如安装不完整或依赖项缺失。同时,注意事项里要提到并行运行不同版本的可能性,以及安全更新的重要性,特别是考虑到Server 2008 R2已经过了主流支持期,用户可能需要升级系统。 总结下来,回答的结构需要清晰分步骤,涵盖配置方法、验证步骤、常见问题及解决,以及注意事项,确保用户能够一步步操作,并在遇到问题时能找到解决方案。同时,保持语言简洁,避免技术术语过多,但必要的地方要准确,比如注册表路径和命令参数。</think>以下是通过 IIS 管理器为应用程序池指定 .NET Framework 4.8 版本的完整操作指南: --- ### 一、配置前准备 1. **验证 .NET 4.8 安装状态** - 打开注册表编辑器 `regedit` - 导航至路径: ```plaintext HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full ``` - 确认 `Release` 值为 **528040**(表示 .NET 4.8 已正确安装) 2. **安装 IIS 集成组件** - 若首次使用 .NET 4.8,需执行: ```cmd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i ``` --- ### 二、通过 IIS 管理器配置步骤 1. **打开 IIS 管理器** - 按 `Win + R` 输入 `inetmgr` 回车 - 以管理员身份运行(右键选择"以管理员身份运行") 2. **定位到应用程序池** - 左侧导航树展开服务器节点 - 点击 **应用程序池**(显示所有现有池列表) 3. **新建/修改应用程序池** - **新建池**(推荐用于隔离环境): - 右键 `应用程序池` > 选择 `添加应用程序池` - 输入名称(如:`MyAppPool_4.8`) - `.NET CLR 版本` 选择 **v4.0.30319** - `托管管道模式` 按需选择(经典/集成) - 点击 `确定` - **修改现有池**: - 右键目标池 > `基本设置` - 将 `.NET CLR 版本` 改为 **v4.0.30319** - 点击 `确定` 4. **关联网站/应用** - 展开 `网站` > 右键目标网站 > `管理网站` > `高级设置` - 将 `应用程序池` 字段改为新建的 .NET 4.8 池 --- ### 三、验证配置生效 1. **查看运行状态** - 在应用程序池列表中,检查目标池的 `.NET 版本` 列是否显示 **v4.0** 2. **通过命令行确认** ```powershell Import-Module WebAdministration Get-ItemProperty "IIS:\AppPools\<池名称>" | Select managedRuntimeVersion ``` - 输出应为:`v4.0` 3. **实际应用测试** - 部署一个简单的 ASP.NET 4.8 测试页(如包含 `<%@ Page Language="C#" %>` 和 `<%= Environment.Version %>`) - 访问页面应显示版本:`4.0.30319.42000` --- ### 四、常见问题解决 1. **无法选择 .NET 4.0 选项** - 检查是否漏装 ASP.NET 4.8 集成组件 - 以管理员身份运行: ```cmd C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -iru ``` 2. **应用程序池启动失败** - 错误日志位置: ```plaintext C:\inetpub\logs\LogFiles\W3SVC1 ``` - 常见修复步骤: - 重置 IIS:`iisreset /restart` - 检查事件查看器 > Windows 日志 > 应用程序 --- ### 五、注意事项 1. **并行运行支持** - IIS 允许同时存在多个不同 .NET 版本的应用程序池 - 示例:池A用 .NET 2.0,池B用 .NET 4.8 2. **安全更新要求** - 确保已安装 .NET 4.8 最新累积更新(通过 Windows Update 或手动下载) 3. **32/64位兼容性** - 若需支持32位应用: - 在应用程序池设置中勾选 `启用32位应用程序` - 需同时安装 x86 和 x64 版本的 .NET 4.8 --- 通过以上配置,可确保特定应用程序池精确使用 .NET Framework 4.8 运行时环境,建议在修改生产环境前先在测试环境验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值