文件输入插件编辑

  • 插件版本: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 v1v8 描述

主机

[主机][名称]

处理事件的 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)、五列或六列的文本文件

  1. inode 编号(或等效编号)。
  2. 文件系统的主设备号(或等效编号)。
  3. 文件系统的次设备号(或等效编号)。
  4. 文件中的当前字节偏移量。
  5. 上次活动时间戳(浮点数)
  6. 此记录匹配到的最后一个已知路径(对于转换为新格式的旧 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+、正在读取而不是跟踪并且不切换到使用读取模式,则此设置将保留以实现向后兼容性。

delimiter编辑

设置换行符,默认为“\n”。请注意,读取压缩文件时不使用此设置,而是使用标准的 Windows 或 Unix 行尾。

discover_interval编辑

  • 值类型为 数字
  • 默认值为 15

我们扩展 path 选项中的文件名模式以发现要监视的新文件的频率。此值为 stat_interval 的倍数,例如,如果 stat_interval 为“500 毫秒”,则可以每 15 x 500 毫秒(7.5 秒)发现一次新文件。实际上,这将是最好的情况,因为需要考虑读取新内容所花费的时间。

ecs_compatibility编辑

  • 值类型为 字符串
  • 支持的值为

    • disabled:在事件上设置非 ECS 元数据(例如顶级 hostpath
    • v1v8:在事件上设置与 ECS 兼容的元数据(例如 [host][name][log][file][path]
  • 默认值取决于运行的 Logstash 版本

    • 如果 Logstash 提供了 pipeline.ecs_compatibility 设置,则其值将用作默认值
    • 否则,默认值为 disabled

控制此插件与 弹性通用模式 (ECS) 的兼容性。

exclude编辑

  • 值类型为 数组
  • 此设置没有默认值。

排除项(与文件名匹配,而不是完整路径)。文件名模式在此处也有效。例如,如果您有

    path => "/var/log/*"

在尾部模式下,您可能希望排除 gzip 文件

    exclude => "*.gz"

exit_after_read编辑

此选项可以在 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编辑

  • 值可以是以下任意值:deleteloglog_and_delete
  • 默认值为 delete

read 模式下,当文件处理完成后应执行的操作。如果指定了 delete,则文件将被删除。如果指定了 log,则文件的完整路径将记录到 file_completed_log_path 设置中指定的文件中。如果指定了 log_and_delete,则会执行上述两个操作。

file_completed_log_path编辑

  • 值类型为 字符串
  • 此设置没有默认值。

应将完全读取的文件路径追加到哪个文件。仅当 file_completed_actionloglog_and_delete 时,才将此路径指定到文件。重要提示:此文件仅追加 - 它可能会变得非常大。您负责文件轮换。

file_sort_by编辑

  • 值可以是以下任意值:last_modifiedpath
  • 默认值为 last_modified

应使用“已监视”文件的哪个属性对其进行排序。文件可以按修改日期或完整路径字母顺序排序。以前,发现的以及因此“已监视”文件的处理顺序取决于操作系统。

file_sort_direction编辑

  • 值可以是以下任意值:ascdesc
  • 默认值为 asc

对“已监视”文件进行排序时,选择升序或降序。如果最旧的数据优先,则默认值 last_modified + asc 很好。如果最新的数据更重要,则选择 last_modified + desc。如果您对文件完整路径使用特殊的命名约定,则 path + asc 可能有助于控制文件处理的顺序。

ignore_older编辑

当文件输入发现上次修改时间早于指定持续时间(如果指定了数字,则为秒)的文件时,该文件将被忽略。发现后,如果修改了被忽略的文件,则不再忽略该文件,并且会读取任何新数据。默认情况下,此选项处于禁用状态。请注意,此单位为秒。

max_open_files编辑

  • 值类型为 数字
  • 此设置没有默认值。

此输入在任何时候最多可使用的文件句柄数。 如果您需要处理的文件数量超过此数字,请使用 close_older 关闭一些文件。 此值不应设置为操作系统允许的最大值,因为其他 LS 插件和操作系统进程也需要文件句柄。 内部默认设置为 4095。

mode编辑

  • 值可以是 tailread
  • 默认值为 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编辑

  • 值类型为 数字字符串持续时间
  • 此设置的默认值为“2 周”。
  • 如果指定了数字,则将其解释为,并且可以是十进制数,例如 0.5 为 12 小时。

sincedb 记录现在具有与其关联的上次活动时间戳。 如果在过去 N 天内未检测到跟踪文件中的更改,则其 sincedb 跟踪记录将过期,并且不会被持久化。 此选项有助于防止 inode 回收问题。 Filebeat 有一个关于inode 回收的常见问题解答。

sincedb_path编辑

  • 值类型为 字符串
  • 此设置没有默认值。

将写入磁盘的 sincedb 数据库文件(跟踪已监控日志文件的当前位置)的路径。 默认情况下,sincedb 文件将写入 <path.data>/plugins/inputs/file 注意:它必须是文件路径,而不是目录路径

sincedb_write_interval编辑

写入包含已监控日志文件当前位置的 since 数据库的频率(以秒为单位)。

start_position编辑

  • 值可以是以下任意一项:beginningend
  • 默认值为 "end"

选择 Logstash 最初开始读取文件的位置:开头还是结尾。 默认行为将文件视为实时流,因此从结尾开始。 如果您有要导入的旧数据,请将其设置为*开头*。

此选项仅修改文件是新的且以前从未见过的“首次接触”情况,即 Logstash 读取的 sincedb 文件中没有记录当前位置的文件。 如果以前已经见过某个文件,则此选项无效,并且将使用 sincedb 文件中记录的位置。

stat_interval编辑

我们对文件进行统计以查看其是否已被修改的频率(以秒为单位)。 增加此间隔将减少我们进行的系统调用次数,但会增加检测新日志行的时间。

发现新文件并检查它们是变大还是变小是在循环中进行的。 此循环将休眠 stat_interval 秒,然后再循环。 但是,如果文件变大了,则会读取新内容并将行排队。 读取所有已增长的文件并将其排队可能需要一些时间,尤其是在管道拥塞的情况下。 因此,总循环时间是 stat_interval 和文件读取时间的组合。

通用选项编辑

所有输入插件都支持以下配置选项

设置 输入类型 必需

add_field

hash

codec

codec

enable_metric

布尔值

id

字符串

tags

数组

type

字符串

详细信息编辑

 

add_field编辑

  • 值类型为 哈希
  • 默认值为 {}

向事件添加字段

codec编辑

用于输入数据的编解码器。 输入编解码器是一种方便的方法,可以在数据进入输入之前对其进行解码,而无需在 Logstash 管道中使用单独的过滤器。

enable_metric编辑

默认情况下,禁用或启用此特定插件实例的指标日志记录,我们会记录所有可以记录的指标,但您可以禁用特定插件的指标收集。

id编辑

  • 值类型为 字符串
  • 此设置没有默认值。

向插件配置添加唯一的 ID。 如果未指定 ID,Logstash 将生成一个。 强烈建议您在配置中设置此 ID。 当您有两个或多个相同类型的插件时,例如,如果您有两个文件输入,这将特别有用。 在这种情况下,添加命名 ID 将有助于在使用监控 API 时监控 Logstash。

input {
  file {
    id => "my_plugin_id"
  }
}

id 字段中的变量替换仅支持环境变量,不支持使用密钥存储中的值。

tags编辑

  • 值类型为 数组
  • 此设置没有默认值。

向您的事件添加任意数量的任意标签。

这有助于以后的处理。

type编辑

  • 值类型为 字符串
  • 此设置没有默认值。

向此输入处理的所有事件添加 type 字段。

类型主要用于过滤器激活。

类型存储为事件本身的一部分,因此您也可以使用类型在 Kibana 中搜索它。

如果您尝试在已经具有类型的事件上设置类型(例如,当您将事件从传送器发送到索引器时),则新输入不会覆盖现有类型。 在传送器处设置的类型将始终保留在该事件中,即使将其发送到另一个 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”。

毫秒编辑

支持的值:ms msec msecs,例如“500 ms”、“750 msec”、“50 msecs

milli millismilliseconds 不受支持

微秒编辑

支持的值:us usec usecs,例如“600 us”、“800 usec”、“900 usecs”

micro microsmicroseconds 不受支持