Filebeat中文指南
下面的博客是公司里使用filebeat的实例,可以直接借鉴,有问题可以向我反馈。
Filebeat 快速开始: http://www.cnblogs.com/kerwinC/p/8866471.html
一、概述
Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。
以下是filebeat的工作流程:当你开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。
(个人理解,filebeat是一个轻量级的logstash,当你需要收集信息的机器配置或资源并不是特别多时,使用filebeat来收集日志。日常使用中,filebeat十分稳定,笔者没遇到过宕机。)
二、Filebeat入门
开始配置使用filebeat之前,你需要安装并配置好这些依赖程序:
Elasticsearch 作为存储和索引这些数据。
Kibana 作为展示平台。
Logstash(可选)去插入数据到elasticsearch。
详见 beat和elastic的入门
在安装完毕elastic集群之后,阅读接下来的选项学习怎样安装,配置,与运行filebeat。
第一步:安装filebeat
请选择你系统中的下载安装命令来下载安装filebeat。(deb for Debian/Ubuntu, rpm for Redhat/Centos/Fedora, mac for OS X, and win for Windows).
如果你使用yum或者apt,你可以从我们的安装仓库中更方便的安装或更新到新版本。
deb:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
sudo dpkg -i filebeat-5.1.1-amd64.deb
rpm:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
sudo rpm -vi filebeat-5.1.1-x86_64.rpm
mac:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-darwin-x86_64.tar.gz
tar xzvf filebeat-5.1.1-darwin-x86_64.tar.gz
win:
略。
第二步:配置filebeat
编辑配置文件来配置filebeat,对于rpm或者deb来说,配置文件是/etc/filebeat/filebeat.yml这个文件,对于MAC或者win来说,请查看你的解压文件中。
这里有一个简单的filebeat的配置文件filebeat.yml的样本,filebeat会使用很多默认的选项。
---------------prospectors块----------------
filebeat.prospectors:
- input_type: log
paths:- /var/log/*.log
- c:programdataelasticsearchlogs*
让我们来配置filebeat:
1、定义你的日志文件的路径(一个或多个)
对于大多数的基本filebeat配置,你可以定义一个单一探测器针对一个单一的路径,例如:
---------------prospectors块----------------
1
2
3
4
filebeat.prospectors:
- input_type: log
paths:- /var/log/*.log
#json.keys_under_root: true 若收取日志格式为json的log,请开启此配置
- /var/log/*.log
在这个例子中,探测器会收集/var/log/*.log的所有匹配文件,这意味这filebeat会手机所有的/var/log下以.log结尾的文件,此处还支持Golang Glob支持的所有模式。
在预定义级别的子目录中获取所有文件,可以使用这个配置:/var/log//.log,这会找到/var/log下所有子目录中所有的以.log结尾的文件。但它并不会找到/var/log文件夹下的以.log结尾的文件。现在它还不能递归的在所有子目录中获取所有的日志文件。
如果你设置输出到elasticsearch中,那么你需要在filebeat的配置文件中设置elasticsearch的IP地址与端口。
-----------------elastic output(一般都不直接输出到elastic,不建议配置)-----------
output.elasticsearch:
hosts: ["192.168.1.42:9200"]
如果你设置输出到logstarsh,那么请参考第三步,配置filebeat使用logstarsh
第三步:配置filebeat或elasticsearch使用logstarsh
如果要使用logstash对filebeat收集起来的数据执行其他处理,你需要配置filebeat使用logstash。
你需要编辑filebeat的配置文件,注释elasticsearch的选项,并打开logstash的配置的注释:
----------------------------- Logstash output --------------------------------
output.logstash:
hosts: ["127.0.0.1:5044"]
hosts选项需要指明logstash服务所监听的地址和它的端口。
注:若要测试你的配置文件,切换到你安装好的filebeat的可执行文件的目录,然后在命令行运行以下选项:./filebeat -configtest -e ,确保您的配置文件在默认配置文件目录下,见 目录布局。
在使用这个配置之前,你需要提前设置好logstash来接收数据。
如果想不通过logstash直接入库到elasticsearch,可注释掉logstash入库部分,直接打开elasticsearch入库部分即可。不建议直接写入es。
output.elasticsearch:
hosts: ["localhost:9200"]
第四步:启动filebeat
rpm安装:
sudo /etc/init.d/filebeat start
现在,filebeat已经准备好读取你的日志文件并发送到你定义的输出中了!
2018.04.17 更新 Filebeat 快速开始: http://www.cnblogs.com/kerwinC/p/8866471.html
Filebeat 快速开始
Filebeat可以做什么
条目
filebeat
编写语言 GO
是否支持多输出 支持
是否支持多输入 支持
是否支持修改日志内容 支持
是否会丢数据 不会
对多行文件的合并 支持
对多层目录的模糊匹配 支持
安装配置 简单
内存占用 10MB
filebeat安装
系统版本:Centos7.2
filebeat版本:5.5.1。
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.1-x86_64.rpm
安装命令
rpm -Uvh filebeat-5.5.1-x86_64.rpm
配置文件路径
/etc/filebeat/filebeat.yml
日志文件路径
/var/log/filebeat
注意 每次新启动都会生成一个新的filebeat,上次启动的会被mv为filebeat.1
启动命令
systemctl restart filebeat
配置文件模板
注意!文件格式为yml,对格式(缩进必须使用空格,注意不要遗漏“-”)有严格要求。
复制代码
=========================== Filebeat prospectors 文件探测器 =============================
filebeat.prospectors: #文件探测器
-
input_type: log #探测类型,日志文件
paths: #路径- /data/w/www//logs/request.log #注意,通配符的存在使得相同目录结构的工程日志都会被收集到。
json.keys_under_root: true 若收取日志格式为json的log,请开启此配置
document_type: request #日志类型,也就是elastic索引的type,请见文章随后详细解释1
fields:
topic: log_common #增加fields.topic:"application_log"字段,用于kafka的多topic配置。 -
input_type: log
paths:- /data/w/www/*/logs/dubbo-access-consumer.log
multiline.pattern: '[1]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' #对于多行的的日志处理,请见文章随后的详细解释2
multiline.negate: true
multiline.match: after
document_type: dubbo_consumer
topic: application_log
- /data/w/www/*/logs/dubbo-access-consumer.log
----------------------------- kafka output --------------------------------
output.kafka: #输出到kafka
hosts: ["kafka4.dp.data.cn1.wormpex.com:9092", "kafka5.dp.data.cn1.wormpex.com:9092", "kafka6.dp.data.cn1.wormpex.com:9092"] #kafka-broker地址
topic: '%{[fields.topic]}' #输出到哪个topic(就是日志探测哪里定义的fields.topic,利用变量自动发送到不同topic)
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 100000000 #单条日志大小不超过10MB(笔者公司日志出现过单条好几MB的情况。。。)
----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["logstash1.ops.sys.cn1.wormpex.com:5044"] #logstash需要开启input beta插件,启动监听5044端口
复制代码
注解:
注解1:fields.topic
定义了这种类型的日志将要发到哪个topic里面,在kafka配置中的topic作为变量使用。
注解2:multiline.pattern
公司有java工程做web服务器的同学都知道,在我们生产中,java经常会在日志中打印堆栈信息,类似:
2018-04-17 15:12:25.185 IndexNotFoundException[no such index]
at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:566)
at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:133)
at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:77)
at org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction.checkBlock(TransportDeleteIndexAction.java:75)
若直接按行收集的话,在kibana里展示没有上下文,令人无法观看。
此配置的功能就是把堆栈信息合并到带有日期的开头的日志中,并作为一条发送出去,这样在kibana里展示就清晰可见了。
0-9 ↩︎