Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统php
Elasticsearch 官方网站 html
Elasticsearch文档java
NLog.Targets.ElasticSearch packagenode
Elasticsearch 做为核心的部分,是一个具备强大索引功能的文档存储库,而且能够经过 REST API 来搜索数据。git
它使用 Java 编写,基于 Apache Lucene,尽管这些细节隐藏在 API 中。github
经过被索引的字段,能够用许多不一样的聚合方式找到任何被存储(索引)的文档。apache
可是,ElasticSearch不单单只提供对这些被索引文档的强大搜索功能。centos
快速、分布式、水平扩展,支持实时文档存储和分析,支持数百台服务器和 PB 级索引数据。浏览器
同时做为 Elastic stack (aka ELK) 的核心,提供了诸如 LogStash、Kibana 和更多的强大应用。bash
Kibana 是 Elasticsearch 中专门提供强有力的可视化查询Web应用程序。
使用Kibana,能很是简单地为 Elasticsearch 中索引的数据建立查询、图表和仪表盘。
Elasticsearch开放了一个 REST API,你会发现许多文档示例是 HTTP 调用,你能够尝试使用 curl 或 postman 等工具。
固然,这个 API 的客户端已经用许多不一样的语言编写,包括.Net、Java、Python、Ruby和JavaScript等。
Logstash是一个具有实时处理能力的开源的数据收集引擎。能够动态地从不一样的来源收集数据,将数据处理(过滤、变形)过以后统一输出到某个特定地址,为未来更多样化的数据分析作准备。
懒人一键安装
yum install java*
查看JDK版本信息
java -version
官方网站有不少安装方式,我这里采用的rpm安装,你们能够按照本身习惯的方式进行安装便可,下载地址。
//进入local目录 cd /usr/local //建立elasticsearch文件夹 mkdir elasticsearch //进入elasticsearch文件夹 cd elasticsearch //开始下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.rpm //开始安装 rpm -ivh elasticsearch-5.5.0.rpm
//查找安装目录 whereis elasticsearch //进入安装目录 cd /etc/elasticsearch //编辑配置文件 vi elasticsearch.yml
主要配置Network.host(本机ip)和http.port(默认9200)(目前单节点模式,其余参数请参考官方文档)
//开启端口9200 firewall-cmd --add-port=9200/tcp --permanent //从新加载配置 firewall-cmd --reload //设置服务开机启动 systemctl enable elasticsearch //启动服务 systemctl start elasticsearch
在浏览器打开http://192.168.30.128:9200,以下图所示表示启动成功了
Kibana文档
//进入elasticsearch目录 cd /usr/local/elasticsearch //下载Kibana rpm 64位包 wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-x86_64.rpm //安装Kibana rmp -ivh kibana-5.5.0-x86_64.rpm
//进入安装目录 cd /etc/kibana //编辑配置文件 vi kibana.yml
设置端口号:5601,Host地址:"192.168.30.128" ,elasticsearch服务地址为:"http://192.168.30.128:9200"
//开启端口5601 firewall-cmd --add-port=5601/tcp --permanent //从新加载配置 firewall-cmd --reload //设置服务开机启动 systemctl enable kibana //启动服务 systemctl start kibana
在浏览器打开http://192.168.30.128:5601,将进入到Kibana管理界面
LogStash文档
//进入elasticsearch目录 cd /usr/local/elasticsearch //下载logstash rpm包 wget https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.rpm //安装rpm包 rpm -ivh logstash-5.5.0.rpm
//进入安装目录 cd /etc/logstash //进入conf.d目录 cd conf.d //新增配置信息 vi nlog.conf
input:采用TCP监控本机8001端口的消息
filter:使用grok 插件,自定义消息格式,推荐使用grokdebug在线进行调试
output:使用elasticsearch做为数据存储
注意:官方有很是丰富的插件进行消息处理,具体能够查看官方文档。
//开启端口8001 firewall-cmd --add-port=8001/tcp --permanent //重载配置 firewall-cmd --reload //设置开机启动 systemctl enable logstash //启动logstash systemctl start logstash
下面是本文介绍的重点内容了,经过Nlog记录日志,将消息发送到logstash,logstash将转换后的消息存储到elasticsearch,并供在kibana中查询使用。
本文经过VS2017建立的.NETCore 1.1 项目 Elasticsearch.QuickStart
NLog.Web.AspNetCore
Nlog.Extensions.Logging (pre版本)
<?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="Warn" internalLogFile="internal-nlog.txt"> <extensions> <!--enable NLog.Web for ASP.NET Core--> <add assembly="NLog.Web.AspNetCore"/> </extensions> <!-- define various log targets --> <!--定义日志文件目录--> <variable name="logDirectory" value="${basedir}/logs/${shortdate}"/> <variable name="nodeName" value="node1"/> <targets async="true"> <!-- 所有日志target --> <target xsi:type="File" name="allfile" fileName="${logDirectory}/nlog-all/${shortdate}.log" layout="#node1#${longdate}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#" keepFileOpen="false" /> <!-- 本地文件日志target --> <target xsi:type="File" name="ownLog-file" fileName="${logDirectory}/nlog-${level}/${shortdate}.log" layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#" keepFileOpen="false" /> <!-- Tcp日志target --> <target xsi:type="Network" name="ownLog-tcp" keepConnection="false" address ="tcp://192.168.30.128:8001" layout="#${longdate}#${nodeName}#${logger}#${uppercase:${level}}#${callsite}#${callsite-linenumber}#${aspnet-request-url}#${aspnet-request-method}#${aspnet-mvc-controller}#${aspnet-mvc-action}#${message}#${exception:format=ToString}#" /> <!--grok 规则--> <!--%#{DATA:request_time}#%{DATA:node_name}#%{DATA:class_name}#%{DATA:log_level}#%{DATA:call_site}#%{DATA:line_number}#%{DATA:request_url}#%{DATA:request_method}#%{DATA:container_name}#%{DATA:action_name}#%{DATA:log_info}#%{DATA:exception_msg}#--> <!--空白--> <target xsi:type="Null" name="blackhole" /> </targets> <!--日志级别 Trace -》Debug-》 Info -》Warn-》 Error-》 Fatal--> <!--日志规则--> <rules> <!--所有日志, 包括Microsoft日志--> <logger name="*" minlevel="Trace" writeTo="allfile" /> <!--自定义日志,排除Microsoft日志--> <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" /> <logger name="*" minlevel="Debug" writeTo="ownLog-file" /> <logger name="*" minlevel="Info" writeTo="ownLog-tcp" /> </rules> </nlog>
注意:Tcp target中的address指向在logstash中监听的地址,在注释中也给出来了grok的模板信息。
1:LogStash+ElasticSearch简单使用(CentOS)
2:使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
3:Elastic Stack and Product Documentation