簡體   English   中英

Logstash - 將日志拆分為 csv 文件

[英]Logstash - splitting the log into a csv file

我想使用logstash通過這些日志中出現的常量值來分隔適當的日志,然后將日志在分隔符(“|”)之后分成幾部分,並將其放入帶有標題的csv文件中。 我要查找的日志由常量 (WID2) 識別。 我還注意到 GREEDYDATA 提取的消息在大約 85 個字符后被截斷

示例日志:2022-01-02 10:32:30,0000001 | WID2 | 3313141414 | 請求 | STEP_1 | 好的 | 信息

我想從這個日志中創建帶有標題的 csv 文件:TIMESTAMP、VALUE、MESSAGE_TYPE、STEP、STATUS、MESSAGE。 我不想在 csv 文件中保存常量值 (WID2),它僅用於查找我的日志等。

我寫了它,但它不起作用:

input {
 file {
  path => ["path"]
  start_position => "beginning"
  sincedb_path => "path"
 }
}

filter {
 grok {
  match => {
   "message" => "%{GREEDYDATA:SYSLOGMESSAGE}"
    }
   }
 if ([SYSLOGMESSAGE] !~ "WID2"){
  drop {}
 }
 if([SYSLOGMESSAGE] =~ 'WID2") {
  csv {
   separator => "|"
   columns => ["TIMESTAMP", "VALUE", "MESSAGE_TYPE", "STEP", "STATUS", "MESSAGE"]
  }
 }
}

output{
 file {
  path => ["path.csv"]
 }
}

如果您的日志消息具有以下格式:

2022-01-02 10:32:30,0000001 | WID2 | 3313141414 | Request | STEP_1 | OK | Message

並且您想解析每條帶有WID2的消息,以下過濾器將起作用。

filter {
    if "WID2" in [message] {
        csv {
            separator => "|"
            columns => ["TIMESTAMP", "[@metadata][wid2]", "VALUE", "MESSAGE_TYPE", "STEP", "STATUS", "MESSAGE"]
        }
    } else {
        drop {}
    }
}

if條件將測試消息中是否存在WID2 ,如果為真,它將使用csv過濾器對其進行解析,因為您的 csv 的第二列是值WID2 ,您不想保存它,您可以將其值存儲在字段[@metadata][wid2]中,此元數據字段將不會出現在 output 塊中。

如果消息字段中不存在字符串WID2 ,則刪除該事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM