Logstash 中如何判断字段是否存在?
Logstash 条件语法用 if [fieldname] 判断字段存在,if ![fieldname] 判断不存在;嵌套字段写 [a][b]。本文给出条件示例与空字符串的区别。
条件语法:if [field_name] { ... }——字段存在即进入分支;if ![field_name] 则是不存在时执行。注意这与"字段值为空"是两回事。
基本用法
filter {
if [user_id] {
# user_id 字段存在才执行
mutate { add_field => { "has_user" => "true" } }
}
if ![referrer] {
# referrer 不存在
mutate { add_field => { "referrer" => "direct" } }
}
# 嵌套字段
if [request][headers][x-forwarded-for] {
# ...
}
}
组合条件
if [status] and [status] >= 500 { ... }
if [level] == "ERROR" or [level] == "FATAL" { ... }
if [tags] and "urgent" in [tags] { ... } # 数组包含
存在 vs 空值
if [field]:字段存在(值为空字符串也算存在!);- 判断非空:
if [field] and [field] != ""; - 判断非零/非空数组等需对应表达式。
常见问题(FAQ)
Q:能判断字段值是否为 null 吗? if [field] == nil 或直接用存在性判断(JSON null 解析后通常字段即不存在)。
Q:嵌套字段写 [a.b] 行吗? 不行——Logstash 条件语法只认 [a][b] 方括号形式。