1、fingerprint过滤器
filter {
# Perform hashing on NXLog differently than other logs
else if [type] == "nxlog-winevent" {
# 通过使用一致的hash替换值来fingerprint字段。
fingerprint {
# source字段的名称,其内容将用于创建指纹。 如果给出了数组,请参见concatenate_sources选项
source => [
"message",
"Hostname",
"EventTime",
"Channel",
"EventID"
]
# 如果设置为true并且方法不是UUID或PUNCTUATION,则插件会在进行指纹计算之前将source选项中给出的所有字段的名称和值连接到一个字符串中(例如旧的校验和过滤器)。
# 如果给出false和多个源字段,则目标字段将是一个具有给定源字段指纹的数组。
concatenate_sources => true
# 将存储生成指纹的字段的名称。 该字段的任何当前内容将被覆盖
target => "[@metadata][log_hash]"
method => "SHA1"
# 如果此过滤器成功,则添加字段 z_logstash_pipeline, 其值为 fingerprint-0099-002
add_field => { "z_logstash_pipeline" => "fingerprint-0099-002" }
}
}
}
fingerprint 过滤器 创建一个或多个字段的consistent 哈希(指纹),并将结果存储在新字段中。这可以用于在将事件插入Elasticsearch中时创建consistent 文档ID,从而允许Logstash中的事件引起现有文档的更新,而不是新文档的创建。
source配置选项 : source字段的名称,其内容将用于创建指纹。 如果给出了数组,请参见concatenate_sources选项。
concatenate_sources :concatenate_sources 如果设置为true并且方法不是UUID或PUNCTUATION,则插件会在进行指纹计算之前将source选项中给出的所有字段的名称和值连接到一个字符串中(例如旧的校验和过滤器)。 如果给出false和多个源字段,则target字段将是一个具有给定源字段指纹的数组。
target配置选项: target字段 将存储生成的指纹的字段的名称。 该字段的任何当前内容将被覆盖。
add_field配置选项: 如果此filter成功,则将任何任意字段添加到此事件中。 字段名称可以是动态的,并且可以使用%{field}包含事件的一部分。例如:
filter {
fingerprint {
add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
}
}
如果事件的字段为“ somefield” ==“ hello”,则此过滤器成功后将添加字段foo_hello(如果存在),并将上面的值和%{host}的部分替换为事件中的值。
2、json过滤器
json解析过滤器采用一个包含JSON的现有字段,并将其扩展为Logstash事件内的实际数据结构。
默认情况下,它将解析的JSON放在Logstash事件的根(顶层)中,但是可以使target配置将JSON放入任何任意事件字段中。
当事件解析期间发生一些不良情况时,此插件有一些备用方案。 如果JSON解析失败,则事件将保持不变,并以_jsonparsefailure进行标记; 然后,您可以使用条件清理数据。 您可以使用tag_on_failure选项配置此标记。
如果解析的数据包含@timestamp字段,则插件将尝试将其用于事件@timestamp,如果解析失败,则该字段将重命名为_ @ timestamp,并且该事件将使用_timestampparsefailure进行标记。
source配置选项:
例如, 在message字段有JSON数据:
filter {
json {
source => "message"
}
}
上面过滤器会从message字段解析JSON数据。
tag_on_failure配置选项
没有成功匹配时将值追加到tags字段
3、mutate 过滤器
mutate过滤器可让您对字段执行常规改变。 您可以重命名,删除,替换和修改事件中的字段。
gsub配置选项:将正则表达式与字段值匹配,然后将所有匹配项替换为替换字符串。 仅支持字符串或字符串数组的字段。 对于其他类型的字段,将不采取任何措施。
filter {
mutate {
gsub => [
# 使用下划线替换所有的斜杠
"fieldname", "/", "_",
# 使用点号. 替换反斜杠,问号,哈希和负号
"fieldname2", "[\\?#-]", "."
]
}
}
4、kv 过滤器
此过滤器有助于自动解析key-value类型的报文(或特定事件字段)。
如果您的数据不是使用=符号和空格构成的,则可以配置任意字符串以分割数据。 例如,通过将field_split参数设置为&,此过滤器可用于解析诸如foo=bar&baz=fizz之类的查询参数。
5、prune 过滤器
prune过滤器用于根据字段名称或其值的白名单或黑名单从事件中删除字段,(names and values can also be regular expressions)
白名单只允许匹配的字段(或者其值)通过。黑名单将匹配的字段(或者其值)排除。
6、Grok过滤器
Grok过滤器 解析任意文本并将其结构化。Grok是将非结构化日志数据解析为结构化和可查询的数据的好方法。该工具非常适合syslog日志,apache和其他Web服务器日志,mysql日志,以及通常给人类而非计算机使用的任何日志格式。
Grok通过将文本模式组合成与您的日志匹配的内容来工作。
grok模式的语法为%{SYNTAX:SEMANTIC}
SYNTAX是将与您的文本匹配的模式名称。 例如,NUMBER模式将匹配3.44,IP模式将匹配55.3.244.1。
SEMANTIC是为匹配的文本提供的标识符。 例如,事件的持续时间(duration)为3.44,因此您可以将其简称为持续时间(duration)。 此外,字符串55.3.244.1可能会标识发出请求的client。
在上面例子中,grok过滤器应该配置成, 用来从原始日志解析出duration和client字段:
%{NUMBER:duration} %{IP:client}
Logstash默认附带大约120种模式。 您可以在这里找到它们:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns