“ELK”是三个开源项目的首字母缩写:Elasticsearch,Logstash和Kibana。mysql
Elastic Stack比ELK Stack更加灵活且强大git
目前官网的ELK教程使用的是ElasticSearch+Filebeat+Kibana,因此咱们也先使用这三个组件来从零搭建ELK,关于Logstash后文会用到。github
Filebeat是一个轻量级的收集与发送日志数据的组件,将它安装在你的服务器上,相似一个代理,它将监控你指定路径下的日志文件,而后将日志信息发送给ElasticSearch或LogStashsql
请自行选择本身的操做系统进行安装,并找到对应的安装目录,好比我如今使用的是Mac系统,下载下来的为gzip的压缩包,而后直接解压便可,以下图: 数据库
./elasticsearch-7.1.0/bin/elasticsearch
复制代码
./kibana-7.1.0-darwin-x86_64/bin/kibana
复制代码
cd filebeat-7.1.1-darwin-x86_64
./filebeat modules enable mysql
./filebeat -e -c filebeat.yml
复制代码
浏览器打开http://localhost:5601浏览器
Collapse默认是收起来的,展开后可找到Dashboard,点击便可bash
Dashboard页面的展现出来了filebeat帮咱们建立的索引,以下图: 服务器
在Index pattern输入filebeat*
便可匹配到filebeat所建立的索引: 微信
第二步须要咱们选择一个时间字段,时间过滤器将使用此字段按时间过滤数据。您能够选择不包含时间字段,但没法按时间范围缩小数据范围。不太明白这个时间字段意思,咱们选择下拉列表的最后一个可选值I don't want to use the Time Filter
,而后点击Create index pattern。建立后进入到的页面展现出了索引所包含的字段以及字段类型,而且你也是能够去修改字段类型的,这里就不演示了。架构
点击进入到Discover就能够进行查看和搜索日志,以下下图:
可使用KQL语法来搜索日志,关于KQL语法咱们用另一篇文章来介绍吧,如今你只须要知道它是使用Kibana时进行快速搜索的语法。
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.inputs:
- type: log
enabled: true
paths:
- /var/log/elk/*.log
复制代码
而后重启Filebeat。
运行一下项目中的Main方法,就会产生一条日志并存储到/var/log/elk/app.log中,好比我目前这个文件中的内容为:
log.file.path : /var/log/elk/app.log
表示利用KQL来精确的查询内容,查询结果为:
事实上经过上面的步骤就实现了收集你本身应用的日志了。
咱们利用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成功后,咱们手动改变如下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日志。
最终的架构图以下:
若是以为这篇文章能让你学到知识,可否帮忙转发,将知识分享出去。
若是想第一时间学习更多的精彩的内容,请关注微信公众号:1点25