Logstash 中如何判断字段是否存在?

Logstash 条件语法用 if [fieldname] 判断字段存在,if ![fieldname] 判断不存在;嵌套字段写 [a][b]。本文给出条件示例与空字符串的区别。

最佳实践
Logstash 中如何判断字段是否存在?封面

条件语法: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] 方括号形式。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台