文件输入插件
编辑文件输入插件编辑
- 插件版本:v4.4.6
- 发布时间:2023-12-13
- 更新日志
有关其他版本,请参阅版本化插件文档。
获取帮助编辑
如果您对插件有任何疑问,请在论坛中打开一个主题。对于错误或功能请求,请在Github中打开一个问题。有关 Elastic 支持的插件列表,请参阅Elastic 支持矩阵。
描述编辑
从文件中流式传输事件,通常以类似于tail -0F
的方式跟踪它们,但可以选择从头开始读取它们。
通常,日志记录会在写入的每一行的末尾添加一个换行符。默认情况下,假设每个事件都是一行,并且一行被视为换行符之前的文本。如果您想将多行日志合并到一个事件中,则需要使用多行编解码器。插件在发现新文件和处理每个发现的文件之间循环。发现的文件具有生命周期,它们从“已监视”或“已忽略”状态开始。生命周期中的其他状态是:“活动”、“已关闭”和“未监视”。
默认情况下,使用 4095 个文件的窗口来限制正在使用的文件句柄的数量。处理阶段有许多阶段
- 检查“已关闭”或“已忽略”文件的大小自上次以来是否已更改,如果是,则将它们置于“已监视”状态。
- 选择足够多的“已监视”文件以填充窗口中的可用空间,这些文件将变为“活动”状态。
- 打开并读取活动文件,默认情况下,每个文件都从最后一个已知位置读取到当前内容的末尾 (EOF)。
在某些情况下,能够控制首先读取哪些文件、排序以及是完全读取文件还是分段/条带读取文件非常有用。完全读取是指所有文件 A,然后是文件 B,然后是文件 C,依此类推。分段或条带读取是指部分文件 A,然后是文件 B,然后是文件 C,依此类推,循环回到文件 A,直到读取所有文件。可以通过更改file_chunk_count
和可能的file_chunk_size
来指定分段读取。如果您希望所有文件中的一些事件尽快出现在 Kibana 中,则分段和排序可能会很有用。
该插件有两种操作模式:尾部模式和读取模式。
尾部模式编辑
在此模式下,插件旨在跟踪更改的文件并在新内容追加到每个文件时发出新内容。在此模式下,文件被视为永无止境的内容流,EOF 没有特殊意义。插件始终假设会有更多内容。当文件被轮换时,检测到较小或零大小,当前位置重置为零,流式传输继续。在累积的字符可以作为一行发出之前,必须看到一个分隔符。
读取模式编辑
在此模式下,插件将每个文件视为内容完整,即有限的行流,现在 EOF 非常重要。不需要最后一个分隔符,因为 EOF 意味着累积的字符可以作为一行发出。此外,EOF 在这里意味着文件可以关闭并置于“未监视”状态 - 这会自动释放活动窗口中的空间。此模式还可以在压缩文件内容完整时对其进行处理。读取模式还允许在完全处理文件后执行操作。
过去,在仍然假设无限流的情况下尝试模拟读取模式并不理想,而专用读取模式是一种改进。
与 Elastic 通用模式 (ECS) 的兼容性编辑
此插件添加有关事件源的元数据,并且可以使用ecs_compatibility
以与 ECS 兼容的方式进行配置。此元数据在事件由相应的编解码器解码后添加,并且永远不会覆盖现有值。
ECS 已禁用 | ECS v1 、v8 |
描述 |
---|---|---|
|
|
处理事件的 Logstash 主机的名称 |
|
|
事件源自的日志文件的完整路径 |
跟踪已监视文件中的当前位置编辑
插件通过将每个文件中的当前位置记录在一个名为 sincedb 的单独文件中来跟踪它。这使得停止和重新启动 Logstash 并让它从停止的地方继续,而不会丢失在 Logstash 停止时添加到文件中的行成为可能。
默认情况下,sincedb 文件放置在 Logstash 的数据目录中,文件名基于正在监视的文件名模式(即path
选项)。因此,更改文件名模式将导致使用新的 sincedb 文件,并且任何现有的当前位置状态都将丢失。如果您经常更改模式,则使用sincedb_path
选项明确选择 sincedb 路径可能是有意义的。
每个输入必须使用不同的sincedb_path
。使用相同的路径会导致问题。每个输入的读取检查点必须存储在不同的路径中,以便信息不会被覆盖。
文件通过标识符进行跟踪。此标识符由 inode、主设备号和次设备号组成。在 Windows 中,从kernel32
API 调用中获取不同的标识符。
Sincedb 记录现在可以过期,这意味着在一段时间后将不再记住旧文件的读取位置。文件系统可能需要为新内容重用 inode。理想情况下,我们不会使用旧内容的读取位置,但我们没有可靠的方法来检测是否发生了 inode 重用。这与读取模式更相关,在读取模式下,sincedb 中会跟踪大量文件。但请记住,如果记录已过期,则会再次读取以前看到的文件。
Sincedb 文件是具有四列(< v5.0.0)、五列或六列的文本文件
- inode 编号(或等效编号)。
- 文件系统的主设备号(或等效编号)。
- 文件系统的次设备号(或等效编号)。
- 文件中的当前字节偏移量。
- 上次活动时间戳(浮点数)
- 此记录匹配到的最后一个已知路径(对于转换为新格式的旧 sincedb 记录,此字段为空)。
在非 Windows 系统上,您可以使用例如ls -li
获取文件的 inode 编号。
从远程网络卷读取编辑
文件输入在远程文件系统(如 NFS、Samba、s3fs-fuse 等)上没有经过全面测试,但是偶尔会测试 NFS。远程 FS 客户端给出的文件大小用于控制在任何给定时间读取多少数据,以防止读取到已分配但尚未填充的内存中。由于我们在标识符中使用设备主设备号和次设备号来跟踪文件的“上次读取”位置,并且在重新挂载时设备主设备号和次设备号可能会更改,因此 sincedb 记录在重新挂载时可能不匹配。读取模式可能不适用于远程文件系统,因为在客户端发现文件时,文件大小可能与远程端的文件大小不同,原因是从远程到客户端的复制过程中存在延迟。
尾部模式下的文件轮换编辑
此输入会检测并处理文件轮换,而不管文件是通过重命名操作还是复制操作进行轮换的。为了支持在轮换发生后的一段时间内写入轮换文件的程序,请在要监视的文件名模式(path
选项)中包含原始文件名和轮换文件名(例如 /var/log/syslog 和 /var/log/syslog.1)。对于重命名,将检测到 inode 已从/var/log/syslog
移动到/var/log/syslog.1
,因此“状态”也在内部移动,不会重新读取旧内容,但会读取重命名文件上的任何新内容。对于复制/截断到新文件路径的复制内容,如果发现,将被视为新发现并从头开始读取。因此,复制的文件路径不应出现在要监视的文件名模式(path
选项)中。将检测到截断,并将“上次读取”位置更新为零。
文件输入配置选项编辑
此插件支持以下配置选项以及稍后描述的通用选项。
持续时间设置可以用文本形式指定,例如“250 毫秒”,此字符串将转换为十进制秒。支持许多自然和缩写的持续时间,有关详细信息,请参阅string_duration。
设置 | 输入类型 | 必需 |
---|---|---|
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
否 |
||
字符串,其中之一 |
否 |
|
否 |
||
字符串,其中之一 |
否 |
|
字符串,其中之一 |
否 |
|
否 |
||
否 |
||
字符串,其中之一 |
否 |
|
是 |
||
否 |
||
否 |
||
否 |
||
字符串,其中之一 |
否 |
|
否 |
另请参阅 通用选项 获取所有输入插件支持的选项列表。
check_archive_validity
编辑
- 值类型为 布尔值
- 默认值为
false
。
设置为 true
时,此设置会在处理压缩文件之前验证其是否有效。文件会经过两次传递 - 一次传递用于验证文件是否有效,另一次传递用于处理文件。
验证压缩文件需要更多处理时间,但可以防止损坏的存档导致循环。
close_older
编辑
文件输入会关闭在指定持续时间(如果指定了数字,则为秒)之前最后一次读取的所有文件。根据文件是被跟踪还是被读取,这将产生不同的影响。如果正在跟踪,并且传入数据中存在较大的时间间隔,则文件可以关闭(允许打开其他文件),但在检测到新数据时将排队等待重新打开。如果正在读取,则文件将在从最后一次读取字节后的 closed_older 秒后关闭。如果您将插件升级到 4.1.0+、正在读取而不是跟踪并且不切换到使用读取模式,则此设置将保留以实现向后兼容性。
discover_interval
编辑
- 值类型为 数字
- 默认值为
15
我们扩展 path
选项中的文件名模式以发现要监视的新文件的频率。此值为 stat_interval
的倍数,例如,如果 stat_interval
为“500 毫秒”,则可以每 15 x 500 毫秒(7.5 秒)发现一次新文件。实际上,这将是最好的情况,因为需要考虑读取新内容所花费的时间。
ecs_compatibility
编辑
- 值类型为 字符串
-
支持的值为
-
disabled
:在事件上设置非 ECS 元数据(例如顶级host
、path
) -
v1
、v8
:在事件上设置与 ECS 兼容的元数据(例如[host][name]
、[log][file][path]
)
-
-
默认值取决于运行的 Logstash 版本
- 如果 Logstash 提供了
pipeline.ecs_compatibility
设置,则其值将用作默认值 - 否则,默认值为
disabled
。
- 如果 Logstash 提供了
控制此插件与 弹性通用模式 (ECS) 的兼容性。
exclude
编辑
- 值类型为 数组
- 此设置没有默认值。
排除项(与文件名匹配,而不是完整路径)。文件名模式在此处也有效。例如,如果您有
path => "/var/log/*"
在尾部模式下,您可能希望排除 gzip 文件
exclude => "*.gz"
exit_after_read
编辑
- 值类型为 布尔值
- 默认值为
false
此选项可以在 read
模式下使用,以强制在读取文件时关闭所有观察程序。可以在文件内容静态且在执行期间不会更改的情况下使用。设置为 true
时,它还会禁用文件的主动发现 - 只会读取进程启动时目录中的文件。它支持 sincedb
条目。如果文件已处理一次,然后进行了修改,则下次运行将只读取新添加的条目。
file_chunk_count
编辑
- 值类型为 数字
- 默认值为
4611686018427387903
与 file_chunk_size
结合使用时,此选项设置在移至下一个活动文件之前从每个文件读取的块(带区或条带)数量。例如,file_chunk_count
为 32 且 file_chunk_size
为 32KB 将处理每个活动文件中的下一个 1MB。由于默认值非常大,因此在移至下一个活动文件之前,文件实际上已读取到 EOF。
file_chunk_size
编辑
- 值类型为 数字
- 默认值为
32768
(32KB)
文件内容以块或块的形式从磁盘读取,并从块中提取行。请参阅 file_chunk_count
了解为何以及何时更改此设置的默认值。
file_completed_action
编辑
- 值可以是以下任意值:
delete
、log
、log_and_delete
- 默认值为
delete
。
在 read
模式下,当文件处理完成后应执行的操作。如果指定了 delete,则文件将被删除。如果指定了 log,则文件的完整路径将记录到 file_completed_log_path
设置中指定的文件中。如果指定了 log_and_delete
,则会执行上述两个操作。
file_completed_log_path
编辑
- 值类型为 字符串
- 此设置没有默认值。
应将完全读取的文件路径追加到哪个文件。仅当 file_completed_action
为 log 或 log_and_delete 时,才将此路径指定到文件。重要提示:此文件仅追加 - 它可能会变得非常大。您负责文件轮换。
file_sort_by
编辑
- 值可以是以下任意值:
last_modified
、path
- 默认值为
last_modified
。
应使用“已监视”文件的哪个属性对其进行排序。文件可以按修改日期或完整路径字母顺序排序。以前,发现的以及因此“已监视”文件的处理顺序取决于操作系统。
file_sort_direction
编辑
- 值可以是以下任意值:
asc
、desc
- 默认值为
asc
。
对“已监视”文件进行排序时,选择升序或降序。如果最旧的数据优先,则默认值 last_modified
+ asc
很好。如果最新的数据更重要,则选择 last_modified
+ desc
。如果您对文件完整路径使用特殊的命名约定,则 path
+ asc
可能有助于控制文件处理的顺序。
ignore_older
编辑
当文件输入发现上次修改时间早于指定持续时间(如果指定了数字,则为秒)的文件时,该文件将被忽略。发现后,如果修改了被忽略的文件,则不再忽略该文件,并且会读取任何新数据。默认情况下,此选项处于禁用状态。请注意,此单位为秒。
max_open_files
编辑
- 值类型为 数字
- 此设置没有默认值。
此输入在任何时候最多可使用的文件句柄数。 如果您需要处理的文件数量超过此数字,请使用 close_older 关闭一些文件。 此值不应设置为操作系统允许的最大值,因为其他 LS 插件和操作系统进程也需要文件句柄。 内部默认设置为 4095。
mode
编辑
- 值可以是
tail
或read
。 - 默认值为
tail
。
您希望文件输入以哪种模式运行。 跟踪少量文件或读取许多内容完整的文件。 读取模式现在支持 gzip 文件处理。
如果指定了 read
,则可以使用以下设置
-
ignore_older
(不处理较旧的文件) -
file_completed_action
(处理完文件后应采取的操作) -
file_completed_log_path
(已完成的文件路径应记录到哪个文件中)
如果指定了 read
,则忽略以下设置
-
start_position
(始终从头开始读取文件) -
close_older
(到达 EOF 时自动*关闭*文件)
path
编辑
- 这是一个必填设置。
- 值类型为 数组
- 此设置没有默认值。
要用作输入的一个或多个文件的路径。 您可以在此处使用文件名模式,例如 /var/log/*.log
。 如果您使用 /var/log/**/*.log
之类的模式,则将对 /var/log
进行递归搜索以查找所有 *.log
文件。 路径必须是绝对路径,不能是相对路径。
您也可以配置多个路径。 请参阅Logstash 配置页面上的示例。
sincedb_clean_after
编辑
sincedb 记录现在具有与其关联的上次活动时间戳。 如果在过去 N 天内未检测到跟踪文件中的更改,则其 sincedb 跟踪记录将过期,并且不会被持久化。 此选项有助于防止 inode 回收问题。 Filebeat 有一个关于inode 回收的常见问题解答。
sincedb_path
编辑
- 值类型为 字符串
- 此设置没有默认值。
将写入磁盘的 sincedb 数据库文件(跟踪已监控日志文件的当前位置)的路径。 默认情况下,sincedb 文件将写入 <path.data>/plugins/inputs/file
注意:它必须是文件路径,而不是目录路径
start_position
编辑
- 值可以是以下任意一项:
beginning
、end
- 默认值为
"end"
选择 Logstash 最初开始读取文件的位置:开头还是结尾。 默认行为将文件视为实时流,因此从结尾开始。 如果您有要导入的旧数据,请将其设置为*开头*。
此选项仅修改文件是新的且以前从未见过的“首次接触”情况,即 Logstash 读取的 sincedb 文件中没有记录当前位置的文件。 如果以前已经见过某个文件,则此选项无效,并且将使用 sincedb 文件中记录的位置。
通用选项编辑
所有输入插件都支持以下配置选项
详细信息编辑
codec
编辑
- 值类型为 编解码器
- 默认值为
"plain"
用于输入数据的编解码器。 输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中使用单独的过滤器。
字符串持续时间编辑
格式为 数字
字符串
,并且它们之间的空格是可选的。 因此,“45s”和“45 s”都是有效的。
使用最合适的持续时间,例如“3 天”而不是“72 小时”。
周编辑
支持的值:w
week
weeks
,例如“2 w”、“1 week”、“4 weeks”。
天编辑
支持的值:d
day
days
,例如“2 d”、“1 day”、“2.5 days”。
小时编辑
支持的值:h
hour
hours
,例如“4 h”、“1 hour”、“0.5 hours”。
分钟编辑
支持的值:m
min
minute
minutes
,例如“45 m”、“35 min”、“1 minute”、“6 minutes”。
秒编辑
支持的值:s
sec
second
seconds
,例如“45 s”、“15 sec”、“1 second”、“2.5 seconds”。