1.根据条件删除当前消息

   if "caoke" not in [docker]{
     drop {}
   }
   if "caoke" != [className]{
      drop {}
   }
  1. 删除字段
    remove_field => ["message"]
  2. 添加字段
    mutate{
         add_field => {
             "timestamp" => "%{[message]}"
       }
     }
    
  3. 转换字段类型
    mutate{
           convert => {
                   "ip" => "string"
           }
    }
    
  4. 重命名字段
    mutate{
            convert => {
                    "ip" => "string"
            }
            rename => {
                    "ip"=>"IP"
            }
    }
    
  5. 字段取值 %{message}

7.logstash 条件判断语句

  使用条件来决定filter和output处理特定的事件。logstash条件类似于编程语言。条件支持if、else if、else语句,可以嵌套。 
  比较操作有: 
  相等: ==, !=, <, >, <=, >= 
  正则: =~(匹配正则), !~(不匹配正则) 
  包含: in(包含), not in(不包含) 
  布尔操作: 
  and(与), or(或), nand(非与), xor(非或) 
  一元运算符: 
  !(取反) 
  ()(复合表达式), !()(对复合表达式结果取反) 

if[foo] in "String"在执行这样的语句是出现错误原因是没有找到叫做foo的field,无法把该字段值转化成String类型。所以最好要加field if exist判断。
判断字段是否存在,代码如下:

if ["foo"] {
   mutate {
     add_field => { "bar" => "%{foo}"}
   }
 }

 example:
   filter{
       if "start" in [message]{
           grok{
               match => xxxxxxxxx
           }
       }else if "complete" in [message]{
           grok{
               xxxxxxxxxx
           }
       }else{
           grok{
               xxxxxxx
           }
       }

   }

   

  1. 创建模板
PUT _template/temp_jiagou
{
  "order": 0,
  "index_patterns": [
    "jiagou-*"
  ],
  "settings": {
    "index": {
      "number_of_shards": "1",
      "number_of_replicas": "1",
      "refresh_interval": "5s"
    }
  },
  "mappings": {
    "_default_": {
      "properties": {
        "logTimestamp": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS||epoch_millis"
        },
        "partition": {
          "type": "integer"
        },
        "offset": {
          "type": "long"
        },
        "lineNum": {
          "type": "integer"
        }
      }
    }
  }
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