基于Elastic Stack最新版本搭建ELK

栏目: 后端 · 发布时间: 5年前

内容简介:“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的压缩包,然后直接解压即可,如下图:

基于Elastic Stack最新版本搭建ELK

所在目录为/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

基于Elastic Stack最新版本搭建ELK

Collapse默认是收起来的,展开后可找到Dashboard,点击即可

3.初始化

Dashboard页面的展示出来了filebeat帮我们创建的索引,如下图:

基于Elastic Stack最新版本搭建ELK

在Index pattern输入 filebeat* 即可匹配到filebeat所创建的索引:

基于Elastic Stack最新版本搭建ELK

点击Next step,表示我们现在想将filebeat*所匹配到的索引数据在kibana中进行查看。

第二步需要我们选择一个时间字段,时间过滤器将使用此字段按时间过滤数据。您可以选择不包含时间字段,但无法按时间范围缩小数据范围。不太明白这个时间字段意思,我们选择下拉列表的最后一个可选值 I don't want to use the Time Filter ,然后点击Create index pattern。创建后进入到的页面展示出了索引所包含的字段以及字段类型,并且你也是可以去修改字段类型的,这里就不演示了。

4. 使用

点击进入到Discover就可以进行查看和搜索日志,如下下图:

基于Elastic Stack最新版本搭建ELK

可以使用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中,比如我目前这个文件中的内容为:

基于Elastic Stack最新版本搭建ELK
回到Kibana进行查询我们就可以查询到这条日志了,当然这中间可能需要等个几秒钟,因为Filebeat需要时间需发现你新增的日志并传输到ElasticSearch中。你可以在Kibana的Filters输入框中输入 log.file.path : /var/log/elk/app.log

表示利用KQL来精确的查询内容,查询结果为:

基于Elastic Stack最新版本搭建ELK

日志文件中的内容对应为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最新版本搭建ELK

总结

最终的架构图如下:

基于Elastic Stack最新版本搭建ELK

到此为止,日志系统已见雏形,我是完全基于Elastic Stack中最新版本的组件所搭建的,希望大家在各自的系统中手动搭建,如有疑问请留言,我会尽快修正。

如果觉得这篇文章能让你学到知识,能否帮忙转发,将知识分享出去。

如果想第一时间学习更多的精彩的内容,请关注微信公众号:1点25

基于Elastic Stack最新版本搭建ELK

以上所述就是小编给大家介绍的《基于Elastic Stack最新版本搭建ELK》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed A. Shaw / Addison-Wesley Professional / 2013-10-11 / USD 39.99

Master Python and become a programmer-even if you never thought you could! This breakthrough book and CD can help practically anyone get started in programming. It's called "The Hard Way," but it's re......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具