.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

浙公网安备 33010602011771号