最近在做日志采集相关的内容的需求,记录一下通过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安装及配置完成!