手把手教你搭建ELK(Elasticsearch+Logstash+Filebeat+Kibana)日志采集处理,带你入门Elastic Stack

今日,因为公司有一个大型的分布式项目,用到不少中间件,还有讨厌的k8s,节点及服务器很多,日志的统一处理与查询成为了一个难点,于是让我设计个日志架构,那肯定优选ElasticStack也就是经典的 ELFK(Elasticsearch+Logstash+Filebeat+Kibana) 。由于当初已经指定了ES版本,用的是7.12.1,所以其他的也都统一了版本。

文档资料

具体的下载地址如下,大家可以选择要下载的产品及版本号:

https://www.elastic.co/cn/downloads/past-releasesw

我所使用的:

Elasticsearch:Elasticsearch 7.12.1 | Elastic

Logstash:Logstash 7.12.1 | Elastic

Filebeat:Filebeat 7.12.1 | Elastic

Kibana:Kibana 7.12.1 | Elastic

ELK这种全套的日志处理技术也不是什么新技术了,最早期的就是单纯的ELK三个框架技术,到后面逐渐演变成ELFK等等,架构也逐渐复杂一些,但无非都是加一些缓存队列做一些更优化的处理效果。

 

下面是我自己绘制的一套真实生产环境的架构图 

 

 filebeat是依据logstash设计出来的,功能配置类似,虽然没有logstash强大,但是非常小巧,运行速度快,适合用于采集。如果应用服务器以及要采集的服务器比较多,此时如果直接输出到logstash,自然压力大,可以用一些MQ等一些消息队列缓冲一下再输出给logstash,经过logstash的过滤处理等再输出给ES集群,最后使用kibana来查看展示,这就是整个过程,好了,下面开始搞!

一、ES单点部署

1. 解压缩

我是直接下载的压缩版本的es,直接解压缩即可

tar -zxvf elasticsearch-7.12.1-linux-x86_64.tar.gz

可以看到里面有几个比较重要的目录:bin下面是es的可执行程序命令,config里存放的是配置文件。细心的话可以发现es自带了jdk。

2. 修改配置文件

先来到config目录,使用vim打开elasticsearch.yml,进行配置修改

当前节点对外暴露的网络地址,可设置为0.0.0.

配置完毕后,就后台运行起来

3. 创建使用用户

还有注意一点,elasticsearch是不能用root来启动的,还需要配置一个用户来启动,我这里配置的是es,然后把那个文件目录的权限给足它

adduser es
passwd es

chown -R es:es elasticsearch-7.12.1/

4. 开始启动 

nohup ./elasticsearch/bin/elasticsearch &

如果你想重定向到日志文件,可以这样做

nohup ./elasticsearch/elasticsearch/bin/elasticsearch > /opt/elk/es/es01/elasticsearch.log 2>&1 &

5. 测试运行

运行起来后,如果想看自己运行有没有问题,有没有成功,也可以使用如下命令查看

curl http://localhost:9200

看到如下图所示,就代表成功了 

 

二、kibana的部署运行

1. 解压缩

tar -zxvf kibana-7.12.1-linux-x86_64.tar.gz

2. 修改配置

kibana的配置修改就简单的多了,在config目录下,有个kibana.yml,使用vim打开即可

最底下还有个中英文的配置,母亲还是很强大的哈哈

3. 后台运行

nohup ./kibana &

这里的nohup命令可以防止在你退出终端后进程被终止,&符号将进程放到后台运行。如果你希望将输出重定向到文件,可以这样做:

nohup ./kibana > /path/to/kibana.log 2>&1 &

 4. 开始访问

这里我把我得kibana所在的服务器端口暴露出来了,所以在我得电脑上就可以直接输入

http://xxxxxxx:5601  就可以访问了

三、filebeat的部署运行

官方使用文档说明:Filebeat Reference [7.12] | Elastic

1. 解压缩

tar -zxvf filebeat-7.12.1-linux-x86_64.tar.gz

解压后就是这样的一个层级目录,可以看到filebeat.yml配置文件,但是vim打开后,你会发现非常多,还有些不知道什么意思。所以我打算自己重写个yml配置,把之前的文件改下名字即可。

2. 修改配置文件或创建自己的配置文件

因为自带的配置文件属性设置太多,比较麻烦,我是自己创建了个简单的配置文件

//把之前的filebeat.yml配置文件改成filebeat.yml-test
mv filebeat.yml filebeat.yml-test
//自己新建个filebeat.yml
vim filebeat.yml

先把输入输出都变成控制台的输入输出,这样方便测试下是否没有问题,然后wq保存退出

#指定filebeat的输入配置
filebeat.inputs:
#指定输入的类型
- type: stdin

#指定filebeat的输出配置
output.console:
  #打印漂亮的格式
  pretty: true

3. 启动运行

启动就可以实现在控制台输入,在控制台查看了

//前台启动filebeat
./filebeat -e -c filebeat.yml

4. 采集读取原理

其次在运行日志里注意这么一段话

来到这个位置可以看到这么两个文件

其中meta.json里面存的是版本号,而log.json里面是存储的每次读取的记录数据,其中offset是记录每次读取的位置,是为了标记filebeat下次读取变化的时候,从哪个位置开始读取。比如,如果我们是从文件中读取日志信息,一开始输入了3个字符到文件中,那么offset会记录这个位置,下次有日志追加到文件里的时候,就会从上次读取的位置开始往后读取。

另外有个很重要的知识点,filebeat是按行读取,这个可以自行测试下,如果只往日志里追加内容,但是不追加换行符,会发现没有读取到新内容,一旦输入换行符,就会读取到新追加的内容了。

知道了这个知识点,我们就可以利用修改offset,甚至直接删除log.json文件来实现filebeat从指定位置或者从头开始读取数据了。

5. 读取log日志文件

如果输入源改成日志文件形式,修改配置如下

#指定filebeat的输入配置
filebeat.inputs:
#指定输入的类型
- type: log
  paths: 
    - /tmp/elktest.log

#指定filebeat的输出配置
output.console:
  #打印漂亮的格式
  pretty: true

写个测试日志

这边就可以在message字段中看到日志的内容了

这里的type:log path配置支持多个,也只是通配符 * ,如下,向你用到了docker, docker目录下面都是各个中间件的文件目录,那用起来就非常方便了。

#指定filebeat的输入配置
filebeat.inputs:
#指定输入的类型
- type: log
  paths: 
    - /tmp/elktest.log
    - /tmp/*.txt

- type: log
  paths:
    - /tmp/test/*/*.log

#指定filebeat的输出配置
output.console:
  #打印漂亮的格式
  pretty: true

 四、logstash的部署运行

官方使用文档说明:Logstash Reference [7.12] | Elastic

1.解压缩

tar -zxvf logstash-7.12.1-linux-x86_64.tar.gz

2.修改配置

配置在config目录下

 

这里要注意:我们要修改的配置文件是logstash-sample.conf ,conf结尾的这个文件,你也可以自己创建哈

3、与filebeat进行对接

3.1、修改filebeat输出到logstash

#指定filebeat的输入配置
filebeat.inputs:
#指定输入的类型
- type: log
  paths:
    - /tmp/elktest.log

#指定filebeat的输出配置
output.logstash:
  hosts: ["127.0.0.1:5044"]

3.2、修改logstash输入为filebeat

input {
  beats {
    port => 5044
  }
}

output {
  stdout {}
}

4. 运行演示

运行起来,当然这个启动肯定是比较慢的了,一个是因为它是java写的,需要起jvm,此外你也可以看到logstash的包大小在300M左右,filebeat只有30,filebeat是go语言写的,速度很快。这也是为什么用filebeat来收集。

./bin/logstash -f config/logstash-sample.conf 

 演示效果图:

可以在logstash上看到如下效果

五、整合ELFK(elasticsearch+logstash+filebeat+kibana)

实现由log日志文件读取数据,到filebeat,然后filebeat输出到logstash,然后logstash输出到es中

1. 修改filebeat的配置文件

#指定filebeat的输入配置
filebeat.inputs:
#指定输入的类型
- type: log
  paths:
    - /tmp/elktest.log

#指定filebeat的输出配置
output.logstash:
  hosts: ["127.0.0.1:5044"]

2. 修改logstash配置文件

input {
  beats {
    port => 5044
  }
}

output {
  stdout {}

  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "elk-logstash-%{+YYYY.MM.dd}"
  }
}

3. 测试演示

然后把elasticseach,kibana,filebeat,logstash都运行起来,往log日志里追加内容 

可以看到logstash控制台已经输出内容了

 

4. kibana重载索引

这个时候就可以在kibana重载索引,去查看了,先来到kibana视图页面,选择菜单栏中的最后一个Stack Management

在索引管理,索引tab页面就能看到索引了,但是由于我es没有部署集群,副本分片不能在当前节点创建访问,所以就变成了yellow,这块知识可以到es中去了解。

5. 查找数据

再选择菜单栏,选择discover

选择自己的创建的索引模式

默认显示出来的日志如下图所示,这样是比较乱的,我们可以在左侧勾选,我们想要显示的字段内容。

比如在左侧可用字段中看到了message,右边会有加号,点击即可添加该字段 

 

 像我勾选了几个之后,就会变成如下显示

 鼠标放在字段上面,还会出现删除,左移右移进行调整,大家可以根据需要来设置

我也换了个我本地的一个springboot项目,字段我就只显示message,如下:

像报错也可以明显看到。

好了,自此为止,一个ELFK就搭建完毕了。根据实际项目需要,在对应服务器下使用filebeat采集日志,汇聚到logstash,然后输出到elasticsearch,最后使用kibana去查看的过程就完成了。当然如果想要更加直观,便捷的使用它,还要结合项目需要,设计一些如上图的报错,需要多行日志合并匹配啊,以及一些日志打tag或者做一些过滤处理等,需要更深的一点设计使用,这个留到后续有时间再更新吧。。。。都写在一个里面,大家也没耐心看(主要我也没耐心写了。。)

本人个人原创,如有雷同,纯属巧合,或者与本人联系,做改动。请转载或者CV组合标明出处,谢谢!(如有疑问或错误欢迎指出,本人QQ:752231513)

filebeatlogstash都是日志收集工具,它们之间的主要差异在于功能和资源占用。filebeat更轻量,占用的资源较少,用于采集日志并将其发送到消息队列,如Redis或Kafka。而logstash具有过滤功能,可以对采集到的日志进行过滤和分析,并将结果存储到Elasticsearch中。 具体而言,filebeat负责收集日志并将其转发给logstashlogstash使用filter功能对日志进行过滤整理成JSON格式,然后再转发给Socket服务器来处理业务逻辑。 总的来说,logstash是一个功能更为强大的日志收集工具,具有丰富的插件和配置选项,可以用于更复杂的日志收集和处理场景。而filebeat则更加轻量和简单,适用于一般的日志采集需求。 因此,如果你需要对日志进行过滤和分析的功能,可以选择使用logstash。而如果你只需要简单地采集日志并将其发送到其他地方进行处理,可以使用filebeat。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [logstashfilebeat 关系](https://blog.csdn.net/w892824196/article/details/112766412)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [日志检测-filebeat+logstash-整理.docx](https://download.csdn.net/download/huipeng3321/11422758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值