2016-06-16 8 views
0
私はカスタムログ

がどのようにカスタムログを分割し、logstash

分割したい

上の各値でのカスタムフィールド名を追加するには、「2016年5月11日02:38:00.617、userTestId、キー文字列test113321、 UID-123,10079,0,30096,128,3"

タイムスタンプ、文字列のuserId、String型のsetlkey、文字列のユニークID、長いproviderId、文字列itemCode1、文字itemCode2、文字itemCode3、String型のサービス種別を意味ログ

ルビーを使用してフィルタを作成しようとしました

filter { 
     ruby{ 
     code => " 
     fieldArray = event['message'].split(',') 
     for field in fieldArray 
       result = field 
       event[field[0]] = result 
end 
" 
} 
} 

しかし、以下のようにフィールド名を追加することでログを分割する方法がわかりません。

Timestamp : 2016-05-11 02:38:00.617 
userId : userTestId 
setlkey : Key-string-test113321 
uniqueId : UID-123 
providerId : 10079 
itemCode1 : 0 
itemCode2 : 30096 
itemCode3 : 128 
serviceType : 3 

どうすればいいですか?

ありがとうございました。

答えて

1

代わりにgrokフィルタを使用できます。 grokフィルタは行を正規表現で解析し、各グループをフィールドに関連付けることができます。
このパターンを使用してログを解析することが可能である:

grok { 
    match => { 
     "message" => [ 
      "%{TIMESTAMP_ISO8601:timestamp},%{USERNAME:userId},%{USERNAME:setlkey},%{USERNAME:uniqueId},%{NUMBER:providerId},%{NUMBER:itemCode1},%{NUMBER:itemCode2},%{NUMBER:itemCode3},%{NUMBER:serviceType}" 
     ] 
    } 
} 

これはあなたが持っているしたいフィールドを作成します。
参考:grok patterns on github
テストするには:Grok constructor


別の解決策:
はあなたがあなたのニーズに、より近いCSVフィルタを、使用することができます(ただし、私はより多くを持っているので、最初のGROKフィルタと一緒に行きましたそれに経験):Csv filter documentation

CSVフィルタは、CSVデータを含むイベントフィールドを取り、それを解析し、個々のフィールドとして格納する(は、任意に指定することができ名前は)。このフィルタは、カンマだけでなく、任意の区切り文字でデータを解析することもできます。

は、私はそれを使ったことがないが、それは次のようになります。デフォルトでは

csv { 
    columns => [ "Timestamp", "userId", "setlkey", "uniqueId", "providerId", "itemCode1", "itemCode2 "itemCode3", "serviceType" ] 
} 

、フィルタは、それらを設定する必要はそれほどあり、","セパレーターで、メッセージフィールドの上ではありません。

私はcsvフィルタソリューションが優れていると思います。

+0

また、ルビーフィルターで行うこともできますが、私はルビーフィルターとルビー自体を経験していないので、私は – baudsp

+0

とは言えません。 Baudsp。それは私にとって本当に助けになるものです。どうもありがとう〜! –

関連する問題