ETL工具之日志采集filebeat+logstash

1、概述

web服务产生的日志文件,需要进行日志收集并进行可视化展示,一般使用filebeat和logstash组合。

2、组件介绍

2.1 Logstash

Logstash是具有实时收集日志功能,可以动态统一来自不同来源的数据,任何类型的事件都可以通过各种各样的输入,过滤功能和输出插件来丰富和转换。是一个重量级的服务,很占用内存,会影响到部署到本机器上的服务。

2.2 Filebeat

Filebeat是用于转发和采集日志数据的轻量级服务。能监视您指定的日志文件或位置,收集日志事件,并将它们转发到Logstash或elasticsearch (在 5.x 版本中,它也具备过滤的能力,但是还不及Logstash丰富)

2.3 选型

如果对于日志不需要进行过滤分析的,可以直接使用filebeat
如果需要对日志进行过滤分析, 可以使用filebeat+Logstash最合适,如果单独使用Logstash,多台机都需部署Logstash,每台机消耗资源大,filebeat+Logstash相结合,每台机部署filebeat进行数据采集, 一台机部署Logstash作为中心进行接收数据处理以及存储到不同的地方,

3、单点部署

3.1、 部署流程
3.2、 Filebeat.yml文件
filebeat.prospectors:
# 输入设置
- input_type: log
  paths:
    # 指定日志文件位置,可以使用正则方式,也可以指定多个路径的日志
    - /mnt/log/log.*

# 输出设置
output.logstash:
  # logstsh的ip地址 
  hosts: ["127.0.0.1:5044"]
  loadbalance: true
  index: filebeat

3.3、 Logstash.conf文件
input {
  # 接收filebeat读取的数据
  beats {
    port => 5044
    codec => "json"
  }
}

output {
  # 输出到es
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "test"
    document_type => "log"
    manage_template => false
  }
}

3.4、Logstash.yml文件
http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
xpack.monitoring.enabled: false
3.5、 容器创建

Logstash

sudo docker run \
--restart always \
--name logstash \
-itd \
-p 5044:5044 \
-p 9600:9600 \
-v /path/logstash/pipeline/:/usr/share/logstash/pipeline/ \
-v /path/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \
elastic/logstash

Filebeat

sudo docker run \
--restart always \
--name filebeat \
-itd \
-v /path/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /path/mylog:/data \
elastic/filebeat

4、多个日志源输出到不同存储位置

4.1、修改filebeat.yml
filebeat.prospectors:
# 日志源1
- input_type: log
  paths:
    - /data/video/log.*
  tags: ["log1"]  # 后面logstash用于区别哪个日志来源写入不同的位置
# 日志源2
- input_type: log
  paths:
    - /data/search/*.log
  tags: ["log2"]  # 后面logstash用于区别哪个日志来源写入不同的位置
 
# 输出位置
output.logstash:
  # The Logstash hosts
  hosts: ["127.0.0.1:5044"]
  loadbalance: true
  index: filebeat

4.2、修改logstash.conf
input {
  # 接收filebeat读取的数据
  beats {
    port => 5044
    codec => "json"
  }
}

# 不同的日志输出到不同的位置
output {
  if "log1" in [tags] {      
    elasticsearch{
      hosts => ["127.0.0.1:9200"]
      index => "test_logstash_log1"
      document_type => "log" 
    }
  }
  if "log2" in [tags] { 
    elasticsearch{
      hosts => ["127.0.0.1:9200"]
      index => "test_logstash_log2"
      document_type => "log"
    }
  }
}

参考链接

filebeat文档:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
logstash文档: https://www.elastic.co/guide/en/logstash/7.3

你可能感兴趣的:(ETL工具之日志采集filebeat+logstash)