[toc]
## 介绍
Filebeat是beat家族中的一员,Beats是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。
(画外音:通俗地理解,就是**采集数据**,并**上报**到Logstash或Elasticsearch)
Beats对于收集数据非常有用。它们位于你的服务器上,将数据集中在Elasticsearch中,Beats也可以发送到Logstash来进行转换和解析。
为了捕捉(捕获)数据,Elastic提供了各种Beats:
![](https://box.kancloud.cn/9a7b4c80382a84d5b1857b6c0fe466d3_575x266.png)
**其中Filebeat就是用于Log files的数据采集。**
Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放。
以下是filebeat的工作流程:当你开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容,并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。
![](https://box.kancloud.cn/bdac4e040f708160c6d906f0f700b50a_554x434.png)
## 安装
下载安装:https://www.elastic.co/cn/downloads/beats/filebeat
Filebeat can also be installed from our package repositories using apt or yum
这里我们试一下用yum安装
1. Download and install the public signing key:
~~~
sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
~~~
2. Create a file with a`.repo`extension (for example,`elastic.repo`) in your`/etc/yum.repos.d/`directory and add the following lines:
~~~
[elastic-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
~~~
Your repository is ready to use. For example, you can install Filebeat by running:
~~~
sudo yum install filebeat
~~~
3. To configure the Beat to start automatically during boot, run:
~~~
sudo chkconfig --add filebeat
~~~
## [配置](https://www.cnblogs.com/smile361/p/7688545.html)
> `vim /etc/filebeat/filebeat.yml`
### 定义prospectors块
~~~
filebeat.inputs:
- type: log
//开启监视,不开不采集
enable: true
paths:
- /var/log/elkTest/error/*.log
# 日志多行合并采集
# 匹配开始标识
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
# 为每个项目标识,或者分组,可区分不同格式的日志
# 可以在logstash里边通过这个tags 过滤并格式化自己想要的内容
tags: ["seas-logs"]
# 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志
registry_file: /usr/share/filebeat/data/registry
# 如果是多个的话就定义多个prospector块
- type: log
enabled: true
paths:
- /var/log/*.log
# 退出查看
grep "^\s*[^# \t].*$" /etc/filebeat/filebeat.yml
~~~
在这个例子中,获取在/var/log/\*.log路径下的所有文件作为输入,这就意味着Filebeat将获取/var/log目录下所有以.log结尾的文件。
为了从预定义的子目录级别下抓取所有文件,可以使用以下模式:/var/log/\*/\*.log。这将抓取/var/log的子文件夹下所有的以.log结尾的文件。它不会从/var/log文件夹本身抓取。目前,不可能递归地抓取这个目录下的所有子目录下的所有.log文件。
<br />
### 输出到Elasticsearch
**如果你发送输出目录到Elasticsearch(并且不用Logstash),那么设置IP地址和端口以便能够找到Elasticsearch**
~~~
output.elasticsearch:
hosts: ["172.28.3.199:9200"]
~~~
**如果你打算用Kibana仪表盘,可以这样配置Kibana端点**
~~~
setup.kibana:
host: "localhost:5601"
~~~
**如果你的Elasticsearch和Kibana配置了安全策略,那么在你启动Filebeat之前需要在配置文件中指定访问凭据。**
~~~
output.elasticsearch:
hosts: ["myEShost:9200"]
username: "filebeat_internal"
password: "{pwd}"
setup.kibana:
host: "mykibanahost:5601"
username: "my_kibana_user"
password: "{pwd}"
~~~
### 在Elasticsearch中加载索引模板
在Elasticsearch中,索引模板用于定义设置和映射,以确定如何分析字段。(画外音:相当于定义索引文档的数据结构,因为要把采集的数据转成标准格式输出)
Filebeat包已经安装了推荐的索引模板。如果你接受filebeat.yml中的默认配置,那么Filebeat在成功连接到Elasticsearch以后会自动加载模板。如果模板已经存在,不会覆盖,除非你配置了必须这样做。
通过在Filebeat配置文件中配置模板加载选项,你可以禁用自动模板加载,或者自动加载你自己的模板。
**配置模板加载**
默认情况下,如果Elasticsearch输出是启用的,那么Filebeat会自动加载推荐的模板文件 ——— fields.yml。
* 加载不同的模板
* ~~~
setup.template.name: "your_template_name"
setup.template.fields: "path/to/fields.yml"
~~~
覆盖一个已存在的模板
* ~~~
setup.template.overwrite: true
~~~
禁用自动加载模板
* ~~~
setup.template.enabled: false
~~~
修改索引名称
~~~
# 默认情况下,Filebeat写事件到名为filebeat-6.3.2-yyyy.MM.dd的索引,其中yyyy.MM.dd是事件被索引的日期。为了用一个不同的名字,你可以在Elasticsearch输出中设置index选项。例如:
output.elasticsearch.index: "customname-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "customname"
setup.template.pattern: "customname-*"
setup.dashboards.index: "customname-*"
~~~
**手动加载模板**
~~~
./filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
~~~
### 设置Kibana dashboards
Filebeat附带了Kibana仪表盘、可视化示例。在你用dashboards之前,你需要创建索引模式,filebeat-\*,并且加载dashboards到Kibana中。为此,你可以运行setup命令或者在filebeat.yml配置文件中配置dashboard加载。
~~~
./filebeat setup --dashboards
~~~
### 输出到Logstash
如果你想使用Logstash对Filebeat收集的数据执行额外的处理,那么你需要将Filebeat配置为使用Logstash。
~~~
output.logstash:
hosts: ["127.0.0.1:5044"]
~~~
### 参考
~~~
#=========================== Filebeat inputs ==============
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
#============================== Dashboards ===============
setup.dashboards.enabled: false
#============================== Kibana ==================
setup.kibana:
host: "192.168.101.5:5601"
#-------------------------- Elasticsearch output ---------
output.elasticsearch:
hosts: ["localhost:9200"]
~~~
## 启动
~~~
# 设置dashboard
filebeat setup --dashboards
# 启动filebeat
filebeat -e -c /etc/filebeat/filebeat.yml -d "publish"
# 进es查看索引
GET /_cat/indices?format=json
{
"health" : "yellow",
"status" : "open",
"index" : "filebeat-6.7.0-2019.03.29",
"uuid" : "UEv8Ryi1RViK76tTP1Wwmw",
"pri" : "3",
"rep" : "1",
"docs.count" : "514",
"docs.deleted" : "0",
"store.size" : "158.7kb",
"pri.store.size" : "158.7kb"
}
~~~
进es查看文档会发现日志被记录在一个 `message `的字段上。其实一般情况下,只有这个字段是需要的,所以要经过`logstash`来中转一下。
## 参考资料
* [轻量型日志采集器](https://www.elastic.co/cn/products/beats/filebeat)