ELK (ElasticSearch、LogStash以及Kibana)三者组合是一个非常强大的工具,这里我们来实现监控日志文件并且收到日志到ElasticSearch搜索引擎,利用Kibana可视化工具实现ElasticSearch查询.

ElasticSearch

官方描述

Elasticsearch is a distributed, RESTful search and analytics engine capable of solving a growing number of use cases. As the heart of the Elastic Stack, it centrally stores your data so you can discover the expected and uncover the unexpected.

安装

官方下载地址 https://www.elastic.co/cn/downloads/elasticsearch 根据自己的系统版本下载安装,个人电脑系统Ubuntu18.04 因此选择 Linux 请根据自己的操作系统选择合适的版本下载

下载完成后解压使用,解压完成之后,文件目录如下:

├── bin
├── config
├── data
├── lib
├── LICENSE.txt
├── logs
├── modules
├── node-slaver-1
├── NOTICE.txt
├── plugins
└── README.textile

其中我们使用的命令位于bin目录,配置文件位于config目录,建议将解压好的文件放在自己的home目录下,防止出现权限不足的错误问题.

配置

进入config目录,其文件列表如下

├── elasticsearch.keystore
├── elasticsearch.yml
├── jvm.options
├── log4j2.properties
├── role_mapping.yml
├── roles.yml
├── users
└── users_roles

我们重点关注 ElasticSerach配置文件 elasticsearch.yml、JVM虚拟机配置文件 jvm.options以及日志打印配置文件log4j2.properties

从这些配置文件我们也可以看出ElasticSearch和Java有莫大的关系,是的,ElasticSearch 是运行在Java虚拟机上的系统。

elasticSearch.yml 配置文件

此文件中部大部分都是注释我们主要关心的有以下内容:

  • cluster.name -- 集群名称
  • node.name -- 此节点的名称(不配置的话会提供一个UUID的名称)
  • path.logs -- 日志目录,建议保持默认
  • http.port -- ElasticSearch运行端口 默认9200

JVM 配置文件

这里我们主要配置下内存大小根据自己的硬件配置来调整ElasticSearch的内存大小(一般不需要修改,除非你的电脑配置很好,或者配置略低,需要修改这个内存参数)

  • Xms1g
  • Xmx1g

其他的参数暂时不需要修改

日志配置

日志配置一般不需要改动,你可以修改日志的格式等信息,可以参考Log4J的日志格式命令来配置,这里不做过多的说明.

测试

配置完成之后,进入bin目录,来执行elasticSearch命令

./elasticsearch

看到start字样,在浏览器或者终端访问http://localhost:9200 (如果你修改了ElasticSearch的端口,这里的9200改成你配置的端口号) 即可看到当前ElasticSearch节点的信息,如下:

{
"name": "node-master",
"cluster_name": "cluster-dev",
"cluster_uuid": "i1ti04HsQA6TK_ywrabGlA",
"version": {
"number": "6.4.1",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "e36acdb",
"build_date": "2018-09-13T22:18:07.696808Z",
"build_snapshot": false,
"lucene_version": "7.4.0",
"minimum_wire_compatibility_version": "5.6.0",
"minimum_index_compatibility_version": "5.0.0"
},
"tagline": "You Know, for Search"
}

至于ElasticSearch的其他使用方法,请参考这篇文章:ElasticSearch常用命令

Kibana

Kibana lets you visualize your Elasticsearch data and navigate the Elastic Stack, so you can do anything from learning why you're getting paged at 2:00 a.m. to understanding the impact rain might have on your quarterly numbers.

Kibana :ElasticSearch的可视化工具,安装Kibana很简单,下载安装包,解压,配置,运行即可

安装

官方下载地址 https://www.elastic.co/cn/downloads/kibana 根据自己的系统版本下载安装,个人电脑系统Ubuntu18.04 因此选择 LINUX-64-BIT 请根据自己的操作系统选择合适的版本下载

解压之后的目录结构为

.
├── bin
├── config
├── data
├── LICENSE.txt
├── node
├── node_modules
├── NOTICE.txt
├── optimize
├── package.json
├── plugins
├── README.txt
├── src
├── webpackShims
└── yarn.lock

和ElasticSearch目录结构类似,binconfig目录是我们重点关注的

配置

打开config目录,编辑其中的唯一的一个文件kibana.yml ,其中的几个参数需要我们关注

  • server.port Kibana运行的端口 默认5601
  • elasticsearch.url ElasticSearch运行地址,默认是http://localhost:9200 如果在上面配置ElasticSearch中你修改了ElasticSearch的运行端口那么,这里也需要做相应的修改.
  • elasticsearch.username 如果你的ElasticSearch配置了用户名,那么这里需要完善
  • elasticsearch.password 同上,这里设置密码

测试

