最近在做日志采集相关的内容的需求,记录一下通过filebeat实现轻量化日志采集入库。日志采集的实现方案有很多种,比如logstash、fluentd、flume、betas等。为什么选择filebeat呢?因为logstash是jvm跑的,资源消耗比较大,启动一个logstash就需要消耗500M左右的内存,而filebeat是基于golang开发的,依赖极少,运行时只需要10多M内存资源消耗。

工作原理

    Filebeat可以保持每个文件的状态,并且频繁地把文件状态从注册表里更新到磁盘。这里所说的文件状态是用来记录上一次Harvster读取文件时读取到的位置,以保证能把全部的日志数据都读取出来,然后发送给output。如果在某一时刻,作为output的ElasticSearch或者Logstash变成了不可用,Filebeat将会把最后的文件读取位置保存下来,直到output重新可用的时候,快速地恢复文件数据的读取。在Filebaet运行过程中,每个Prospector的状态信息都会保存在内存里。如果Filebeat出行了重启,完成重启之后,会从注册表文件里恢复重启之前的状态信息,让FIlebeat继续从之前已知的位置开始进行数据读取。

安装filebeat服务

1.下载和安装key文件

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch


2.创建yum源文件

vim /etc/yum.repos.d/elk-elasticsearch.repo

在新建的源文件中添加如下配置

[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


3.yum安装filebeat

yum install filebeat


4.启动filebeat

systemctl start filebeat


5.查看filebeat运行状态

systemctl status filebeat


ps -ef | grep filebeat


6.配置filebeat采集源文件和输出

vim /etc/filebeat/filebeat.yml

配置采集日志文件源:

filebeat.prospectors:
- input_type: log
  paths:
    - /var/lib/docker/containers/*/*.log

配置输出:

1).输出到elasticsearch:

output.elasticsearch:
  hosts: ["127.0.0.1:9200"]

2).输出到redis:

output.redis:
  hosts: ["127.0.0.1:6379"]
  password: "M123456"
  data_type: "list"
  key: "filebeat"
  db: "0"
  timeout: 30


7.重启filebeat服务

systemctl restart filebeat


至此,filebeat安装及配置完成!