.NET下使用ELK日志中心

ELK原理与介绍:https://www.cnblogs.com/aresxin/p/8035137.html

 

一、Elasticsearch

包含JDK下载地址:https://www.elastic.co/cn/downloads/elasticsearch

不含JDK下载地址:https://www.elastic.co/cn/downloads/elasticsearch-no-jdk

运行bin目录下的”elasticsearch.bat“文件,等待一段时间运行完后,浏览器打开http://localhost:9200,出现如下图即为成功

如需更改端口:打开config目录下的”elasticsearch.yml“文件,修改“http.port”选项

注:这个比较吃内存,如果内存较小会运行失败。我跑完都快占用4G了 

二、Logstash

下载地址:https://www.elastic.co/cn/downloads/logstash

输入配置:https://www.elastic.co/guide/en/logstash/current/input-plugins.html

输出配置:https://www.elastic.co/guide/en/logstash/current/output-plugins.html

1.在config目录下,新建“logstash-demo.conf”文件,如果要设置账号密码,则去掉#注释

input {
  tcp {
    port => 5044
    type => "service1-log"
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "service1-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

多个服务时的配置:

input {
  tcp {
    port => 5044
    type => "service1-log"
  }
  tcp {
    port => 5045
    type => "service2-log"
  }
}

output {
  if [type] == "service1-log" {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "service1-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "changeme"
    }
  }
  if [type] == "service2-log" {
    elasticsearch {
      hosts => ["http://localhost:9200"]
      index => "service2-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "changeme"
    }
  }
}

2.进入bin目录,打开CMD执行命令:

logstash.bat -f ../config/logstash-demo.conf

出现如下图信息则运行成功:

三、Kibana

下载地址:https://www.elastic.co/cn/downloads/kibana

运行bin目录下的”kibana.bat“文件,出现如下信息后,就可以用浏览器能打开http://localhost:5601了

如需更改端口:打开config目录下的”kibana.yml“文件,修改“server.port”选项

如需启用汉化:打开config目录下的”kibana.yml“文件,修改“i18n.locale”选项,值为 zh-CN

四、.NET5控制台

1.Nuget安装“NLog”

2.创建“NLog.config”配置文件,并设置属性“始终复制”

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets async="true">
    <target name="logstash" xsi:type="Network" address="tcp://127.0.0.1:5044" keepConnection="false"
            layout="[${uppercase:${level}}] [${longdate}] [${logger}] | ${message} ${exception}" />
  </targets>
  <rules>
    <logger name="*" level="Info,Error" writeTo="logstash" />
  </rules>
</nlog>

3.Main函数代码

using NLog;
using System;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            var logger = LogManager.LoadConfiguration("NLog.config").GetCurrentClassLogger();
            logger.Info($"当前GUID:{Guid.NewGuid()}");
            try
            {
                int n1 = 1;
                int n2 = 0;
                int n3 = n1 / n2;
            }
            catch (Exception e)
            {
                logger.Error(e);
            }
            Console.WriteLine("Hello World!");
        }
    }
}

 代码至少执行一次,再进行下面的步骤,不然截图会有差异

五、Kibana后台设置

1、浏览器打开http://localhost:5601

2、

 

3、

 4、输入名称 service1-* 后,下一步按钮才呈可点击状态

 5、

6、找到messge字段,点击修改

7、把包含警告信息的文本标为黄色,把包含错误信息的文本标为红色

8、查看日志的位置

附录、搭配RabbitMQ使用

过程草图:

 1、“logstash-demo.conf”改造为:

input {
  rabbitmq {
    type => "service1-log"
   exchange => "service1-log" #订阅请求失败后重试之前等待的时间(以秒为单位),必填项 subscription_retry_interval_seconds => 3 #是否持久化,默认false durable => true #rabbitmq的地址,必填项 host => "localhost"
   port => 5672 user => "guest" password => "guest" } rabbitmq { type => "service2-log"
   exchange => "service2-log" subscription_retry_interval_seconds => 3 durable => true host => "localhost"
port => 5672 user => "guest" password => "guest" } } output { if [type] == "service1-log" { elasticsearch { hosts => ["http://localhost:9200"] index => "service1-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } } if [type] == "service2-log" { elasticsearch { hosts => ["http://localhost:9200"] index => "service2-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } } }

2、控制台安装“Nlog.RabbitMQ.Target”Nuget包,“NLog.config”的改为:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    xmlns:haf="https://github.com/haf/NLog.RabbitMQ/raw/master/src/schemas/NLog.RabbitMQ.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    internalLogToConsole="true">

  <extensions>
    <add assembly="NLog.Targets.RabbitMQ" />
  </extensions>

  <targets async="true">
    <!-- when http://nlog.codeplex.com/workitem/6491 is fixed, then xsi:type="haf:RabbitMQ" instead;
       these are the defaults (except 'topic', 'appid', and 'useJSON'): 
    -->
    <target name="RabbitMQTarget"
        xsi:type="RabbitMQ"
        username="guest"
        password="guest"
        hostname="localhost"
        exchange="service1-log"
        port="5672"
        topic="DemoApp.Logging.{0}"
        vhost="/"
        durable="true"
        appid="NLog.RabbitMQ.DemoApp"
        maxBuffer="10240"
        heartBeatSeconds="3"
        useJSON="true"
        layout="${message}"
        compression="none"
        />
  </targets>

  <rules>
    <logger name="*" minlevel="Info,Warn,Error" writeTo="RabbitMQTarget"/>
  </rules>

</nlog>

 参考:https://github.com/dtretyakov/NLog.RabbitMQ

原文地址:https://www.cnblogs.com/shousiji/p/15222276.html