『SEQ日志』在 .NET中快速集成轻量级的分布式日志平台

news/2024/5/19 21:08:20 标签: .netcore, 分布式, 日志, SEQ

请添加图片描述

请添加图片描述
📣读完这篇文章里你能收获到

  • 如何在Docker中部署 SEQ:介绍了如何创建和运行 SEQ 容器,给出了详细的执行操作
  • 如何使用 NLog 接入 .NET Core 应用程序的日志:详细介绍了 NLog 和 NLog.Seq 来配置和记录日志的步骤
  • 日志记录示例:博客提供了一个简单的日志记录示例,展示了如何在应用程序中使用 NLog 记录日志发送到SEQ

请添加图片描述

文章目录

  • 一、简介
  • 二、SEQ部署
    • 1. 下载SEQ Docker镜像
    • 2. 生成SEQ密码
    • 3. 创建SEQ容器
    • 4. 访问SEQ Web界面
    • 5. 创建日志源APP Key
  • 三、.NET Core接入(NLog)
    • 1. 添加依赖包
    • 2. 配置nlog.config
    • 3. 在Startup.cs文件中启用NLog
    • 4. 日志记录
  • 四、SEQ查询
    • 1. 事件查询
    • 2. 看板制作
  • 五、总结

请添加图片描述
摘要:本文介绍了如何使用SEQ来进行.NET Core应用程序的日志记录和查询。首先,我们将了解SEQ的基本概念和功能。然后,我们会详细说明如何在.NET Core应用程序中配置和部署SEQ,并通过示例代码演示如何实现日志记录和查询。

一、简介

SEQ是一款功能强大的日志管理工具,它提供了易于使用的Web界面和灵活的查询语法,帮助开发人员更好地理解和分析应用程序的日志信息。在本文中,我们将使用SEQ来记录和查询.NET Core应用程序的日志

请添加图片描述

SEQ_22">二、SEQ部署

SEQ_Docker_23">1. 下载SEQ Docker镜像

sudo docker pull datalust/seq:latest

SEQ_27">2. 生成SEQ密码

PH=$(echo 'password' |sudo docker run --rm -i datalust/seq config hash)

SEQ_31">3. 创建SEQ容器

sudo mkdir -p data/logs

sudo docker run \
  --name seq \
  -d \
  --restart unless-stopped \
  -e ACCEPT_EULA=Y \
  -e SEQ_FIRSTRUN_ADMINPASSWORDHASH="$PH" \
  -v /data/log-prod:/data \
  -p 8001:80 \
  -p 5341:5341 \
  --memory=16g  \
  --memory-swap=16g  \
  datalust/seq

上面的docker运行脚本中有几个点需要注意的:

  • Seq存储的数据包括元数据和事件数据,元数据指用户信息、Seq配置等数据,事件数据指收集到的日志数据。这两种数据默认都是直接存储在磁盘上的,所以在容器启动时,需要将数据存储的路径映射到宿主机上。事件数据只能存储在磁盘上,而元数据有需要的话可以存储到sqlserver或者postgresql,可以在容器启动之后进入容器对元数据进行迁移,可以在容器启动时通过环境变量的方式指定存储路径,如下:
-e SEQ_METASTORE_POSTGRES_CONNECTIONSTRING="Host=localhost;Port=5432;Database=seq"
  • Seq实例在不指定最大内存的情况下会尽可能的占用宿主机尽可能多的内存,为了保证实例能够稳定运行,不会因为内存问题退出或者被杀掉,也为了不影响其他应用,可以为seq实例设置可用的最大内存,而通过seq提供的环境变量SEQ_CACHE_SYSTEMRAMTARGET可以配置seq是否使用缓存,在为seq容器分配的内存比较少的情况下,可以不适应缓存。

SEQ_Web_56">4. 访问SEQ Web界面

SEQ容器启动后,打开浏览器并输入http://localhost:8001,即可进入SEQ的Web界面。
image.png

5. 创建日志源APP Key

SEQ的Web界面中,我们需要为每个应用程序创建一个独立的日志源。通过点击界面右上角的"Add +"按钮,可以创建一个新的日志源,并记录下该日志源的API密钥,以便后续在.NET Core应用程序中进行配置。
image.png
image.png

请添加图片描述

三、.NET Core接入(NLog)

1. 添加依赖包

在.NET Core应用程序的项目文件中,添加NLog和NLog.Seq的NuGet包引用。可以使用以下命令在项目文件中添加NuGet包引用:

dotnet add package NLog
dotnet add package NLog.Web.AspNetCore
dotnet add package NLog.Targets.Seq