回到Kibana的bin目录下,运行./kibana即可,打开浏览器访问(http://localhost:5601)即可进入Kibana管理界面,这里我们只要使用DevTools功能,其他的统计等功能,我们这里暂时不做研究学习.

在DevTools命令中我们可以非常方便的使用ElasticSearch命令,并且可以高亮以及提示,非常的方便。

LogStash

Logstash is an open source, server-side data processing pipeline that ingests data from a multitude of sources simultaneously, transforms it, and then sends it to your favorite “stash.” (Ours is Elasticsearch, naturally.)

安装

官方下载地址 https://www.elastic.co/downloads/logstash 根据自己的系统版本下载安装,个人电脑系统Ubuntu18.04 因此选择 ZIP 请根据自己的操作系统选择合适的版本下载

然后解压备用

配置

LogStash 内部有非常多的适配,包括Kafka、ElasticSearch、Redis、Nginx等等,输入支持文件、终端等,下面我们就模拟日志文件,然后利用Logstash收集转换,规整到ElasticSearch中.

创建自定义日志脚本

首先我们先完成一个Shell脚本,这个SHELL脚本会每隔1S输出时间写入文件内,如下:

rm /tmp/logstash.log
set index=2
while true
do
cur_date="`date '+%Y %m %d %H %m %S'`"
echo ${cur_date} >> /tmp/logstash.log
sleep 1
done

该脚本会在/tmp目录下创建logstash.log日志文件,并把数据写入到该文件中,Logstash需要监控这个文件,并把这个文件格式化.

创建启动配置文件

LogStash配置内容如下(文件名为conf.cnf 保存在Logstash的目录下):

  • input 表示数据输入 这里我们使用file监控文件 path表示监控文件目录,支持匹配符,start_position表示监控的起始位置
  • filter 过滤处理 可以将过滤转换我们的数据,也是比较复杂的一块配置
  • output 输出,这里可以输出到控制台,ElasticSearch、Redis等系统,支持多输出配置.
input{
file{
path => "/tmp/logstash.log"
start_position => "end"
}
} filter {
grok {
match => { "message" => "%{YEAR:year} %{MONTHNUM:month} %{MONTHDAY:day} %{HOUR:hours} %{MINUTE:minute} %{SECOND:second}"}
} json {
source => "message"
target => "jsoncontent"
}
} output{
elasticsearch{
hosts => ['127.0.0.1:9200']
index => 'log'
}
}

另外根据上面shell脚本中的代码,各个时间属性之间使用空格隔开,因此我们grok也需要根据是假的日志情况适配。所以%{YEAR:year} %{MONTHNUM:month} %{MONTHDAY:day} %{HOUR:hours} %{MINUTE:minute} %{SECOND:second} 其中冒号前面的表示类型。冒号后面表示字段属性,在转换的过程中会作为key来存储到ElasticSearch中,当然这种类型是非常多的,官方支持的位置为:https://github.com/elastic/logstash

最后输出,前期调试我们可以输出到控制台中,配置如下:

output{
stdout{
codec => rubydebug
}
}

输出正确后我在写入到ElasticSearch中即可

测试

首先我们先使用控制台标准输出,查看效果

控制台打印

修改conf.cnf文件最后的output属性为

output{
stdout{
codec => rubydebug
}
}

切换到Logstash目录下,输入./bin/logstash -f ./conf.cnf 运行

Sending Logstash logs to /home/tao/soft/logstash/logs which is now configured via log4j2.properties
[2018-09-26T12:45:50,585][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2018-09-26T12:45:51,080][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.4.1"}
[2018-09-26T12:45:54,236][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>8, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2018-09-26T12:45:54,739][INFO ][logstash.inputs.file ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/home/tao/soft/logstash/data/plugins/inputs/file/.sincedb_485b967e0d7e8bef0d95852573188f7a", :path=>["/tmp/logstash.log"]}
[2018-09-26T12:45:54,780][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x5fa716fa run>"}
[2018-09-26T12:45:54,838][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2018-09-26T12:45:54,853][INFO ][filewatch.observingtail ] START, creating Discoverer, Watch with file and sincedb collections
[2018-09-26T12:45:55,110][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}

这个时候因为文件还没有数据新增,所LogStash会时时监控该为见,我们调用Shell,向文件中写入数据,观察结果(其中的警告信息请忽略,是因为转换过程中数字以0开头,就会出现这个错误),另外注意要关闭这个shell脚本(Ctrl+C),防止干扰我们数据

[2018-09-26T12:47:55,748][WARN ][logstash.filters.json    ] Error parsing json {:source=>"message", :raw=>"2018 09 26 12 09 55", :exception=>#<LogStash::Json::ParserError: Invalid numeric value: Leading zeroes not allowed
at [Source: (byte[])"2018 09 26 12 09 55"; line: 1, column: 7]>}
{
"host" => "linux",
"@version" => "1",
"message" => "2018 09 26 12 09 55",
"year" => "2018",
"@timestamp" => 2018-09-26T04:47:55.646Z,
"month" => "09",
"second" => "55",
"hours" => "12",
"path" => "/tmp/logstash.log",
"minute" => "09",
"tags" => [
[0] "_jsonparsefailure"
],
"day" => "26"
}
[2018-09-26T12:47:56,762][WARN ][logstash.filters.json ] Error parsing json {:source=>"message", :raw=>"2018 09 26 12 09 56", :exception=>#<LogStash::Json::ParserError: Invalid numeric value: Leading zeroes not allowed
at [Source: (byte[])"2018 09 26 12 09 56"; line: 1, column: 7]>}
{
"host" => "linux",
"@version" => "1",
"message" => "2018 09 26 12 09 56",
"year" => "2018",
"@timestamp" => 2018-09-26T04:47:56.656Z,
"month" => "09",
"second" => "56",
"hours" => "12",
"path" => "/tmp/logstash.log",
"minute" => "09",
"tags" => [
[0] "_jsonparsefailure"
],
"day" => "26"
}

可以看到数据已经转换成json类型,其中year,month。day以及hours正是我们在gork中配置的

输入到ElasticSearch

修改最后的输出

output{
elasticsearch{
hosts => ['127.0.0.1:9200']
index => 'log'
}
}

此时ElasticSearch应该启动在9200端口,如果是其他端口,需要做相应的修改

和上述的命令一样,./bin/logstash -f ./conf.cnf 运行,并且运行Shell脚本,此时通过Kibana查询数据

GET /log/doc/_search 就可以看到我们源源不断向ElasticSearch写入的日志记录了.

ElasticSearch、Logstash、Kibana 搭建高效率日志管理系统的更多相关文章

  1. 用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

    用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana ...

  2. 【转】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

    [转自]https://my.oschina.net/itblog/blog/547250 摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticS ...

  3. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台

    一.前言 1.ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进 ...

  4. 【Big Data - ELK】ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

    摘要: 前段时间研究的Log4j+Kafka中,有人建议把Kafka收集到的日志存放于ES(ElasticSearch,一款基于Apache Lucene的开源分布式搜索引擎)中便于查找和分析,在研究 ...

  5. Elasticsearch+Logstash+Kibana搭建分布式日志平台

    一.前言 编译安装 1.ELK简介 下载相关安装包地址:https://www.elastic.co/cn/downloads ELK是Elasticsearch+Logstash+Kibana的简称 ...

  6. ELK(ElasticSearch+Logstash+ Kibana)搭建实时日志分析平台

    一.简介 ELK 由三部分组成elasticsearch.logstash.kibana,elasticsearch是一个近似实时的搜索平台,它让你以前所未有的速度处理大数据成为可能. Elastic ...

  7. [Big Data - ELK] ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

    ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自: http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志. ...

  8. 13: ELK(ElasticSearch+Logstash+ Kibana)搭建实时日志分析平台

    参考博客:https://www.cnblogs.com/zclzhao/p/5749736.html 51cto课程:https://edu.51cto.com/center/course/less ...

  9. Elasticsearch + Logstash + Kibana 搭建教程

    # ELK:Elasticsearch + Logstash + Kibana 搭建教程 Shipper:日志收集者.负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,输出到Redis暂存 ...

随机推荐

  1. Element-ui使用技巧

    使用第三方字体包 把下载后的*.zip字体包放到项目中在main.js中引用. import "@/assets/font/iconfont.css"; 注意一定要放到elemen ...

  2. ASP.NET Core微服务实战系列

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...

  3. Docker最全教程之Go实战,墙裂推荐(十八)

    前言 与其他语言相比,Go非常值得推荐和学习,真香!为什么?主要是可以直接编译成机器代码(性能优越,体积非常小,可达10来M,见实践教程图片)而且设计良好,上手门槛低.本篇主要侧重于讲解了Go语言的优 ...

  4. .Net Project 常规结构

    目录:一个.NET网站的成长历程 在个人的日常工作和学习中,接触到不少的项目,这些项目结构大同小异,其结构的核心思想无外乎“分层“. 分层?从字面上理解,看似简单,实则不然.这需要从多个维度去看待这个 ...

  5. spring boot 2.0 Feign的客户端

    1.pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId ...

  6. JS 实现的年月日三级联动

    js文件 SYT="-请选择年份-"; SMT="-请选择月份-"; SDT="-请选择日期-"; BYN=50;//年份范围往前50年 A ...

  7. LogWriter: Operating system error 21(error not found) encountered

      一台老旧的数据库服务器(SQL Server 2005)突然报如下错误,而且数据库处于RECOVERY PENDING ,检查错误日志,发现这个错误是突然出现的.没有任何其它人为误操作导致 Dat ...

  8. 如何让 Editplus 支持 SQL 语法高亮

    editplus 用来编辑或查看一些常用程序源码都很方便,而且软件小巧,但是他原生不能支持对 SQL 文件的高亮显示,有点遗憾,但好在我们可以自定义这种高亮显示,那么要如何设置呢 1. 首先点击下载文 ...

  9. PHP全栈学习笔记9

    php的会话控制,什么是会话控制,http等. 什么是会话控制思想,http协议. cookie 和 session http是超文本传输协议,是网络上最广泛的一种网络协议. http最大特点是无连接 ...

  10. CSS揭秘—灵活的背景图(三)

    前言: 所有实例均来自<CSS揭秘>,该书以平时遇到的疑难杂症为引,提供解决方法,只能说秒极了,再一次刷新了我对CSS的认知 该书只提供了关键CSS代码,虽然有在线示例代码链接,但访问速度 ...