2017-03-20 81 views
1

我使用Logstash將日誌數據發送到Elasticsearch(當然),但是我的一些最終用戶也希望將數據發送到輔助csv文件,以便他們可以執行自己的處理。我正在嘗試使用環境變量來確定是否需要輸出到輔助文件,如果是,那麼該文件應該在哪裏生存。使用環境變量不起作用的Logstash條件輸出

我Logstash看起來是這樣的:

input { 
    . . . 
} 
filter { 
    . . . 
} 
output { 
    elasticsearch { 
     . . . 
    } 
    if "${SECONDARY_OUTPUT_FILE:noval}" != "noval" { 
     csv { 
      fields => . . . 
      path => "${ SECONDARY_OUTPUT_FILE:noval}" 
     } 
    } 
} 

當SECONDARY_OUTPUT_FILE有一個值,它工作正常。如果沒有,Logstash會將csv輸出寫入名爲「noval」的文件。我的結論是if語句對環境變量無法正常工作。

我在Windows 7機器上使用Logstash版本2.3.2。

任何建議或見解,將不勝感激。

回答

2

其實這是一個很好的問題,還有對github有關這個主題的開幕,由提到IrlJidel在這一問題上不斷增強,一個解決方法的問題是:

mutate { 
    add_field => { "[@metadata][SECONDARY_OUTPUT_FILE]" => "${SECONDARY_OUTPUT_FILE:noval}" } 
} 

if [@metadata][SECONDARY_OUTPUT_FILE] != "noval" { 
     csv { 
     fields => . . . 
     path => "${SECONDARY_OUTPUT_FILE}" 
     } 
} 
+0

那工作。我把mutate語句放在filter部分,然後在條件語句中引用元數據字段。我仍然不得不爲我的路徑使用環境變量(不是元數據字段)。 –

+0

@NormanLynch喜歡我的編輯?奇怪,你在路徑中使用'[@metadata] [SECONDARY_OUTPUT_FILE]'(沒有任何引號)? – Adonis