2. 配置nlog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="info"
      throwConfigExceptions="true">

	<extensions>
		<add assembly="NLog.Web.AspNetCore"/>
		<add assembly="NLog.Targets.Seq"/>
	</extensions>

	<variable name="OwnWebLayout"
			  value="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}"/>

	<targets async="true">
		<target name="seq" xsi:type="BufferingWrapper" bufferSize="1000" flushTimeout="2000">
			<target xsi:type="Seq" serverUrl="http://localhost:5341" apiKey="" >
				<property name="MachineName" value="${machinename}" />
				<property name="LogType" value="${event-properties:item=LogType}" />
			</target>/>
		</target>
	</targets>

	<rules>
		<logger name="*" minlevel="Debug" writeTo="seq" />
	</rules>
</nlog>

3. 在Startup.cs文件中启用NLog

using NLog.Extensions.Logging;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 其他配置...

        // 启用NLog
        services.AddLogging(loggingBuilder =>
        {
            loggingBuilder.ClearProviders();
            loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
            loggingBuilder.AddNLog();
        });
    }
}

4. 日志记录

private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger)
{
    _logger = logger;
}

public IActionResult Index()
{
    _logger.LogInformation("Index page visited");

    // 应用程序逻辑...

    return View();
}

请添加图片描述

SEQ_148">四、SEQ查询

1. 事件查询

SEQ的Web界面中,可以使用简单而强大的查询语法来过滤和分析日志。例如,可以通过关键词、日期范围或其他属性进行过滤。以下是一些常用的查询示例:

  • 查询包含特定关键词的日志:“关键词”
  • 查询特定级别的日志:@Level = “级别”

image.png

2. 看板制作

image.png

请添加图片描述

五、总结

本文介绍了如何使用SEQ来记录和查询.NET Core应用程序的日志。通过部署SEQ并在.NET Core应用程序中配置日志记录,可以轻松地将应用程序的日志发送到SEQ中,并使用SEQ的强大查询功能对日志进行分析和筛选。希望本文能帮助你更好地管理和利用应用程序的日志信息。

  • SEQ官方的文档:https://docs.datalust.co/docs

请添加图片描述

请添加图片描述


http://www.niftyadmin.cn/n/4963325.html

相关文章

[bug日志]springboot多模块启动,在yml配置启动端口8081,但还是启动了8080

【问题描述】 配置的启动端口是8081&#xff0c;实际启动端口是8080 【解决方法】 1.检查application.yml的配置是否有错误(配置项中&#xff0c;显示白色就错&#xff0c;橙色无措) 2.检查pom.xml的打包方式配置项配置&#xff0c;主pom.xml中的配置项一般为&#xff1a;&l…

自学设计模式(类图、设计原则、单例模式 - 饿汉/懒汉)

设计模式需要用到面向对象的三大特性——封装、继承、多态&#xff08;同名函数具有不同的状态&#xff09; UML类图 eg.—— 描述类之间的关系&#xff08;设计程序之间画类图&#xff09; : public; #: protected; -: private; 下划线: static 属性名:类型&#xff08;默认值…

使用vue-cli脚手架创建vue项目

0.vue cli安装 vue cli2安装 npm install -g vue-clivue cli2卸载 npm uninstall -g vue-clivue cli3安装 npm install -g vue/clikey通过命令查看当前安装的vue cli的版本 vue --version1. vue init vue init 是vue-cli2.x的初始化方式&#xff0c;可以使用github上面的…

精进语言模型:探索LLM Training微调与奖励模型技术的新途径

大语言模型训练&#xff08;LLM Training&#xff09; LLMs Trainer 是一个旨在帮助人们从零开始训练大模型的仓库&#xff0c;该仓库最早参考自 Open-Llama&#xff0c;并在其基础上进行扩充。 有关 LLM 训练流程的更多细节可以参考 【LLM】从零开始训练大模型。 使用仓库之…

css弹性布局的方式

概述 任何一个容器都可以定义为弹性布局容器&#xff0c;使用display:flex(display:inline-flex)开启弹性布局。 2个方向轴&#xff1a;水平主轴和垂直交叉轴 6个容器属性 1.flex-direction &#xff1a;主轴的方向 2.justify-content&#xff1a;子元素在主轴的对齐方式 …

kafka复习:(3)自定义序列化器和反序列化器

一、实体类定义&#xff1a; public class Company {private String name;private String address;public String getName() {return name;}public void setName(String name) {this.name name;}public String getAddress() {return address;}public void setAddress(String a…

CGAL 求取曲线交点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 假设 C = C 1 , C 2 , … , C n C={C_1,C_2,…,C_n}

Jmeter常用线程组设置策略

一、前言 ​ 在JMeter压力测试中&#xff0c;我们时常见到的几个场景有&#xff1a;单场景基准测试、单场景并发测试、单场景容量测试、混合场景容量测试、混合场景并发测试以及混合场景稳定性测试 在本篇文章中&#xff0c;我们会用到一些插件&#xff0c;在这边先给大家列出&…