设置和运行Filebeat
阅读本节之前,请参阅 基本安装说明的入门文档以帮助您入门。
本节包含有关如何设置和运行Filebeat的更多信息,其中包括:
目录布局
安装的目录布局如下所示:
类型 | 描述 | 默认位置 | 配置选项 |
---|---|---|---|
家 |
Filebeat安装的主页。 |
|
|
箱子 |
二进制文件的位置。 |
|
|
配置 |
配置文件的位置。 |
|
|
数据 |
持久数据文件的位置。 |
|
|
日志 |
由Filebeat创建的日志的位置。 |
|
|
您可以使用CLI标志或配置文件中的设置路径选项更改这些设置。
默认路径
Filebeat使用下列默认路径,除非您明确地更改它们。
deb和rpm
类型 | 描述 | 位置 |
---|---|---|
home |
Filebeat安装的主页。 |
|
bin |
二进制文件的位置。 |
|
config |
配置文件的位置。 |
|
data |
持久数据文件的位置。 |
|
logs |
由Filebeat创建的日志的位置。 |
|
对于deb和rpm分发,这些路径在init脚本或systemd单元文件中设置。确保使用首选操作系统方法(init脚本或systemctl
)来启动Filebeat服务。否则,路径可能被错误地设置。
docker
类型 | 描述 | 位置 |
---|---|---|
home |
Filebeat安装的主页。 |
|
bin |
二进制文件的位置。 |
|
config |
配置文件的位置。 |
|
data |
持久数据文件的位置。 |
|
logs |
由Filebeat创建的日志的位置。 |
|
zip,tar.gz和tgz
类型 | 描述 | 位置 |
---|---|---|
home |
Filebeat安装的主页。 |
|
bin |
二进制文件的位置。 |
|
config |
配置文件的位置。 |
|
data |
持久数据文件的位置。 |
|
logs |
由Filebeat创建的日志的位置。 |
|
对于zip,tar.gz和tgz分布,这些路径基于提取的二进制文件的位置。这意味着如果使用以下简单命令启动Filebeat,则所有路径都将正确设置:
./filebeat
Filebeat命令
Filebeat提供了一个用于运行Beat和执行常见任务的命令行界面,如测试配置文件和加载仪表板。命令行还支持 用于控制全局行为的全局标志。
sudo
在以下情况下使用以运行以下命令:
- 配置文件归属于
root
或 - Filebeat配置为捕获需要
root
访问的 数据
将配置或索引模板导出到stdout。 |
|
显示任何命令的帮助。 |
|
管理配置的模块。 |
|
运行Filebeat。如果在不指定命令的情况下启动Filebeat,则默认使用此命令。 |
|
设置初始环境,包括索引模板,Kibana仪表板(如果可用)和机器学习作业(可用时)。 |
|
测试配置。 |
|
显示有关当前版本的信息。 |
另请参阅全局标志。
export
命令
将配置或索引模板导出到stdout。您可以使用此命令快速查看您的配置或索引模板的内容。
概要
filebeat export SUBCOMMAND [FLAGS]
SUBCOMMANDS
config
将当前配置导出到stdout。如果使用-c
标志,则此命令将导出在指定文件中定义的配置。
template
将索引模板导出到stdout。您可以指定--es.version
和 --index
标志来进一步定义要导出的内容。
FLAGS
--es.version VERSION
与之一起指定时template
,导出与指定版本兼容的索引模板。
-h, --help
显示该export
命令的帮助。
--index BASE_NAME
与之一起指定时template
,设置用于索引模板的基本名称。如果未指定此标志,则默认的基本名称是filebeat
。
另请参阅全局标志。
例子
filebeat export config filebeat export template --es.version 6.1.3 --index myindexname
help
命令
显示任何命令的帮助。如果未指定命令,则显示该run
命令的帮助 。
概要
filebeat help COMMAND_NAME [FLAGS]
COMMAND_NAME
指定显示帮助的命令的名称。
FLAGS
-h, --help
显示该help
命令的帮助。
另请参阅全局标志。
例
filebeat help export
modules
命令
管理配置的模块。您可以使用此命令启用和禁用modules.d
目录中定义的特定模块配置。您使用此命令所做的更改将被保留,并用于后续的Filebeat运行。
要查看启用和禁用哪些模块,请运行list
子命令。
概要
filebeat modules SUBCOMMAND [FLAGS]
SUBCOMMANDS
disable MODULE_LIST
禁用空格分隔列表中指定的模块。
enable MODULE_LIST
启用空格分隔列表中指定的模块。
list
列出当前已启用和禁用的模块。
FLAGS
-h, --help
显示该export
命令的帮助。
另请参阅全局标志。
例子
filebeat modules list filebeat modules enable apache2 auditd mysql
run
命令编辑
运行Filebeat。如果在不指定命令的情况下启动Filebeat,则默认使用此命令。
概要
filebeat run [FLAGS]
要么:
filebeat [FLAGS]
FLAGS
-N, --N
禁止将事件发布到定义的输出。此选项仅用于测试Filebeat。
--cpuprofile FILE
将CPU配置文件数据写入指定的文件。此选项对解决Filebeat问题很有用。
-h, --help
显示该run
命令的帮助。
--httpprof [HOST]:PORT
启动一个http服务器进行分析。此选项对于疑难解答和分析Filebeat非常有用。
--memprofile FILE
将内存配置文件数据写入指定的输出文件。此选项对解决Filebeat问题很有用。
--modules MODULE_LIST
指定要运行的模块的逗号分隔列表。例如:
filebeat run --modules nginx,mysql,system
每次运行Filebeat时,不要指定模块列表,您可以使用该modules
命令启用和禁用特定的模块。然后当您运行Filebeat时,它将运行任何启用的模块。
--once
使用--once
标志时,Filebeat会启动所有配置的收割机和探矿仪,并运行每个探矿仪,直到收割机关闭。如果您设置了--once
标志,您还应该设置close_eof
收割机在达到文件结束时关闭。默认情况下收割机在close_inactive
达到后关闭。
--setup
加载示例Kibana仪表板。如果要在不运行Filebeat的情况下加载仪表板,请改用该setup
命令。
另请参阅全局标志。
例
filebeat run -e --setup
要么:
filebeat -e --setup
setup
命令编辑
设置初始环境,包括索引模板,Kibana仪表板(如果可用)和机器学习作业(可用时)。
- 索引模板确保字段在Elasticsearch中正确映射。
- Kibana仪表板使您更容易在Kibana中可视化Filebeat数据。
- 机器学习作业包含分析异常数据所需的配置信息和元数据。
使用这个命令而不是run --setup
当你想设置环境而不需要实际运行Filebeat和摄取数据。
概要
filebeat setup [FLAGS]
FLAGS
--dashboards
只设置Kibana仪表板。
-h, --help
显示该setup
命令的帮助。
--machine-learning
仅设置机器学习作业配置。
--modules MODULE_LIST
指定一个逗号分隔的模块列表。当filebeat.yml
文件中没有定义模块时,使用此标志可以避免错误。
--template
只设置索引模板。
另请参阅全局标志。
例
filebeat setup --dashboards
test
命令编辑
测试配置。
概要
filebeat test SUBCOMMAND [FLAGS]
子
config
测试配置设置。
output
测试Filebeat可以通过使用当前设置连接到输出。
FLAGS
-h, --help
显示该test
命令的帮助。
另请参阅全局标志。
例
filebeat test config
version
命令编辑
显示有关当前版本的信息。
概要
filebeat version [FLAGS]
FLAGS
-h, --help
显示该version
命令的帮助。
另请参阅全局标志。
例
filebeat version
全局标志编辑
这些全局标志在您运行Filebeat时可用。
-E, --E "SETTING_NAME=VALUE"
覆盖特定的配置设置。您可以指定多个覆盖。例如:
filebeat -E "name=mybeat" -E "output.elasticsearch.hosts=["http://myhost:9200"]"
此设置适用于当前正在运行的Filebeat进程。Filebeat配置文件不会更改。
-M, --M "VAR_NAME=VALUE"
覆盖Filebeat模块的默认配置。您可以指定多个变量覆盖。例如:
filebeat -modules=nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]" -M "nginx.access.var.pipeline=no_plugins"
-c, --c FILE
指定用于Filebeat的配置文件。你在这里指定的文件是相对的path.config
。如果-c
未指定标志filebeat.yml
,则使用默认配置文件。
-d, --d SELECTORS
启用对指定选择器的调试。对于选择器,可以指定以逗号分隔的组件列表,也可以使用-d "*"
为所有组件启用调试。例如,-d "publish"
显示所有“发布”相关的消息。
-e, --e
记录到stderr并禁用syslog /文件输出。
--path.config
设置配置文件的路径。有关详细信息,请参阅目录布局部分
--path.data
设置数据文件的路径。有关详细信息,请参阅目录布局部分
--path.home
设置其他文件的路径。有关详细信息,请参阅目录布局部分
--path.logs
设置日志文件的路径。有关详细信息,请参阅目录布局部分
--strict.perms
对配置文件进行严格的权限检查。默认是 -strict.perms=true
。请参阅 Beats平台参考中的配置文件所有权和权限以获取更多信息。
-v, --v
记录INFO级别的消息。
在Docker上运行Filebeat
Filebeat的Docker镜像可以从Elastic Docker注册表获得。您可以使用docker pull
命令检索图像。
docker pull docker.elastic.co/beats/filebeat:6.1.3
基本的图像是centos:7,源代码可以在GitHub上 找到。
在Docker
上配置Filebeat
Docker镜像提供了几种配置Filebeat的方法。传统的方法是通过绑定安装的卷提供配置文件,但也可以使用您的配置创建自定义映像。
绑定配置
在Docker上配置Filebeat的一种方法是filebeat.yml
通过绑定提供。与docker run
,绑定安装可以这样指定:
docker run \ -v ~/filebeat.yml:/usr/share/filebeat/filebeat.yml \ docker.elastic.co/beats/filebeat:6.1.3
自定义图像配置
可以将Filebeat配置嵌入到自定义映像中。下面是一个Dockerfile的例子来实现这个功能:
FROM docker.elastic.co/beats/filebeat:6.1.3 COPY filebeat.yml /usr/share/filebeat/filebeat.yml USER root RUN chown filebeat /usr/share/filebeat/filebeat.yml USER filebeat
在Kubernetes上运行Filebeat
Filebeat Docker镜像可以用于Kubernetes检索和发送容器日志。
Kubernetes部署清单
通过将Filebeat部署为DaemonSet, 我们确保在集群的每个节点上都有一个正在运行的实例。
Docker日志主机文件夹(/var/lib/docker/containers
)安装在Filebeat容器上。Filebeat将启动这些文件的探矿者,并开始收集这些文件。
一切都部署在kube-system
命名空间下,你可以通过更新YAML文件来改变它。
要获得清单运行:
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.1/deploy/kubernetes/filebeat-kubernetes.yaml
设置
清单中公开了一些参数来配置日志目的地,默认情况下,它们将使用现有的Elasticsearch部署,但是您可能需要更改该行为,因此只需编辑YAML文件并对其进行修改即可:
- name: ELASTICSEARCH_HOST value: elasticsearch - name: ELASTICSEARCH_PORT value: "9200" - name: ELASTICSEARCH_USERNAME value: elastic - name: ELASTICSEARCH_PASSWORD value: changeme
部署编辑
要将Filebeat部署到Kubernetes,只需运行:
kubectl create -f filebeat-kubernetes.yaml
那么你应该可以通过运行来检查状态:
$ kubectl --namespace=kube-system get ds/filebeat NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE-SELECTOR AGE filebeat 32 32 0 32 0 <none> 1m
日志应该开始流向Elasticsearch,全部使用Add Kubernetes元数据 处理器进行注释。
升级Filebeat
有关升级到新版本的信息,请参阅Beats平台参考中的以下主题:
Filebeat如何
在这个主题中,您了解了Filebeat的关键构建模块以及它们如何一起工作。了解这些概念将有助于您针对特定用例对Filebeat进行配置做出明智的决定。
Filebeat由两个主要组件组成:探矿者和收割者。这些组件一起工作来尾随文件并将事件数据发送到您指定的输出。
什么是收割机?
收割机负责读取单个文件的内容。收割机逐行读取每个文件,并将内容发送到输出。每个文件启动一台收割机。收割机负责打开和关闭文件,这意味着收割机运行时文件描述符保持打开状态。如果在收获文件时删除或重命名文件,Filebeat将继续读取文件。这有副作用,在收割机关闭之前,磁盘上的空间被保留。默认情况下,Filebeat保持打开文件直到close_inactive
达到。
关闭收割机有以下后果:
- 文件处理程序关闭,释放基础资源,如果在收割机还在读取文件时文件被删除。
- 文件的采集只会在
scan_frequency
经过后再次开始。 - 如果在收割机关闭的情况下移动或移除文件,文件的收割将不会继续。
要控制收割机何时关闭,请使用close_*
配置选项。
什么是探矿者?编辑
探矿者负责管理收割机并找到所有的读取源。
如果输入类型为log
,则探矿者会查找驱动器上与所定义的全局路径匹配的所有文件,并为每个文件启动一个收集器。每个探矿者都在自己的Go例程中运行。
以下示例将Filebeat配置为从与指定的glob模式匹配的所有日志文件中获取行:
filebeat.prospectors: - type: log paths: - /var/log/*.log - /var/path2/*.log
Filebeat目前支持两种prospector
类型:log
和stdin
。每个探矿者类型可以定义多次。该log
探矿检查每个文件看收割机是否需要启动,一个人是否已经在运行,或文件是否可以忽略不计(见ignore_older
)。只有在收割机关闭后文件的大小发生了变化的情况下,才会选择新行。
Filebeat探矿者只能读取本地文件。没有功能连接到远程主机读取存储的文件或日志。
Filebeat如何保持文件的状态?
Filebeat保持每个文件的状态,并经常刷新注册表文件中的磁盘状态。状态用于记住收割机正在读取的最后偏移量,并确保发送所有日志行。如果输出(如Elasticsearch或Logstash)无法访问,Filebeat将跟踪发送的最后一行,并在输出再次可用时继续读取文件。当Filebeat正在运行时,每个探矿者的状态信息也被保存在内存中。当Filebeat重新启动时,来自注册表文件的数据被用来重建状态,并且Filebeat继续每个在最后已知位置的收割机。
每个探矿者为每个找到的文件保留一个状态。由于文件可以被重命名或移动,文件名和路径不足以识别文件。对于每个文件,Filebeat存储唯一的标识符来检测文件是否先前被收获。
如果您的使用案例涉及每天创建大量新文件,您可能会发现注册表文件会变得太大。看到注册表文件太大?编辑有关您可以设置解决此问题的配置选项的详细信息。
Filebeat如何确保至少一次交付?
Filebeat保证事件至少被传递到配置的输出一次,没有数据丢失。Filebeat能够实现此行为,因为它将每个事件的传递状态存储在注册表文件中。
在定义的输出被阻止并且没有确认所有事件的情况下,Filebeat会一直尝试发送事件,直到输出确认已经收到事件。
如果Filebeat在发送事件的过程中关闭,则不会等待输出在关闭之前确认所有事件。任何发送到输出的事件,在Filebeat关闭之前没有被确认,在重新启动Filebeat时会再次发送。这可确保每个事件至少发送一次,但最终可能会将重复事件发送到输出。您可以通过设置shutdown_timeout
选项来配置Filebeat以在关闭之前等待特定的时间。
Filebeat的至少一次交付保证包括日志轮换和删除旧文件的限制。如果将日志文件写入磁盘并且旋转速度超过Filebeat可以处理的速度,或者如果在输出不可用的情况下删除文件,数据可能会丢失。在Linux上,Filebeat也可能因inode重用而跳过行。有关inode重用问题的更多详细信息,请参阅 常见问题解答。