ELK集群部署(九)之logstash过滤规则

logstash过滤规则

标准输入
定制过滤规则
标准输出到屏幕

test.yml模板
input{
   stdin {}
}

filter{
   mutate{xxxxxx} # 不同的过滤需求,需要替换这里的内容
}

output{
   stdout {
      codec => rubydebug
   }
}

====================================================================

grok{“message” => “\s+(?<request_time>\d+(?.\d+)?)\s+”}

结果

{
        "@version" => "1",
         "message" => "hello 23132.4245435 Jason",
            "host" => "node-2",
      "@timestamp" => 2022-05-20T05:49:55.054Z,
          "second" => ".4245435",
    "request_time" => "23132.4245435"
}

grok{“message” => “%{WORD} %{NUMBER:request_time:float} %{WORD}”}
结果

{
            "host" => "node-2",
        "@version" => "1",
    "request_time" => 123.456,
      "@timestamp" => 2022-05-20T05:55:14.774Z,
         "message" => "begin 123.456 end"
}

分割字符串

mutate{ split => ["message","|"]}
输入123|345|jason|long|darcy

结果
{
       "message" => [
        [0] "123",
        [1] "345",
        [2] "jason",
        [3] "long",
        [4] "darcy"
    ],
          "host" => "node-2",
      "@version" => "1",
    "@timestamp" => 2022-05-20T06:36:46.494Z
}

join只对数组类型字段有效,先分割,替换分隔符再合并

mutate{ split => [“message”,“|”]}
mutate{ join => [“message”,“,”]}
输入123|345|jason|long|darcy
结果

{
       "message" => "123,345,jason,long,darcy",
          "host" => "node-2",
      "@version" => "1",
    "@timestamp" => 2022-05-20T06:41:19.607Z
}

字符串拼接

mutate{ split => [“message”,“|”]}
mutate{ merge => [“message”,“host”]}
输入123|345|jason|long|darcy
结果

{
          "host" => "node-2",
       "message" => [
        [0] "123",
        [1] "345",
        [2] "jason",
        [3] "long",
        [4] "darcy",
        [5] "node-2"
    ],
      "@version" => "1",
    "@timestamp" => 2022-05-20T06:48:01.814Z
}

strip去除字段前后的空格

mutate{strip => [“message”]}
输入 jason 注意前后都有多个空格

结果

{
          "host" => "node-2",
      "@version" => "1",
       "message" => "jason",
    "@timestamp" => 2022-05-20T06:54:02.590Z
}

rename字段重命名

mutate{ rename => [“host”, “newhost”]}
输入 jason 注意前后都有多个空格
结果

{
       "message" => "jason",
    "@timestamp" => 2022-05-20T06:57:07.478Z,
      "@version" => "1",
       "newhost" => "node-2"
}

split一行拆分成多个事件

split{field=>“message” terminator=>“#”}
输入test1#test2

{
    "@timestamp" => 2022-05-20T07:14:19.414Z,
          "host" => "node-2",
       "message" => "test1",
      "@version" => "1"
}
{
    "@timestamp" => 2022-05-20T07:14:19.414Z,
          "host" => "node-2",
       "message" => "test2",
      "@version" => "1"
}

交叉日志合并多行日志

 filter {
   grok {
     match => [ "message", "%{LOGLEVEL:loglevel} - %{NOTSPACE:taskid} - %{NOTSPACE:logger} - %{WORD:label}( - %{INT:duration:int})?" ]
   }

   if [logger] == "TASK_START" {
     aggregate {
       task_id => "%{taskid}"
       code => "map['sql_duration'] = 0"
       map_action => "create"
     }
   }

   if [logger] == "SQL" {
     aggregate {
       task_id => "%{taskid}"
       code => "map['sql_duration'] += event.get('duration')"
       map_action => "update"
     }
   }

   if [logger] == "TASK_END" {
     aggregate {
       task_id => "%{taskid}"
       code => "event.set('sql_duration', map['sql_duration'])"
       map_action => "update"
       end_of_task => true
       timeout => 120
     }
   }
 }

依次输入
INFO - 12345 - TASK_START - start
INFO - 12345 - SQL - sqlQuery1 - 12
INFO - 12345 - SQL - sqlQuery2 - 34
INFO - 12345 - TASK_END - end

结果

{
          "label" => "end",
   "sql_duration" => 46,
           "host" => "node-2",
       "loglevel" => "INFO",
         "taskid" => "12345",
         "logger" => "TASK_END",
     "@timestamp" => 2022-05-20T07:43:34.820Z,
       "@version" => "1",
        "message" => "INFO - 12345 - TASK_END - end"
}

参考官网https://www.elastic.co/guide/en/logstash/current/plugins-filters-aggregate.html

发送邮件

input{
   stdin {}
}

output{
   stdout {
      codec => rubydebug
   }
   email{
    to => "jasonxxx@foxmail.com"
    from => "logstash@qq.com"
    subject => "Alert - %{+YYYY-MM-dd HH:mm:ss}"
    body => "Tags: Test\n\nContent:\n%{message}"
    port => 25
  }

}

直接用上面的模板,logstash就可以发送邮件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮JasonLong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值