asp.net core结合Nlog以及ELK进行日志记录

1、首先安装elk

ELK是当下流行的日志监控系统。ELK是Elasticsearch、Logstash、Kibana三个软件的统称。
在ELK日志监控系统中,Logstash负责读取和结构化各类日志+发送给Elasticsearch,Elasticsearch负责存储Logstash发送过来的日志+响应Kibana的查询,Kibana负责从Elasticsearch查询内容+在web界面中向用户展示。
安装ELK之前需要先安装java环境,这里就不赘述了

1.1、 安装elasticsearch(安装包方式安装)

第一步、下载elasticsearch的压缩包并解压,然后把解压后的文件夹移动到usr/local中(视个人情况而定,我一般喜欢把一些第三方包放在这个文件夹中)
下载地址: elasticsearch下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.1-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.14.1-linux-x86_64.tar.gz
mv elasticsearch-7.14.0 /usr/local

解压后就这些文件了
在这里插入图片描述
第二步、修改elasticsearch配置,进入到config文件夹中,修改elasticsearch.yml文件

vim elasticsearch.yml

在这里插入图片描述
找到相应的键值,修改配置为如下

path.data: /usr/local/elasticsearch-7.14.0/data #数据存储路径,改为自己的
path.logs: /usr/local/elasticsearch-7.14.0/logs #日志存储路径,改为自己的
network.host: 0.0.0.0 
http.port: 9200
http.cors.enabled: true 
http.cors.allow-origin: "*"

第三步:创建elasticsearch用户
注意,root用户是不能直接启动elasticsearch的,需要新建用户,然后切换用户去启动elasticsearch,如下

创建elsearch用户组及elsearch用户
groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch
更改elasticsearch-7.14.0文件夹及内部文件的所属用户及组为elsearch:elsearch
chown -R elsearch:elsearch /usr/local/elasticsearch-7.14.0
切换到elsearch用户再启动
su elsearch
cd /usr/local/elasticsearch-7.14.0/bin
./elasticsearch 

至此,elasticsearch配置启动完毕,可以在浏览器输入url: 服务器外网ip:9200 查看是否成功启动:
在这里插入图片描述

1.2、kibana安装配置(安装包方式安装)

第一步、下载logstash的压缩包并解压,然后把解压后的文件夹移动到usr/local中(视个人情况而定,我一般喜欢把一些第三方包放在这个文件夹中)
下载地址: kibana下载

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.14.1-linux-x86_64.tar.gz
tar -xzvf kibana-7.14.1-linux-x86_64.tar.gz
mv kibana-7.14.0-linux-x86_64 /usr/local

解压后的文件
在这里插入图片描述
第二步、修改kibana配置,进入到config文件夹中,修改kibana.yml文件

vim kibana.yml

找到相应的键值,修改配置为如下

server.host: "0.0.0.0" 
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"

配置完后进入到bin文件夹进行启动
在这里插入图片描述
启动完毕,可以浏览器输入url: 服务器外网ip:5601 查看是否成功启动:
在这里插入图片描述

1.3、logstash安装配置(安装包方式安装)

第一步、下载logstash的压缩包并解压,然后把解压后的文件夹移动到usr/local中(视个人情况而定,我一般喜欢把一些第三方包放在这个文件夹中)
下载地址: logstash下载

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.14.1-linux-x86_64.tar.gz
tar -xzvf logstash-7.14.1-linux-x86_64.tar.gz
mv logstash-7.14.0 /usr/local

解压后目录结构大概如下
在这里插入图片描述

第二步、配置logstash,进入到config文件夹中
找到logstash.yml配置一些内容,找到相应的键值,修改配置为如下

path.data: /usr/local/logstash-7.14.0/data #数据的路径,设置为自己的路径
http.host: 0.0.0.0 
http.port: 9600-9700

然后配置日志的记录,应该会有一个logstash-sample.conf(如果没有可以新建一个 vim logstash-sample.conf,名字无所谓,后面启动时会指定使用改配置文件进行启动 )

vim logstash-sample.conf

写入如下内容:

