2

json 経由で Wi​​ndows DNS デバッグ ログを Elasticsearch に送信しており、それらを解析する必要があります。Microsoft と同様に、簡単なことは何もありません。DNS デバッグ ログは CSV ではありません。そのファイルの唯一の有用な点は、列の長さが固定されていることです。

DNS ログのサンプルを次に示します。 11/21/2014 5:59:13 PM 0458 PACKET 00000000039ED750 UDP Rcv 192.168.1.98 600c Q [0001 D NOERROR] A (9)grokdebug(9)herokuapp(3)com(0) 11/21/2014 5:59:13 PM 0458 PACKET 00000000039EF460 UDP Snd 192.168.1.1 e044 Q [0001 D NOERROR] A (9)grokdebug(9)herokuapp(3)com(0) 11/21/2014 5:59:13 PM 0458 PACKET 00000000039F85B0 UDP Rcv 192.168.1.1 e044 R Q [8081 DR NOERROR] A (9)grokdebug(9)herokuapp(3)com(0) 11/21/2014 5:59:13 PM 0458 PACKET 00000000039F85B0 UDP Snd 192.168.1.98 600c R Q [8081 DR NOERROR] A (9)grokdebug(9)herokuapp(3)com(0)

この Stackoverflow の回答を見ました: Logstash grok filter help - fixed position file で、列を解析するために grok フィルターを設定しようとしましたが、うまくいきません。構文の問題があることは理解していますが、正しい方向に導く良い例が見つからないようです。

これが私のgrokフィルターです: grok { match => [ "message", "(?<dns_date_n_time>.{21}) (?<dns_field_1>.{5}) (?dns_type>.{8}) (?<dns_field_2>.{19}) (?<dns_protocol>.{4}) (?<dns_direction>.{4}) (?<dns_ip>.{16}) (?<dns_field_3>.{4}) (?<dns_query_type>.{5}) (?<dns_field_5>.{7}) (?<dns_field_6>.{3}) (?<dns_flag>.{9}) (?<dns_field_7>.{2}) (?<dns_record>.{5}) (?<dns_domain>.{255})" ] }

誰でも助けることができますか?

4

1 に答える 1

1

ログファイルがたまたま固定幅フォーマットであるという事実にとらわれないでください。それ以来、ここではあまり役に立ちません。関連する grok パターンを使用して、古いログファイルのようにファイルを解析します。これは、提供した入力に対して機能します。

(?<timestamp>%{DATE_US} %{TIME} (?:AM|PM))\s+%{NUMBER}\s+%{WORD:dns_type}\s+
%{BASE16NUM}\s+%{WORD:dns_protocol}\s+%{WORD:dns_direction}\s+%{IP:dns_ip}\s+
%{BASE16NUM}\s+%{WORD:dns_query_type}\s+\[%{BASE16NUM}\s+%{WORD}\s+
%{WORD:dns_result}\]\s+%{WORD:dns_record}\s+%{GREEDYDATA:dns_domain}

とはいえ、ログファイルの各列が何を意味するのかわからないため、ここで使用されているパターンの中には、あまりにも雑すぎるか、厳しすぎるものがあるかもしれません。回答を読みやすくするために改行を挿入しましたが、構成ファイルに挿入するときに正しく連結するようにしてください。

于 2014-11-22T19:43:05.423 に答える