LoginSignup
4
2

More than 3 years have passed since last update.

SolitonNKでgrokが使えるようになったぞ - ログ解析のための抽出テンプレートを便利に使おう

Last updated at Posted at 2019-11-25

SolitonNKでgrokが使えるようになりました

Soliton NKの内部モジュールであるgravwellのバージョンが3.2.2になったことで、検索モジュールgrokが使えるようになりました。本記事では、Soliton NKでgrokをどのように使えるのか、その概要をまとめます。

grokが使えるってどういうこと?

Soliton NKで収集したデータから、特定のデータだけを抽出して分析したい時、正規表現を組み合わせてRegexによる検索モジュールで出すべきデータを探すことになるでしょう。しかし、目的とするデータ抽出をするのに、正規表現で適切に検索条件を表すのは、往々にして複雑で面倒になりがちです。

例えば、Apacheのcombined形式のフォーマットで書かれたログを全て抽出したいという場合、適切な正規表現は次のようなものだということです!

(?P<ip>\S+) (?P<remote_log_name>\S+) (?P<userid>\S+) \[(?P<date>\S+) ?(?P<timezone>\S+)?\] \"(?P<request_method>\S+) (?P<path>\S+) (?P<request_version>HTTP/\d+\.?\d*)?\" (?P<status>\d+) (?P<length>\d+) \"(?P<referrer>[^\"]+)\" \"(?P<user_agent>[^\"]+)\"

grokが使えるようになったので、この複雑な正規表現を用いた抽出条件が、

%{COMBINEDAPACHELOG}

という簡単な名前だけで、Apacheのcombinedログの抽出を指示できるようになります。grokは複雑な正規表現で表される典型的な抽出パターンに名前をつけて再利用できるようにする仕組みだと言えます。

grok を用いると、デフォルトでは指定されたリソース全体からマッチするレコードが抽出されますが、いくつかのオプションが使えます。
-e :レコード全体ではなく、指定された値を使って抽出されます。
-r :使用するパターンのリストとしてデフォルトのgrokリソースではなく、指定された名前のリソースからgrokパターンがロードして用いられます。
-v:逆モードで動作します。指定されたパターンに一致しないレコードだけが抽出されます。このオプションを使用する場合、他のフィルターを指定できません。
-p:「-p」オプションは、条件式と全く一致しない場合にエントリを許可するようにgrokに指示します。許容フラグは、フィルターの動作を変更しません。

grokで使えるパターン

grokの使い方が分かったところで、grokでどのようなパターンが使えるかを見ていきましょう。

grokにデフォルトで登録されている基本的なパターンのリストは
https://dev.gravwell.io/docs/#!search/grok/grok.md#Pre-defined_Patterns
にあります。

また、Soliton NKで扱うことが多そうな、各種サーバやシステムのログに関する抽出パターンがall.grokにまとめて登録されています。ここには、apacheのログ、http.log、dns.log、conn.log、files.log、NetScreen firewall logs、Cisco ASA、Shorewall firewall logs、syslog、haproxy log、NAGIOS などを扱う時に典型的な抽出パターンが網羅されています。

このall.grokに登録されたパターンを使いたいときは、all.grokをgrokという名前でアップロードすることによって、grokのパターンとして追加されます。

image.png

このall.grokで足らないパターンについては、grokを使う他のコミュニティやシステムで探すことができ、例えば、fusion serverStreamSets Data Collectorlogstashなどに、様々なgrokパターンが用意されているので、それを活用することができます。

必要とするパターンをall.grokに追記し、これをgrokの名前でアップロードすれば、登録パターンが上書き更新されます。

パターンを自作した場合

もしも、既存のパターンに自分の求めるものが無い場合、パターンを自作しましょう。自作した正規表現のデバッグには、Grok Constructorが便利です。

解析対象を模擬したレコードを「Some log lines you want to match.」の欄に入れて、抽出条件となる正規表現を「The (unquoted!) pattern that should match all logfile lines.」の欄に入れてGoボタンを押します。

例として、メールアドレスのドメイン部を抽出ために、 [a-zA-Z][a-zA-Z0-9_.+-=:]+ という条件式を作成した場合に、メールアドレスとして成り立っているレコードやメールアドレスではないレコードをテストしてみます。

image.png

抽出結果が表示されるので、意図通りのものが抽出されているかどうか確認できます。

image.png

こうして自作したパターンも、all.grokに追記してアップロードすれば、検索する際の表記に使用することができます。

成果

こうしてgrokを使ってデータ抽出したものを活用することができます。

grokを使って、各HTTPメソッドの応答コードがいくつ発せられたか計数し、それをスタックグラフに表示する場合は、

tag=apache grok "%{COMBINEDAPACHELOG}" | stats count by verb response | stackgraph verb response count

とすることで、次のような結果が得られます。
image.png

grokを使ってSolitonNKの活用の幅が広がることが分かると思います。

Soliton NKを試したい人はの下の Soliton NK 公式サポートサイトでお申し込み下さい。

Soliton NK について、今後記事を追加していく予定です。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2