input {
# 测试使用file方式进行日志的输入
#  file{
#    path => ["/var/log/logstash/*.log"]
#    start_position => "beginning"
#    stat_interval => 1
#    discover_interval => 15
#  }
  beats {
    port => 5044
  }
  # 使用tcp的方式进行日志的输入,这边是.Net中写入elk时会使用的链接
  tcp{
    host => "192.168.233.128"
    port => 9601
  }
}
filter{
   grok{
     match => {
        "message" => "#%{DATA:request_time}#%{DATA:log_level}#%{DATA:log_info}#"
     }
   }
}
output {
  elasticsearch {
    hosts => ["http://192.168.233.128:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

启动logstash:

./logstash -f /usr/local/logstash-7.14.0/config/logstash-sample.conf &

到这里elk的配置已经完成

2、项目配置日志写入elk

项目中引入nlog相关的包,添加使用nlog

2.1、配置nlog写入日志到logstash中

nlog.config配置文件配置,注意配置的address设置为logstash中设置的input =>tcp中的链接地址

<?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="Error" 
      internalLogFile="log/internalLog.txt"
      >
  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>
  <!-- the targets to write to -->
  <targets>
   <!-- sql日志target -->
 <!--<target xsi:type="File" name="SqlLog" fileName="${currentdir}/log/sql/${shortdate}.log"
           layout="${longdate} ${logger} ${uppercase:${level}}
${newline}${message} ${exception:format=tostring}${newline}" />-->
	  <!-- Tcp日志target -->
	  <target xsi:type="Network"
			  name="ownLog-tcp"
			  keepConnection="false"
			  address ="tcp://192.168.233.128:9601/"
			  layout="${longdate} ${logger} ${uppercase:${level}} 
${newline}【请求url】:${aspnet-request-url}
${newline}【输出信息】:${message},【堆栈信息】:${exception: Type, ToString, Method, StackTrace} 
${newline}"
            />
  </targets>
  <!-- rules to map from logger name to target -->
  <rules>
    <!--<logger name="Microsoft.EntityFrameworkCore.Database.*" 
            writeTo="SqlLog" />-->
    <!-- <logger name="*" minlevel="Error" writeTo="ErrorInfo" />-->
     <!--测试只控制器中的日志记录到elk中,仅警告级别以上的日志会被写入 -->
	 <logger name="HxCore.Web.Controllers.*" minlevel="Warning" writeTo="ownLog-tcp" />
  </rules>
</nlog>

控制器中添加测试方法
在这里插入图片描述
启动程序,调用该方法,这时日志就会被写入到elasticsearch中同时会创建一个logstash-当前时间的索引,可以打开kibana面板进行查看,查看之前先建立一个索引模式来匹配你的索引。
在这里插入图片描述
建立索引模式(截图中写错了我logstash中配置的索引是index => “logstash-%{+YYYY.MM.dd}”):
在这里插入图片描述
然后进入到kibana面板=》discover标签=》logstash*索引模式查看写入的日志
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用NLog日志记录到SqlServer的步骤: 1. 首先,需要在项目中安装NLogNLog.Web.AspNetCore包。可以使用NuGet包管理器或在项目文件中手动添加依赖项。 2. 在项目的appsettings.json文件中添加以下NLog配置: ``` "NLog": { "targets": { "database": { "type": "Database", "dbProvider": "System.Data.SqlClient", "connectionString": "Server=[server];Database=[database];User Id=[user];Password=[password];", "commandText": "INSERT INTO [Logs] ([Date], [Level], [Logger], [Message], [Exception]) VALUES (@Date, @Level, @Logger, @Message, @Exception);", "parameter": [ { "name": "@Date", "layout": "${date}" }, { "name": "@Level", "layout": "${level}" }, { "name": "@Logger", "layout": "${logger}" }, { "name": "@Message", "layout": "${message}" }, { "name": "@Exception", "layout": "${exception}" } ] } }, "rules": [ { "logger": "*", "minLevel": "Trace", "writeTo": "database" } ] } ``` 3. 在Startup.cs文件中添加以下代码: ```csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { //... loggerFactory.AddNLog(); //... app.UseMiddleware<NLogMiddleware>(); //... } ``` 4. 创建一个名为Logs的表,用于存储日志记录。表结构应如下所示: ```sql CREATE TABLE [dbo].[Logs]( [Id] [int] IDENTITY(1,1) NOT NULL, [Date] [datetime2](7) NOT NULL, [Level] [nvarchar](50) NOT NULL, [Logger] [nvarchar](250) NOT NULL, [Message] [nvarchar](max) NOT NULL, [Exception] [nvarchar](max) NULL, CONSTRAINT [PK_Logs] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] ``` 5. 现在,可以在代码中使用NLog记录日志了。例如: ```csharp private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("Hello, world!"); return View(); } ``` 这将在Logs表中插入一条日志记录。 希望这可以帮助到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值