logstash if/else表达式

格式如下:

if EXPRESSION {
  ...
} else if EXPRESSION {
  ...
} else {
  ...
}

可以使用以下的运算符:
equality: ==, !=, <, >, <=, >=
regexp: =~, !~ (checks a pattern on the right against a string value on the left)
inclusion: in, not in
The supported boolean operators are:
and, or, nand, xor
The supported unary operators are:
!

例如不处理GET请求:
if ([verb] == “GET”){drop{}}
只处理POST请求并且URL中包含username的日志。
if ([verb] != “POST” and  [request] !~ “username”) {
drop{}
}

在使用grok正则匹配的时候,如果没有匹配上,就会添加一个tags。
例如匹配CSDN信息的时候
grok {
match=>{ “message”=>”%{USER:username} # %{USER:passwd} # %{GREEDYDATA:mail}” }
}
然而passwd中有可能存在特殊符号,例如这条信息
omega11123 # K87)%23O # KingOmiga@gmail.com
看一下USER的正则怎么写的
USERNAME [a-zA-Z0-9._-]+
USER %{USERNAME}
可以看到仅匹配的大小写字母数字和._-
密码中的)%是匹配不到的。tags中会添加

          "tags" => [
        [0] "_grokparsefailure"
    ]

我们可以在输出的时候用if语句判断一下,如果正则匹配成功才输出到elasticsearch中。

  if "_grokparsefailure" not in [tags] {
  elasticsearch {
        hosts => "127.0.0.1:9200"
        index => "logstash-csdn"
        document_type => "csdn"
  }
  }

此时如果匹配失败的话,就不会输出到elasticsearch中。