Filebeat入门
一、概述
Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。
以下是filebeat的工作流程:当你开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。
二、Filebeat的简单配置
Filebeat的基本原理其实就是有一群prospector,每个prospector手下管着一批harvester,每个harvester负责监视一个日志文件,把变动的内容由spooler汇总之后交给Logstash或者Elasticsearch。如果想快速搭建一个可以工作的Filebeat,无非有三点:
1.说明要监视哪些文件
filebeat: prospectors: - paths: - "/var/log/lmz.log"
1、定义你的日志文件的路径(一个或多个)
对于大多数的基本filebeat配置,你可以定义一个单一探测器针对一个单一的路径,例如:
filebeat.prospectors: - input_type: log paths: - /var/log/*.log
PS:若收取日志格式为json的log,请开启此配置
json.keys_under_root: true
在这个例子中,探测器会收集/var/log/*.log的所有匹配文件,这意味这filebeat会手机所有的/var/log下以.log结尾的文件,此处还支持Golang Glob支持的所有模式。
在预定义级别的子目录中获取所有文件,可以使用这个配置:/var/log/*/*.log,这会找到/var/log下所有子目录中所有的以.log结尾的文件。但它并不会找到/var/log文件夹下的以.log结尾的文件。现在它还不能递归的在所有子目录中获取所有的日志文件。
2.说明收集的日志发给谁
如果你设置输出到elasticsearch中,那么你需要在filebeat的配置文件中设置elasticsearch的IP地址与端口。
如果直接发送给Elasticsearch,可以设置如下:
output: elasticsearch: hosts: ["localhost:9200"]
如果需要发给Logstash,可以注释掉Elasticsearch的配置,然后设置Logstash如下:
output: logstash: hosts: ["localhost:5044"]
当然,也需要在Logstash的配置中指明要从该端口(5044)监听来自Filebeat的数据:
/etc/logstash/conf.d/beats-input.conf: input { beats { port => 5044 } }
这里的配置举例是把Filebeat、Logstash、Elasticsearch安装在了一台机器上,实际使用中肯定是分开部署的,需要根据实际情况修改配置文件中的IP地址及端口号。
3.让Elasticsearch知道如何处理每个日志事件。
在elasticsearch中加载索引模板#非必要,可直接进行第五步。filebeat会获取默认模板。
在Elasticsearch中,索引模板是用于定义字段应如何分析的设置和映射。
推荐的filebeat索引模板文件已经在filebeat的安装包中了,如果你允许默认的模板加载到配置文件filebeat.yml中,filebeat会在成功链接elasticsearch后自动加载这些模板。如果模板已经存在了,除非你配置了filebeat.yml,否则它不会被复写。
如果你不想自动加载索引模板,或者你想加载你自己的索引模板,你可以在filebeat的配置文件中改变模板的配置,如果你选择了关闭自动加载模板,你需要手动加载模板。更多的信息请看:
配置模板加载:只支持输出到elasticsearch
手动加载模板:需要输出到logstash时 #实测并不需要手动加载,或配置任何,一样可以输出到logstash
配置模板加载
默认上,filebeat自动加载推荐的模板文件,filebeat.template.json,如果禁用输出到elasticsearch,你可以配置filebeat.yml中的template.name和template.path选项:
output.elasticsearch:
hosts: ["localhost:9200"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
默认上,如果索引里已经有这个模板,新的并不会覆盖旧的。若是想覆盖现有的模板,在配置文件中设置template.overwrite:ture。
若禁用自动加载模板,注释掉elasticsearch输出下模板的那一部分。
如果使用Logstash输出,则不支持自动加载模板的选项。
手工加载模板
如果你禁止了模板的自动加载,你需要运行接下来的命令来加载模板:
curl -XPUT 'http://localhost:9200/_template/filebeat' -d@/etc/filebeat/filebeat.template.json
这里的location:9200是elasticsearch监听的ip和端口
注:如果你已经使用filebeat输出索引数据到elasticsearch中,这些索引可能包含旧的文档,在你加载了索引模板后,你可以从filebeat-*中删除旧的文档,以强制kibana查看新的索引文档。
命令如下:
curl -XDELETE 'http://localhost:9200/filebeat-*'
默认的Elasticsearch需要的index template在安装Filebeat的时候已经提供,路径为/etc/filebeat/filebeat.template.json,可以使用如下命令装载该模板:
$ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.json
当然,也不能忘了,每次修改完Filebeat的配置后,需要重启Filebeat才能让改动的配置生效。