さまざまなツールや手法によるSyslogの分析

Syslogには、すべてのネットワークデバイスの総合的な正常性を分析する上で役立つ、重要な情報が含まれています。しかし、Syslogを読み解き、情報を抽出するのは難しい作業となる場合があります。そこで、以下のツールを使用すれば、Syslogデーモンから必要な情報を抽出できます。

grepツール

grepは、すべてのLinuxディストリビューションに組み込まれているシンプルな検索ツールであり、WindowsやMac OSでも利用できます。コマンドラインインターフェイス(CLI)でシンプルなテキストクエリを実行し、必要なログを抽出できます。

構文:

$ grep '<検索対象テキスト>' <ログファイルのソース>

この検索は、完全一致の条件のみに対応しています。検索するログ情報を正確に把握している必要があります。

正規表現

正規表現(regex)を使用すると、単一の要素ではなく、文字列を組み合わせて検索クエリを作成し、必要なログデータを抽出できます。

たとえば、auth.logファイル内でイベントID「4325」を検索する場合を考えてみましょう。正規表現を使わずに検索すると、イベントID「4325」だけでなく、ポート番号「4325」、「4325」を含むタイムスタンプ、その他の関連性のないフィールドが含まれたログが検索結果として表示される場合があります。一方、正規表現を使用し検索クエリを作成すれば、曖昧さが解消され、「4325」の前に「event ID」が含まれるログデータのみを出力できます。

この場合、以下のような正規表現のクエリを作成します。

$ grep -P “(?<= event ID)4325” var/log/auth.log

構文:

$ grep -P '<正規表現と検索対象テキスト>' <ログファイルのソース>

注記:「-P」は、Perlの正規表現構文であることを示しています。

正規表現を用いた検索クエリの作成には手間がかかりますが、重要なログデータを効率的に特定・抽出するために役立ちます。

前後の行を含めた検索

必要なログデータだけでなく、特定のログ情報の前後に記録されたイベントも抽出できるコマンドラインの検索機能です。前後の行を表示させることより、異常の発生時に実行されたイベントのリストを確認して、ネットワークで発生する悪意のあるアクティビティを予測できます。

たとえば、「失敗したログイン試行」を検索すれば、失敗したログインの前後に記録されている、5件のイベントのリストを取得できます。このクエリは、次のように記述できます。

$ grep -B 5 -A 5 'failed login' var/log/auth.log

注記:
  1. 「-B <数値>」を使用すると、検索したログの前に記録されている<数値>件のイベントも含めて抽出します。
  2. 「-A <数値>」を使用すると、検索したログの後に記録されている<数値>件のイベントも含めて抽出します。
一般的な構文:

$ grep -B <数値> -A <数値> '<検索対象テキスト>' <ログファイルのソース>

tail

tailコマンドは、ログファイルの最後の数行や、ファイルに対する最新の変更を表示するためのコマンドラインツールです。tailを使用すると、システムの再起動、デバイスの突然のシャットダウン、デバイスへの新規インストールなど、進行中のプロセスを表示できます。grepや前後の行を含めた検索コマンドと組み合わせることで、強力な検索クエリを構築できます。

構文:

$ tail -n <数値> <ログファイルのソース>

注記:「-n <数値>」は、ファイルの末尾から抽出する行数を表します。

cut

CLIでcutコマンドを使用すると、区切り文字を含むログデータのフィールドを解析できます。また、grepコマンドや正規表現と組み合わせれば、特定のフィールドを取り出すことも可能です。

$cut -d '区切り文字' -f (数値) <ログファイルのソース>

注記:「-f (数値)」は、何番目のフィールドを抽出するかを表します。

awkによるエラーのフィルタリング

awkコマンドを使用して、ログファイル内のエラーメッセージを検索できます。ログ内のエラーフィールドを指定するには、pri-textを含めたテンプレートをrsyslog構成に追加する必要があります。pri-textによって、例えば「local0.err<133>」というメッセージの場合、PRI部分(山括弧で囲んだ「133」)をテキスト形式で表示できます。

ログ内にエラーメッセージと必要なフィールドを含めて表示するには、「<%pri-text%>:%フィールド%、%フィールド%、%フィールド% ...」という構文のコマンドを入力します。次に、awkコマンドを使用して、ログからエラーメッセージを抽出します。

構文:

$ awk '/.err>/ {print}' <ログファイルのソース>

注記: {print} を使用し、コマンドの最後に<宛先ファイルのソース>を追記すれば、出力先のファイルを指定しログデータを保存できます。

ログ管理ソフトウェア

上記で説明したツールと手法では、検索、最新の変更の表示、エラーログの表示など、特定の機能しか実行できません。Syslogデータの詳細な分析が必要な場合は、上記の手法の組み合わせが求められ、時間のかかる複雑な作業となります。そこで、ログ管理ソリューションを使用すれば、Syslogの高度な分析を効率的に実現できます。ログ管理ソリューションは、ログの一元管理、詳細な分析、分かりやすいレポート、クリティカルイベントに関するアラート、フォレンジック分析のための安全な保存など、さまざまな機能を提供します。

ログ管理ソリューションであるEventLog Analyzerは、Syslogデーモンとして機能し、ネットワークのすべてのデバイスからログを収集します。EventLog Analyzerの強力な検索エンジンは、テキスト、フレーズ、ブール演算子を使用したクエリに対応しているため、ログデータを効率的に検索できます。収集したログデータに対して、完全一致検索のような基本的な検索も、正規表現などを用いた高度な検索も、どちらも実行可能です。EventLog Analyzerでは、論理演算子を使った独自の正規表現で、検索クエリを記述できます。検索結果を保存し、その結果に基づいたアラートの設定も可能です。また、EventLog Analyzerは各イベントのレポートを定期的に生成するので、異常の検知に役立てられます。さらに、ネットワーク上の不審なアクティビティを検知するアラートを設定すれば、警戒が必要な攻撃の予兆についてSMSやメールでリアルタイム通知を受け取ることができます。詳細については、 こちらをご確認ください。