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. 我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序

    大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用. 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭 ...

  2. clang如何获得程序控制流图

    在低版本的clag中,可以直接clang -cc1 -analyze -cfg-dump 1.c来获得程序控制流图,但较高版本后就不行了 另外clang -cc1默认仅限当前目录,所以会出现fata ...

  3. 第12章 X.509证书库的Fluent API - IdentityModel 中文文档(v1.0.0)

    存储X.509证书的常见位置是Windows X.509证书存储区.商店的原始API有点神秘(在.NET Framework和.NET Core之间也略有变化). X509类是一个简化的API从所述存 ...

  4. c# 多种方法调整屏幕亮度

    Github: https://github.com/CHNMaxGor/AjustScreenBrightness 方法一: 使用网上常说的 Gdi32.dll 下的 SetDeviceGammaR ...

  5. 基础测试jmeter5.0+badboy(从小白到入门)

    1]测试工具jmeter环境安装 1.1]安装jdk环境 1:必须安装jdk8.0(我尝试安装最新版本不行,好像当时没有配置好.之后安装8.0遍可以正常运行)下载地址:单击此段 配置jdk环境:鼠标右 ...

  6. 给WEB初学者一些有效率的建议

    因为IT互联网发展的非常迅速,而web前端这块很火,目前工资水平给的很高,在市场上也是非常的稀缺人才,现在各个行业转行做web前端的很多,今天给大家一些建议,希望新手少走点弯路吧! 建议一:有一个比较 ...

  7. 产品经理之PRD详解

    文章大纲 一.PRD基础二.PRD要素讲解三.相关模板下载四.参考文章   一.PRD基础 1. PRD简介    PRD中文意思为:产品需求文档.PRD的主要使用对象有:开发.测试.项目经理.交互设 ...

  8. 20190429 - 如何访问 macOS 的 httpd、mysql 等服务

    问题:在局域网,通过其它机器访问 macOS 上的服务时,提示拒绝. 解决:将 macOS 防火墙 80.3306 端口打开. macOS 内置防火墙,也许开启了防火墙.Icefloor 是一个老牌的 ...

  9. python --- 基数排序算法

    基数排序的方式可以采用LSD,由键值的最右边开始,适用于数值整数.或者MSD,由键值的最左边开始,适用于字符串整数.在LSD基数排序中每一次的处理都是将关键字按顺序放置在其各自的称为桶的数据结构中,而 ...

  10. Java中Map和Object的互相转换方式

    一.使用Apache中的BeanUtils类,导入commons-beanutils包. Jar包Maven下载地址:https://mvnrepository.com/artifact/common ...