簡體   English   中英

帶有 hdfs 的 logstash 用於特定的持續時間

[英]logstash with hdfs for paritcular duration

嗨,我是新的 logstash,我已經完成了從 tcp 讀取數據並寫入 hdfs ...該部分已完成,但我想將數據寫入 hdfs 的 4 個不同文件夾

這是示例代碼

input {
tcp {

host => "X.X.X.X"
port => 5051
codec => json_lines
}

}
filter 
{
  mutate 
{
 remove_field => [ "@version", "path", "host","logger_name","tags","stack_info","level","port","type"]
 }
 mutate {
         add_field => { "count" => "1"} 
 }

 }

 output {
 webhdfs 
    {
    
        host => "127.0.0.1"                
        port => 50070  
        path => "/folder/%{+YYYY-MM-dd_HH-mm}.csv"          
        user => "hduser"                
        codec => line { format => "%{message}"} 
    }

這里的問題是我已經寫入文件夾,但后來我想在一定時間內寫入另外 3 個不同的文件夾,如文件夾 1、文件夾 2、文件夾 3....

有可能,您將需要使用一些mutate過濾器和一些條件。

首先您需要從事件的@timestamp中獲取分鍾的值並將該值添加到一個新字段中,您可以使用[@metadata] object,它可以用於過濾,但它不會出現在output 事件。

mutate {
    add_field => { "[@metadata][minute]" => "%{+mm}" }
}

然后您需要指定將在哪個文件夾中保存哪一分鍾。

例如,如果你想要這樣的東西:

00:00 到 00:59 - 文件夾 1
01:00 至 01:59 - 文件夾 2
02:00 至 02:59 - 文件夾 3
03:00 至 03:59 - 文件夾 4

然后在下一分鍾從文件夾 1 開始,從 04:00 到 04:59,您將需要這樣的東西,只考慮前 8 分鍾。

if [@metadata][minute] in ["00", "04"] {
    mutate {
        add_field => {"[@metadata][folder]" => "folder1" }
    }
}
if [@metadata][minute] in ["01", "05"] {
    mutate {
        add_field => {"[@metadata][folder]" => "folder2" }
    }
}
if [@metadata][minute] in ["02", "06"] {
    mutate {
       add_field => {"[@metadata][folder]" => "folder3" }
    }
}
if [@metadata][minute] in ["03", "07"] {
    mutate {
        add_field => {"[@metadata][folder]" => "folder4" }
    }
}

然后在您的 output 中,您將在路徑中使用[@metadata][folder]

path => "/[@metadata][folder]/%{+YYYY-MM-dd_HH-mm}.csv"

您只需要將條件擴展到一小時中的其他分鍾。

暫無
暫無

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

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