2、ELK与EFK部署

ELK与EFK介绍

先来了解一下ELK是什么?

ELK 是 Elastic 公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是 Elasticsearch、Logstash 和 Kibana。

  • Elasticsearch,简称ES,是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能

  • Logstash是一个用来搜集、分析、过滤日志的工具

  • Kibana是一个基于 Web 的图形界面,用于搜索、分析和可视化存储在 Elasticsearch 指标中的日志数据

那么ELK和EFK的区别是什么?

这二者主要的区别就是使用的采集工具不同,ELK使用的是Logstash,EFK则使用的是Filebeat,但是由于Logstash占用的资源比较大,而Filebeat更加的轻量,所以目前作用于日志采集的工具已经逐渐由Logstash演变成了Filebeat。

Logstash + Filebeat

那么为什么要这么使用呢?

主要还是因为Filebeat作为日志采集所占用的资源虽然少,但是Filebeat的过滤功能又相对较弱,相反,logstash的过滤率功能又是十分出色的,所以这时候就可以使用Filebeat +logstash的架构,Filebeat用于日志采集,logstash用于日志过滤。


该部署以Centos7为例

ES、ES-head、Kibana安装

可参考Elasticsearch详解及部署

Logstash安装

注:logstash同样依赖Java环境,所以如果要在其他设备上部署也要记得进行配置

Logstash与JDK版本的版本对应关系可参考https://www.elastic.co/cn/support/matrix#matrix_jvm

logstash下载地址: https://mirrors.huaweicloud.com/logstash/?C=N&O=D

1.解压安装包

tar -zxvf logstash-7.6.1.tar.gz -C /usr/local/

2.创建logstash日志采集配置文件并编辑

cd /usr/local/logstash-7.6.1/config/

因为这里采集的是Mysql的日志,所以需要事先安装好Mysql,可参考Mysql单机部署(二进制方式部署)

vim sunny_log.conf

input{
  #从文件读取日志信息,输送到控制台
  file {
    path => "/var/lib/mysql/logs/query_log.log"    #采集的文件
    codec => "json"
    type => "elasticsearch"
    start_position => "beginning"
  }
}
output{
  stdout { codec => rubydebug }         #代表在控制台输出
  elasticsearch {
    hosts => ["192.168.111.129:9200"]   #代表输出至ES
    index => "es-mysql-%{+YYYY.MM.dd}"  #索引名称格式
  }
} 

这里我采集的是Mysql的操作日志,可参考Mysql操作日志(general_log)详解

3.启动logstash

这里如果不使用root启用,需注意配置文件权限,并且,logstash会对第一次采集的文件先进行一次全量采集

cd /usr/local/logstash-7.6.1/bin/

nohup ./logstash -f ../config/sunny_log.conf &

通过ps -ef | grep logstash即可查看到logstash进程

4.验证

稍等片刻后(这里可能需要等待一段时间,可通过日志观察),我们就可以通过elasticsearch-head界面查看到我们的Mysql操作日志采集索引

此时的日志采集当然也是实时的,可以自行登录mysql操作看看

Filebeat安装

注:Filebeat是由Go语言编写的,所以不需要依赖Java环境

Filebeat下载地址: https://www.elastic.co/cn/downloads/past-releases/filebeat-7-6-1

1.解压安装包

tar -zxvf filebeat-7.6.1-linux-x86_64.tar.gz -C /usr/local/

2.配置Filebeat日志采集配置文件

cd /usr/local/filebeat-7.6.1-linux-x86_64/

cp filebeat.yml filebeat.yml.bak

这里同样是来采集我们的Mysql操作日志

vim filebeat.yml

#参考以下配置来进行修改
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/lib/mysql/logs/query_log.log       #采集的文件
output.elasticsearch:
  hosts: ["192.168.111.129:9200"]

3.创建日志目录

mkdir /usr/local/filebeat-7.6.1-linux-x86_64/logs

4.启动Filebeat

这里如果不使用root启用,需注意配置文件权限,并且,filebeat会对第一次采集的文件先进行一次全量采集

nohup ./filebeat -c filebeat.yml -e > logs/filebeat.log 2>&1 &

5.验证

Filebeat会产生两个索引在ES

同样成功采集到了我们的Mysql操作日志

Filebeat + Logstash使用

filebeat采集日志文件,将日志输出到logstash

#如果是按照上面操作步骤下来的,先把filebeat和logstash服务停掉

1.修改Filebeat配置文件

cd /usr/local/filebeat-7.6.1-linux-x86_64/

vim filebeat.yml

#参考以下配置来进行修改
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/lib/mysql/logs/query_log.log       #采集的文件
#该配置就在我们配置ES的下面,把输出到ES的配置注释掉,输出到Logstah
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.111.129:5044"]

2.修改Logstash配置文件

cd /usr/local/logstash-7.6.1/config/

vim beat_logstash.conf

input {
  beats {
    #开放一个端口给Filebeat,对应着Filebeat里的配置文件,接收它的数据然后输出给ES
    port => 5044
    #设置timeout时间,不然时间久了,Filebeat和Logstash会断开连接
    client_inactivity_timeout => 36000
  }
}

output {
  elasticsearch {
    hosts => ["192.168.111.129:9200"]
    index => "log-%{+yyyy.MM.dd}"
  }
}

3.依次启动Filebeat和Logstash

cd /usr/local/logstash-7.6.1/bin

nohup ./logstash -f ../config/beat_logstash.conf &

cd /usr/local/filebeat-7.6.1-linux-x86_64/

nohup ./filebeat -c filebeat.yml -e > logs/filebeat.log 2>&1 &

4.验证

此时我们登陆数据库进行一下操作后,我们的索引才会产生,这样配置后它一开始并不会进行全量采集,只采集从当前开始新增的日志信息

 

posted @ 2022-04-08 02:02  RFAA  阅读(1036)  评论(0编辑  收藏  举报