Elasticsearch - 简介

Elasticsearch 作为核心的部分,是一个具有强大索引功能的文档存储库,并且可以通过 REST API 来搜索数据。它使用 Java 编写,基于 Apache Lucene,尽管这些细节隐藏在 API 中。通过被索引的字段,可以用许多不同的聚合方式找到任何被存储(索引)的文档。但是,ElasticSearch不仅仅只提供对这些被索引文档的强大搜索功能。快速、分布式、水平扩展,支持实时文档存储和分析,支持数百台服务器和 PB 级索引数据。同时作为 Elastic stack (aka ELK) 的核心,提供了诸如 LogStash、Kibana 和更多的强大应用。

Kibana 是 Elasticsearch 中专门提供强有力的可视化查询Web应用程序。使用Kibana,能非常简单地为 Elasticsearch 中索引的数据创建查询、图表和仪表盘。
Elasticsearch开放了一个 REST API,你会发现许多文档示例是 HTTP 调用,你可以尝试使用 curl 或 postman 等工具。当然,这个 API 的客户端已经用许多不同的语言编写,包括.Net、Java、Python、Ruby和JavaScript等。

Logstash是一个具备实时处理能力的开源的数据收集引擎。可以动态地从不同的来源收集数据,将数据处理(过滤、变形)过之后统一输出到某个特定地址,为将来更多样化的数据分析做准备。

如果你想阅读更多,Elasticsearch 官方网站 可能是最好的地方。

注意:文章可能比较长,如果对Elasticsearch安装以及了解的,可以直接略过,看ASP.NET Core和Nlog部分,本文所有linux命令均在root用户下操作。

Java环境安装

懒人一键安装

yum install java*

查看JDK版本信息

java -version

Elasticsearch文档

安装

官方网站有很多安装方式,我这里采用的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

ASP.ENT Core结合Nlog进行日志记录

下面是本文介绍的重点内容了,通过Nlog记录日志,将消息发送到logstash,logstash将转换后的消息存储到elasticsearch,并供在kibana中查询使用。

创建ASP.NET Core项目

本文通过VS2017创建的.NETCore 1.1 项目 Elasticsearch.QuickStart

通过Nuget安装Nlog依赖包

NLog.Web.AspNetCore

Nlog.Extensions.Logging (pre版本)

在Startup.cs添加Nlog服务

新增Nlog配置(Web根目录)

<?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的模板信息。

测试Nlog日志记录

在Kibana中查看最终效果

总结

本文只是一个示例教程,希望能起到一个抛砖引玉的作用,详细功能需要大家参考官方文档。Elasticsearch,Kibana,logstash功能非常强大,我也是刚刚接触到,如果有不对的地方,还望大家多多包涵和指正。如果这篇文档对大家有帮助,请点一个赞,谢谢了。

参考

1:LogStash+ElasticSearch简单使用(CentOS)

2:使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据

3:Elastic Stack and Product Documentation

4:Elasticsearch在Centos 7上的安装与配置

5:Nlog 官方文档

6:从零开始搭建一个ELKB日志收集系统

Elasticsearch,Kibana,Logstash,NLog实现ASP.NET Core 分布式日志系统的更多相关文章

  1. ASP.NET Core分布式日志系统ELK实战演练

    一.ELK简介  ELK是Elasticsearch.Logstash和Kibana首字母的缩写.这三者均是开源软件,这三套开源工具组合起来形成了一套强大的集中式日志管理平台. •  Elastics ...

  2. ASP.NET Core分布式项目实战

    ASP.NET Core开发者成长路线图 asp.net core 官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/ ...

  3. ASP.NET Core分布式项目-2.oauth密码模式identity server4实现

    源码下载 这里根据<ASP.NET Core分布式项目-1.IdentityServer4登录中心>的代码来继续更新oauth密码模式,这里的密码模式比上次的客户端模式更安全 在WebAp ...

  4. 【笔记目录2】ASP.NET Core分布式项目实战

    当前标签: ASP.NET Core分布式项目实战 共2页: 上一页 1 2  11.ClientCredential模式总结 GASA 2019-03-11 12:59 阅读:26 评论:0 10. ...

  5. 【笔记目录1】ASP.NET Core分布式项目实战

    当前标签: ASP.NET Core分布式项目实战 共2页: 1 2 下一页  35.Docker安装Mysql挂载Host Volume GASA 2019-06-20 22:02 阅读:51 评论 ...

  6. 如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

    这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore. 第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输 ...

  7. ELK +Nlog 分布式日志系统的搭建 For Windows

    前言 我们为啥需要全文搜索 首先,我们来列举一下关系型数据库中的几种模糊查询 MySql : 一般情况下LIKE 模糊查询  SELECT * FROM `LhzxUsers` WHERE UserN ...

  8. .Net core的日志系统

    .net core是内置了日志系统的,本文这里简单的介绍一下它的基本用法.如下是一个简单的示例: var service = new ServiceCollection() .AddLogging(l ...

  9. Elasticsearch+Kibana+Logstash安装

    安装环境: [root@node- src]# cat /etc/redhat-release CentOS Linux release (Core) 安装之前关闭防火墙 firewalld 和 se ...

随机推荐

  1. CentOS7安装PostgreSQL9.4

    这次选择的数据库安装的是run 文件,更容易掌握.这次数据库全是默认安装,如果有需求的可以自行修改一下的. 这是我的第一篇博客,各位观众老爷,如果觉得哪里有什么不好的,可以留言一起探讨,探讨.有什么问 ...

  2. Hql没有limit,替换方案

    在HQL+MYSQL中不能直接在查询语句中使用LIMIT进行检索,正确方法为: String hql = "from User where id=? order by addDate des ...

  3. 解决Ubuntu SMPlayer播放视频无声音问题

    问题:Ubuntu Kylin 14.04 系统默认装好之后,smplayer播放视频都是正常的,但最近可能由于一些误设置,导致smplayer播放任何格式的视频都无声.解决方法:由于ALSA是Lin ...

  4. Python模块之subprocess--使用Popen来调用系统命令

    当我们需要调用系统的命令的时候,最先考虑的os 模块.用os.system()和os.popen()来进行操作.但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命 令的输 ...

  5. IT学习网站

    网站 网站定位 http://www.51cto.com/ 中国领先的IT技术网站. http://www.iteye.com/ 内容齐全,功能丰富的中文IT技术门户和社区网站. http://www ...

  6. PHP中递归最详解释.

    说到递归函数想必会有很多同学感到晕晕的,很难绕,容易绕错,那下面就让我来为大家详解一下. 首先,什么是递归函数呢? 1.所谓递归:指的是在函数内部,调用函数自身的操作.2.递归分两布:递(从最外层函数 ...

  7. 微信js-sdk接口的使用及ios深坑

    最近再做微信公众号开发,涉及到手机上传图片和拍照的功能. 思路一:使用<input type="file" name="pic" id="pic ...

  8. MySQL加密和解密案例

    define("ENCRYPT",'2998a15c0cd853edad7');//密钥key 被存储的数据库的字段设置成blob格式(二进制) //AES_ENCRYPT 加密 ...

  9. GitBash学习1

    昨晚学了一点GitBash,建立库,向库里添加文件,对比修改的内容等等. 自己做了以下总结 git mkdir <dirname> //建立文件 git cd <dirname> ...

  10. 【LeetCode】327. Count of Range Sum

    题目: Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusiv ...