内容简介:“ELK”是三个开源项目的首字母缩写:Elasticsearch,Logstash和Kibana。Elastic Stack比ELK Stack更加灵活且强大目前官网的ELK教程使用的是ElasticSearch+Filebeat+Kibana,所以我们也先使用这三个组件来从零搭建ELK,关于Logstash后文会用到。
“ELK”是三个开源项目的首字母缩写:Elasticsearch,Logstash和Kibana。
- Elasticsearch是一个搜索和分析引擎。
- Logstash是一个服务器端数据处理管道,它同时从多个源中提取数据,对其进行转换,然后将其发送到比如Elasticsearch这样的“数据库”中进行存储。
- Kibana可以对Elasticsearch中的数据进行数据可视化。
什么是Elastic Stack
Elastic Stack比ELK Stack更加灵活且强大
Elastic Stack发展历程
- Elasticsearch是核心
- LogStash负责数据的收集与发送、Kibana负责展示数据
- 社区越来越大,使用案例也越来越多
- 2015年,社区在ELK Stack中引入了一系列轻量级,单用途的数据发送器,叫做Beats
- 那么这个阶段的Stack,我们到底应该叫BELK? BLEK? ELKB? 首字母缩写并不重要
- 如此简单易用开源的产品,不应该只局限于首字母缩写,所以有了 Elastic Stack
从零搭建ELK,快速收集 Mysql 日志并实现可视化
目前官网的ELK教程使用的是ElasticSearch+Filebeat+Kibana,所以我们也先使用这三个组件来从零搭建ELK,关于Logstash后文会用到。
Filebeat是一个轻量级的收集与发送日志数据的组件,将它安装在你的服务器上,类似一个代理,它将监控你指定路径下的日志文件,然后将日志信息发送给ElasticSearch或LogStash
下载并解压
请自行选择自己的操作系统进行安装,并找到对应的安装目录,比如我现在使用的是Mac系统,下载下来的为gzip的压缩包,然后直接解压即可,如下图:
所在目录为/ekl。
运行
启动ElasticSearch
./elasticsearch-7.1.0/bin/elasticsearch 复制代码
启动Kibana
./kibana-7.1.0-darwin-x86_64/bin/kibana 复制代码
启动Filebeat
cd filebeat-7.1.1-darwin-x86_64 ./filebeat modules enable mysql ./filebeat -e -c filebeat.yml 复制代码
使用Kibana
1. 访问Kibana
浏览器打开 http://localhost:5601
2. 进入dashboard
Collapse默认是收起来的,展开后可找到Dashboard,点击即可
3.初始化
Dashboard页面的展示出来了filebeat帮我们创建的索引,如下图:
在Index pattern输入 filebeat*
即可匹配到filebeat所创建的索引:
点击Next step,表示我们现在想将filebeat*所匹配到的索引数据在kibana中进行查看。
第二步需要我们选择一个时间字段,时间过滤器将使用此字段按时间过滤数据。您可以选择不包含时间字段,但无法按时间范围缩小数据范围。不太明白这个时间字段意思,我们选择下拉列表的最后一个可选值 I don't want to use the Time Filter
,然后点击Create index pattern。创建后进入到的页面展示出了索引所包含的字段以及字段类型,并且你也是可以去修改字段类型的,这里就不演示了。
4. 使用
点击进入到Discover就可以进行查看和搜索日志,如下下图:
可以使用KQL语法来搜索日志,关于KQL语法我们用另外一篇文章来介绍吧,现在你只需要知道它是使用Kibana时进行快速搜索的语法。
收集你自己的应用日志
Filebeat配置文件
Filebeat是负责收集日志以及传输的,Filebeat默认的配置文件精简后如下:
#=========================== Filebeat inputs ============================= filebeat.inputs: - type: log enabled: false paths: - /var/log/*.log #- c:\programdata\elasticsearch\logs\* #================================ Outputs ===================================== #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["localhost:9200"] #----------------------------- Logstash output -------------------------------- #output.logstash: # The Logstash hosts #hosts: ["localhost:5044"] 复制代码
Filebeat分为数据输入配置与数据输出配置。 默认配置文件中数据输入配置表示从 /var/log/
这个目录下获取 .log
的文件内容,但是暂时没有打开。 默认配置文件中数据输出配置表示输出到 localhost:9200
这个主机的elasticsearch中。
创建自己的应用日志
所以如果我们想获取我们自己应用的日志信息,我们需要将应用日志存在某个文件中,然后修改FileBeat的配置文件。 这里 在GitHub上我创建了一个项目,大家可以自由克隆使用,这个项目在打印日志的时候会将日志输出到 /var/log/elk/app.log
文件中。
修改Filebeat的配置文件并重启
然后我们修改Filebeat的配置文件,修改部分为:
filebeat.inputs: - type: log enabled: true paths: - /var/log/elk/*.log 复制代码
然后重启Filebeat。
产生并查看应用日志
运行一下项目中的Main方法,就会产生一条日志并存储到/var/log/elk/app.log中,比如我目前这个文件中的内容为:
回到Kibana进行查询我们就可以查询到这条日志了,当然这中间可能需要等个几秒钟,因为Filebeat需要时间需发现你新增的日志并传输到ElasticSearch中。你可以在Kibana的Filters输入框中输入log.file.path : /var/log/elk/app.log
表示利用KQL来精确的查询内容,查询结果为:
日志文件中的内容对应为ElasticSearch中的message字段,我这里是因为手动修改过文件内容,所以这里查出来的message内容不太正确,相信你按我上面的步骤来操作会得到你想要的结果的。
总结
事实上通过上面的步骤就实现了收集你自己应用的日志了。
集成LogStash
我们利用ElasticSearch、Kibana、Filebeat已经搭建了一套日志系统,似乎满足了需求,但是要注意Filebeat的特点是轻量级的收集日志器,功能比较单一,并且通常会从多个渠道收集日志,比如mysql、系统日志、应用日志等等,那么如果我们想对这些日志进行 统一加工 的话,就需要用到LogStash。
下载与解压
下载地址(体积有点大,休息一下吧,要么趁机点赞并转发?)
修改配置文件
LogStash默认的配置文件是config/logstash.yml。 配置文件的基本格式是:
# This is a comment. You should use comments to describe # parts of your configuration. input { ... } filter { ... } output { ... } 复制代码
也有输入、输出,还有一个过滤器,这个过滤器就是LogStash的特别之处,也需要另外一篇博客进行详细的讲解。那么我们这里列一个简单的配置文件,文件名称为elk-conf:
# 表示监听5044端口,Filebeat将把日志数据发送给此端口 input { beats { port => 5044 } } # 将接收到的日志在控制台进行输出并且传输到elasticsearch中 output { elasticsearch { hosts => ["localhost:9200"] } stdout { } } 复制代码
我们先按上面的配置测试一下,在这之前需要将Filebeat中的日志数据输出配置改一下:
#-------------------------- Elasticsearch output ------------------------------ #output.elasticsearch: # Array of hosts to connect to. # hosts: ["localhost:9200"] #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["localhost:5044"] 复制代码
改好之后可以先启动LogStash,再重启Filebeat,不然在启动Filebeat的时候会连不上5044端口而报错,使用一下命令启动LogStash:
bin/logstash -f config/elk-conf.yml 复制代码
如果启动LogStash出现“Logstash stopped processing because of an error: (ArgumentError) invalid byte sequence in US-ASCII”错误,是因为配置文件的全路径中有中文,改成英文吧...
如果你是其他系统遇到了其他错误,可以在留言区进行反馈。
测试LogStash
启动LogStash成功后,我们手动改变以下app.log中的内容,为了以后讲LogStash方便大家复制以下内容到app.log文件中吧:
83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 复制代码
正常的话会在LogStash的控制台看见该日志内容,这里就不贴图了,因为控制台打印的信息其实比较多,为什么会这么多?这个都跟LogStash有关系,这里就不多解释了。 控制台看到到了日志后,我们现在去Kibana中看看,Kibana目前所匹配的索引是 filebeat*
,这个匹配模式是查不到我们刚刚新增的信息的,因为现在这条日志是通过LogStash发送到ElasticSearch中的,创建的索引是logstash-2019.06.12-000001,所以我们之前在Kibana创建的Index Pattern是查不到这条日志的,我们可以在Kibana中按照上文的步骤再来创建一个Index Pattern以匹配logstash所发送的日志,创建成功后,我们回到Kibana中的Discover模块就会如下图,并且可以切换Index Pattern以查看日志,同时也能看到我们上面创建的logstash日志。
总结
最终的架构图如下:
到此为止,日志系统已见雏形,我是完全基于Elastic Stack中最新版本的组件所搭建的,希望大家在各自的系统中手动搭建,如有疑问请留言,我会尽快修正。
如果觉得这篇文章能让你学到知识,能否帮忙转发,将知识分享出去。
如果想第一时间学习更多的精彩的内容,请关注微信公众号:1点25
以上所述就是小编给大家介绍的《基于Elastic Stack最新版本搭建ELK》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 升级python版本和搭建环境
- 《k8s-1.13版本源码分析》- 测试环境搭建(k8s-1.13版本单节点环境搭建)
- hadoop + spark+ hive 集群搭建(apache版本)
- 创业公司基础设施如何搭建(三):Confluence(Docker版本)
- 创业公司基础设施如何搭建(四):Jira(Docker 版本)
- 使用docker搭建gitlab以及ci平台,完整版本(使用springboot项目演示)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据时代的IT架构设计
IT架构设计研究组 / 电子工业出版社 / 2014-4 / 49.00元
《大数据时代的IT架构设计》以大数据时代为背景,邀请著名企业中的一线架构师,结合工作中的实际案例展开与架构相关的讨论。《大数据时代的IT架构设计》作者来自互联网、教育、传统行业等领域,分享的案例极其实用,代表了该领域较先进的架构。无论你就职于哪一行业都可以从本书中找到相关的架构经验,对您在今后的架构设计工作中都能起到很好的帮助作用。 《大数据时代的IT架构设计》适合具备一定架构基础和架构经验......一起来看看 《大数据时代的IT架构设计》 这本书的介绍吧!