logstash を使用する人なら誰でも、http://grokdebug.herokuapp.com で grok 正規表現をデバッグできることを知っています。ここで疑問が生じます: どの企業が最も優れた回避技術を持っていますか? このページは Google ドメイン名の js ファイルを使用しているため、アクセスが頻繁に失敗します。したがって、ターミナル上のコマンド ラインを使用した迅速なデバッグが必要になりました。
実際、logstash がまだ 1.1 だったとき、公式 wiki には、irb を通じて grok 式を対話的にテストする方法をみんなに教えたグループがありました。しかし、なぜこの Wiki ページが後で消えたのかはわかりません...幸いなことに、コード自体は複雑ではなく、数行のスクリプトを記述するだけで目的を達成できます。
「rubygems」が必要です gem 'jls-grok', '=0.11.0' 「grok-pure」が必要です 「optparse」が必要です 「ap」が必要です オプション = {} ARGV.push('-h') ARGV.size === 0の場合 OptionParser.new は |opts| を実行します opts.banner = '端末で grokdebug を実行します。' options[:dirs] = %w(パターン) options[:named] = false opts.on('-d DIR1,DIR2', '--dirs DIR1,DIR2', Array, 'grok パターン ディレクトリを設定します。デフォルト: "./patterns"') do |value| options[:dirs] = 値 終了 opts.on('-m メッセージ', '--msg メッセージ', '一致する生のメッセージ') do |value| オプション[:メッセージ] = 値 終了 opts.on('-p PATTERN', '--pattern PATTERN', 'コンパイルされる grok パターン') do |value| オプション[:パターン] = 値 終了 opts.on('-n', '--named', '名前付きキャプチャのみ') do options[:named] = true 終了 終了.解析! grok = Grok.new options[:dirs].each は |dir| を実行します if File.directory?(dir) dir = File.join(dir, "*") 終わり Dir.glob(dir).each は |file| を実行します Grok.add_patterns_from_file(ファイル) 終わり 終わり grok.compile(オプション[:パターン], オプション[:名前付き]) ap grok.match(options[:message]).captures() |
代码如下 | |
$ sudo gem install jls-grok awesome_print $ ルビー grokdebug.rb ターミナルで grokdebug を実行します。 -d, --dirs DIR1,DIR2 grok パターンのディレクトリを設定します。デフォルト: 「./パターン」 -m, --msg メッセージ 一致する生のメッセージ -p, --pattern PATTERN コンパイルされる grok パターン -n, --named 名前付きキャプチャのみ $ Ruby grokdebug.rb -m 'abc123' -p '%{NUMBER:test}' { "テスト" => [ [0]「123」 ]、 "BASE10NUM" => [ [0]「123」 】 } $ Ruby grokdebug.rb -m 'abc123' -p '%{NUMBER:test:float}' -n { "テスト" => [ [0] 123.0 】 } |
問題はありませんが、これは grokdebug ウェブサイトよりも多くのタイプ変換の機能を備えています。その使用する jls-grok は 0.10.10 バージョンですが、私が使用するのは最新の 0.11.0 バージョンです。
http://www.bkjia.com/PHPjc/898888.html