2019年3月8日金曜日

syslog-ng Store Box(SSB) 不正なログメッセージへの対処法


不正なログメッセージを受信した場合、SSBはログメッセージを正しく処理できず、SSBのパフォーマンスに影響します。また、閲覧・検索およびレポートの結果が正しく出力されなくなります。あるいは、ログを受信できずログロストが発生する可能性もあります。

今回は、不正なログメッセージの確認方法と回避策についてご紹介します。

  1. はじめに
  2. 不正なログメッセージの確認
  3. 不正なログメッセージの送信元の特定
  4. 不正なログメッセージへの回避策

はじめに

SSBでは、「BSD-syslog format(RFC 3164)」および「IETF-syslog format(RFC 5424)」フォーマットのログメッセージを処理し、メッセージに関する統計情報とメトリックを収集します。不正なフォーマットのログメッセージは不正確な統計情報を生成し、閲覧・検索およびレポートの結果が正しく出力されなくなります。また、パフォーマンスの問題を引き起こす可能性があります。あるいは、ログを受信できずログロストが発生する可能性もあります。

RFCフォーマットでメッセージを送信しないデバイスとして、ルーター、スイッチ、およびファイアウォールなどのネットワーク機器が知られています。

※ 「BSD-syslog format(RFC 3164)」メッセージフォーマットついては、過去記事「メッセージフォーマット」をご参照ください。

不正なログメッセージの確認

不正なログメッセージが受信されているかどうかは以下の方法を使用して確認できます。

ローカルログの確認

SSBのローカルログ(local)に以下のような統計情報に関するエラーメッセージが出力されている場合、不正なログメッセージを受信している可能性があります。

ERROR (root@localhost) Too long statistics processing iteration detected; iteration_duration='959'
ERROR (root@localhost) Skipped 7937 rrd updates due to limit, first skipped id is unknown
Log statistics processing limit has been reached; max_number_of_processed_statistics='20000'

TCP接続の場合、以下のようなエラーメッセージが出力され接続が終了している場合はログを受信できずにログロストが発生している可能性があります(UDPの場合、パケットはそのまま破棄されてローカルログには何も出力されません)。

Invalid frame header; header=''
Syslog connection closed; fd='41', client=...

手順

  1. [Search]>[Logspaces]で[local]ログスペースを選択します。
  2. 検索範囲を長く(1週間以上を推奨)指定します。
  3. [Search expression]フィールドに、上述のエラーを検索するための検索式(例 ERROR)を入力します。[Search]ボタンをクリックします。
  4. 検索結果に上述のエラーが出力されていないか確認します。

検索ページでの確認

不正なログメッセージを見つける最も簡単な方法は、SSBの検索ページを使用することです。不正なログメッセージは不正確な統計情報とメトリックスを作成します。

手順

  1. [Search]>[Logspaces]で各ログスペースに移動します。
  2. 検索範囲を長く(1週間以上を推奨)指定します。
  3. プログラムカラムのアイコンをクリックします。
  4. [Statistics for "Program" column]画面にプログラム名に関する統計情報が表示されます。リストに不正なプログラム名がないかどうか確認します。
※ ログスペースの設定でプログラムフィールドのインデックスが有効([Log]>[Logspaces]の[Indexed fields]の[Program]にチェック)になっている場合にのみ使用できます(テキストログスペースでは確認できません)。
※ 統計情報から不正なログメッセージが、どのログスペースにあるのかを知ることは不可能です。したがって、すべてのログスペースを1つずつ確認する必要があります。

コアシェルからの確認

手順

  1. コンソールアクセスし、[Shells]>[Core shell]を選択します。
  2. 以下のコマンドを実行します。

    # /opt/syslog-ng/sbin/syslog-ng-ctl stats | grep ^src.program

  3. 出力結果に不正なプログラム名がないか確認します。以下は不正なプログラム名の出力例です。

    src.program;;\xff\xff\xff\xff;d;processed;3
    src.program;;^B^B^H;d;processed;3
    src.program;;8HKCEJ;d;processed;3
    src.program;;1022;d;processed;2
    src.program;;<190&gt;Aug;d;processed;3348565

※ 不正なログメッセージの受信後、不正なログメッセージの受信がしばらくの間ない場合、不正なプログラム名が表示されない場合があります。

不正なログメッセージの送信元の特定

不正なログメッセージを送信しているホストを特定するには、検索ページで[Host]カラムのIPアドレスまたはホスト名を調べます。

手順

  1. [Search]>[Logspaces]で各ログスペースに移動します。
  2. ログ一覧から不正なログメッセージの[Host]カラムを確認します。
    • [Host]フィールドが送信元の場合は、表示されている値がホストを示しています。
    • [Host]フィールドが中継ホストの場合、ログメッセージの内容を調べて調査します。
    • [Host]フィールドが不正な値になっている場合、ログメッセージの内容を調べて調査します。

不正なログメッセージへの回避策

不正なログメッセージを受信した場合に、SSBが誤った処理を防ぐには以下の2つの方法があります。
  • ログ送信側デバイスで、SSBのソース([Syslog protocol]フィールド)で設定されているフォーマットに対応するログフォーマットを設定します。
  • SSBのログソース([Log]>[Sources])の[Syslog flags]フィールドを[Do not parse]に設定します。
    これは、SSBでログメッセージの処理を無効にし、受信したメッセージ全体を、MESSAGE部として扱います。他の情報(タイムスタンプ、ホストなど)はSSBによって自動的に付加されます。
    SSBの前にsyslog-ngリレーがある場合は、syslog-ngリレーのソース設定でflags(no-parse)オプションを設定します。


SSBは、高信頼ログ管理アプライアンスです。様々なデバイスおよびアプリケーションからログメッセージを収集、分類、フィルタリング、正規化して安全に保存可能です。ログデータの信頼性を担保し、膨大なログが発生する高負荷環境、あるいはログロストが許されない企業・組織のログ管理に最適です。


syslog-ng Store Box (SSB)製品ページ:https://www.jtc-i.co.jp/product/ssb/ssb.html
syslog-ng Store Box (SSB) 製品ラインナップ:https://www.jtc-i.co.jp/product/ssb/ssb_lineup.html
syslog-ng Store Box (SSB)ドキュメントセンター:https://www.jtc-i.co.jp/support/documents/ssbdoc.html
評価版のダウンロードはこちら