file区段
Logstash 使用一个名叫 FileWatch
的 Ruby Gem 库来监听文件变化。
这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 logstash 会漏过你的数据。
.sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。
Setting | Input type | Required | Effect |
---|---|---|---|
close_older |
number or string_duration | No | 文件输入将关闭上次读取指定持续时间的任何文件(如果指定了数字,则为秒).默认1hour。 这具有不同的含义,具体取决于文件是tailed或read。 如果是tailed,并且传入数据中存在大的时间间隔,则可以关闭文件(允许打开其他文件),但是在检测到新数据时将排队等待重新打开。 如果read,文件将在从读取最后一个字节后的closed_older秒后关闭。 如果将插件升级到4.1.0+,读取不拖尾并且不切换到使用读取模式,则保留此设置以实现向后兼容性。 |
delimiter |
string | No | 设置新行分隔符,默认为“\ n”。 请注意,在读取压缩文件时,不使用此设置,而是使用标准的Windows或Unix行结尾。 |
discover_interval |
number | No | 我们多长时间在路径选项中展开文件名模式以发现要观看的新文件。 该值是stat_interval的倍数,例如 如果stat_interval是“500 ms”,则可以每15 X 500毫秒 - 7.5秒发现新文件文件。 |
exclude |
array | No | 排除(与文件名匹配,而不是完整路径)。 文件名模式在这里也是有效的。path => "/var/log/" \n exclude => ".gz"
|
file_chunk_count |
number | No | 与file_chunk_size结合使用时,此选项设置在移动到下一个活动文件之前从每个文件中读取多少块(带或条带)。 例如,file_chunk_count为32,file_chunk_size为32KB,将处理每个活动文件的下一个1MB。 由于默认值非常大,因此在移动到下一个活动文件之前,文件会被有效地读取到EOF。 |
file_chunk_size |
number | No | 以块或块的形式从磁盘读取文件内容,并从块中提取行。 请参阅file_chunk_count以查看默认情况下更改此设置的原因和时间。 |
file_completed_action |
string, one of ["delete", "log", "log_and_delete"]
|
No | 在读取模式下,完成文件时应执行什么操作。 如果指定了删除,则将删除该文件。 如果指定了log,则将文件的完整路径记录到file_completed_log_path设置中指定的文件中。 如果指定了log_and_delete,则会执行上述两个操作。 |
file_completed_log_path |
string | No | 应该将完整读取的文件路径附加到哪个文件。 当file_completed_action为log或log_and_delete时,仅指定文件的此路径。 重要提示:此文件仅附加到 - 它可能会变得非常大。 您负责文件轮换。 |
file_sort_by |
string, one of ["last_modified", "path"]
|
No | 应该使用“监视”文件的哪个属性对其进行排序。 可以按修改日期或完整路径字母对文件进行排序。 以前,已发现并因此“监视”的文件的处理顺序取决于操作系统。 |
file_sort_direction |
string, one of ["asc", "desc"]
|
No | 在排序“已观看”文件时,在升序和降序之间进行选择。 如果最早的数据首先是重要的,那么last_modified + asc的默认值是好的。 如果最新的数据首先更重要,那么选择last_modified + desc。 如果对文件完整路径使用特殊命名约定,那么path + asc可能有助于控制文件处理的顺序。 |
ignore_older |
number or string_duration | No | 当文件输入发现在指定持续时间之前最后修改的文件(如果指定了数字,则为秒),将忽略该文件。 在发现之后,如果修改了被忽略的文件,则不再忽略它并读取任何新数据。 默认情况下,禁用此选项。 注意这个单位是几秒钟。 |
max_open_files |
number | No | 此输入在任何时候消耗的最大file_handles数是多少。 如果需要处理的文件多于此数字,请使用close_older关闭某些文件。 这不应设置为OS可以执行的最大值,因为其他LS插件和OS进程需要文件句柄。 内部设置默认值4095。 |
mode |
string, one of ["tail", "read"]
|
No | 您希望文件输入在什么模式下运行。关闭几个文件或读取许多内容完整的文件。 读取模式现在支持gzip文件处理。 如果指定“read”,则忽略以下其他设置:start_position(文件始终从头开始读取)close_older(达到EOF时文件自动关闭)如果指定“read”,则注意以下设置:ignore_older(不处理旧文件)file_completed_action(处理文件时应采取的操作)file_completed_log_path(应该将完成的文件路径记录到哪个文件) |
path |
array | Yes | 要用作输入的文件的路径。 您可以在此处使用文件名模式,例如/var/log/.log。 如果使用/var/log//.log这样的模式,将对所有* .log文件进行/ var / log的递归搜索。 路径必须是绝对的,不能是相对的。 |
sincedb_clean_after |
number or string_duration | No | sincedb记录现在有一个与之关联的最后一个活动时间戳。 如果在过去N天内未在跟踪文件中检测到任何更改,则其sincedb跟踪记录将过期,并且不会保留。 此选项有助于防止inode回收问题。 Filebeat有一个关于inode回收的常见问题. |
sincedb_path |
string | No | 将写入磁盘的sincedb数据库文件的路径(跟踪受监视日志文件的当前位置)。 默认情况下会将sincedb文件写入<path.data> / plugins / inputs / file注意:它必须是文件路径而不是目录路径 |
sincedb_write_interval |
number or string_duration | No | 使用受监视日志文件的当前位置编写自动数据库的频率(以秒为单位)。 |
start_position |
string, one of ["beginning", "end"]
|
No | 选择Logstash最初开始读取文件的位置:开头或结尾。 默认行为将文件视为实时流,因此从最后开始。 如果您要导入旧数据,请将其设置为开头。 |
stat_interval |
number or string_duration | No | 我们统计文件的频率(以秒为单位),以查看它们是否已被修改。 增加此间隔将减少我们进行的系统调用次数,但会增加检测新日志行的时间。 |
# file区段配置示例
input {
file {
path => ["/var/log/*.log", "/var/log/message"]
type => "system"
start_position => "beginning"
}
}
编码插件codec
Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。
有了它,我们可以在输入期处理不同类型的数据。
常见codec插件
json
nmap
rubydebug
multiline。
multiline codec插件折叠多行消息并将它们合并为一个事件。
重要
如果您使用的是支持多个主机的Logstash输入插件,例如beats输入插件,则不应使用多行编解码器来处理多行事件。 这样做可能会导致流混合和损坏的事件数据。 在这种情况下,您需要在将事件数据发送到Logstash之前处理多行事件。
Setting | Input type | Required | Effect |
---|---|---|---|
auto_flush_interval |
number | No | 当看到匹配的新行或者在这么多秒内没有附加新数据时,多行的累积将转换为事件。 没有默认值。 如果未设置,则不执行auto_flush。 单位:秒 |
charset |
string,可选范围见charset
|
No | 此输入中使用的字符编码。 例子包括UTF-8和cp1252 |
max_bytes |
bytes | No | 如果未正确定义事件边界,则事件的累积可使logstash退出并出现内存不足错误。 此设置确保在达到多个字节后刷新多行事件,它与max_lines组合使用。 |
max_lines |
number | No | 如果未正确定义事件边界,则事件的累积可使logstash退出并出现内存不足错误。 此设置确保在到达多行后刷新多行事件,它与max_bytes组合使用。 |
multiline_tag |
string | No | 使用给定标记标记多行事件。 此标记仅添加到实际上包含多行的事件中。 |
negate |
boolean | No | 否定正则表达式模式(如果不匹配)。默认false |
pattern |
string | Yes | 正则表达式 |
patterns_dir |
array | No | Logstash默认带有一堆模式,因此除非您要添加其他模式,否则您不一定需要自己定义。 |
what |
string, one of ["previous", "next"]
|
Yes | 如果模式匹配,事件是否属于下一个或上一个事件? |
过滤插件filter
扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!
所有filter插件都支持的几个配置项
Setting | Input type | Required | Effect |
---|---|---|---|
add_field |
hash | No | 向事件添加任意字段。 字段名称可以是动态的,并使用%{field}包含事件的一部分。 |
add_tag |
array | No | 向事件添加任意标记。 标签可以是动态的,并使用%{field}语法包含事件的一部分。 |
enable_metric |
boolean | No | 禁用或启用此特定插件实例的度量标准记录,默认情况下,我们会记录所有可用的度量标准,但您可以禁用特定插件的度量标准收集。 |
id |
string | No | 为插件配置添加唯一ID。例如,如果您有2个date过滤器。 在这种情况下添加命名ID将有助于在使用监视API时监视Logstash。 |
periodic_flush |
boolean | No | 定期调用过滤器刷新方法。 可选的。 |
remove_field |
array | No | 从事件中删除任意字段。字段名称可以是动态的,并使用%{field}包含事件的一部分。 |
remove_tag |
array | No | 从事件中删除任意标记。 标签可以是动态的,并使用%{field}语法包含事件的一部分。 |
常见filter插件
date
日期筛选器用于解析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。
Setting | Input type | Required | Effect |
---|---|---|---|
locale |
string | No | 区域设置主要用于解析月份名称(带MMM的模式)和工作日名称(带有EEE的模式)。 |
match |
array | No | [ field, formats... ] |
tag_on_failure |
array | No | 没有成功匹配时,将值附加到标签字段 |
target |
string | No | 将匹配的时间戳存储到给定的目标字段中。 如果未提供,则默认更新事件的@timestamp字段。 |
timezone |
string | No | 时区ID。Joda.org available time zones page |
grok
- 使用正则表达式将非结构化事件数据解析为字段。
- 解析任意文本并构造它。
- 可以将非结构化日志数据解析为结构化和可查询的内容。
提示:logstash6.4.2
的grok的正则文件位置:${logstach_home}/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
mutate
mutate过滤器允许您对字段执行常规突变。 您可以重命名,删除,替换和修改事件中的字段。
logstash mutate split日志切分
dissect
使用分隔符将非结构化事件数据提取到字段中
geoip
添加有关IP地址的地理信息
json
解析json事件
kv
此过滤器有助于自动解析foo = bar种类的消息(或特定事件字段)。
举例
# string
ip=1.2.3.4 error=REFUSED
# filter
filter {
kv { }
}
# result
ip: 1.2.3.4
error: REFUSED
# string
pin=12345~0&d=123&e=foo@bar.com&oq=bobo&ss=12345
# filter
filter {
kv {
field_split => "&?"
}
}
# result
pin: 12345~0
d: 123
e: foo@bar.com
oq: bobo
ss: 12345