メインコンテンツまでスキップ
Sumo Logic Japanese

複数行のログの収集

Sumo Logic のソースは、デフォルトで複数行処理が有効になっています。複数行処理は、改行またはキャリッジ リターンで区切られ、複数行で構成されたログ メッセージが、Sumo Logic に取り込まれたときに 1 つのログ メッセージとして正しくまとめられるために使用します。

複数行処理では、ログのメッセージ間に改行またはキャリッジ リターンが必要です。複数のログが、大きな単一のメッセージ (たとえば、JSON 配列や XML) に含まれている場合、Sumo Logic ではほとんどの場合、それらのログを個別のログに分割することはできません。

複数行処理に関する警告

デフォルトのログ メッセージ サイズの制限により、サイズが 2,000 行または 512KB を超える複数行メッセージは出力され、単一のログ行として収集されます。コレクタの使用可能なメモリーの容量によっては、この上限を増やすことができる場合があります。Sumo のメニューの [Help (ヘルプ)] > [Support (サポート)] に移動して、サポートにお問い合わせください。

メッセージは受信されインデックスが作成されるとさらに細かく分割されます。サイズが 64KB を超えるログ メッセージを収集するとき、Sumo Logic ではメッセージがより小さなメッセージ チャンクのストリームにスライスされます。チャンクは、ソースの種類、プロトコル、およびメッセージのサイズに応じて、改行で作成されることが理想的です。大きなメッセージの各セクションにはメタデータが付けられるため、ログを表示または検索するときにもメッセージを正しい順序で参照できます。詳細な情報については、関連するソースのドキュメントを確認してください。

複数行処理のオプション

ソースには、ログの境界を自動的に推測するように設定するオプション、または各複数行ログの最初の行全体に一致する境界正規表現を指定するオプションがあります。これらのオプションは、ソースの設定では、[Infer Boundaries (境界の推測)] および [Boundary Regex (境界正規表現)] という名前が付けられています。

multiline options.png

  • Infer Boundaries (境界の推測) - このオプションを選択すると、一連のデフォルトの式が適用され、新しい複数行メッセージの始まりを検出するために使用されます。メッセージ行がこれらの式のいずれかに一致する場合、Sumo Logic は次にこの同じ式に一致する行を検出したところで、この 2 つの行の間のすべての行を 1 つのメッセージとしてグループ化します。 
  • Boundary Regex (境界正規表現) - 複数行ログ メッセージには、Sumo Logic で複数行メッセージ検出のために使用するデフォルト ルールに一致する先頭行が見つからない場合があります。その場合は、ファイル内で新しいログ メッセージそれぞれの先頭行全体を検出する正規表現を指定する必要があります。 

境界の推測

複数行処理が有効な場合、デフォルトで [Infer Boundaries (境界の推測)] がオンになります。コレクタは、複数行メッセージの最初の行を表す共通のパターンの検出を試みます。コレクタはソースから送られる各行を調べて、それらの行と既知の式との照合を試みます。行が一致すると、コレクタはその行を新しいメッセージの開始としてマークし、以降の一致しない行はそのメッセージの一部と見なされます。コレクタが式に一致する別の行を検出すると、それまでの行を単一のメッセージとして出力し、その次の行を新しいメッセージの先頭としてマークします。

コレクタは、最初の 1,000 行、または 30 秒以内に表示されるすべての行数と、新しいメッセージの開始行を示す可能性があるパターンを判断するアルゴリズムの使用を試みます。ログ メッセージにタイムスタンプなどの行の先頭を表す共通のアンカーが含まれていて、ソースで受信されるメッセージのフォーマットに一貫性がある場合は、境界の推測が最も効果的です。

境界正規表現

正規表現を使用してメッセージ間の境界を指定できます。ログ ファイルのすべての複数行メッセージに対して、最初の行全体を検出する正規表現を入力します。

1 つのソースが、形式の異なる複数種類のファイルを収集するために使用されている場合、または受信しているメッセージで一貫性のあるパターンが検出されない場合、各行を 1 つのメッセージとして出力できます。そうしない場合、いくつかのメッセージが 1 つのメッセージとして不適切にグループ化されてしまいます。1 つのソース タイプの自動検出による取り込みでも、特定の状況に対応できない場合には、ソースの設定で「Please note, Infer Boundaries may not be accurate for all log types. (ご注意: 推論境界はログ タイプによっては正確ではない場合があります。)」という注意書きが表示されます。この場合、各ログ メッセージの開始を検出するためにカスタムの境界正規表現式が必要になることがあります。

複数行検出で [Boundary Regex (境界正規表現)] のオプションを使用すると、コレクタで、指定した正規表現が使用され、複数行メッセージの最初の行の一致が検出されます。

たとえば、次のような複数行のメッセージがあるとします。

2017-07-26 14:39:15,523 -0700 [CPU-ResourceMonitor-1] INFO  com.sumologic.scala.collector.monitoring.CollectorResourceMonitor - With current users: List(com.sumologic.scala.collector.blade.wildcard.LocalWildcardBlade@18af50d9, com.sumologic.scala.collector.blade.wildcard.LocalWildcardBlade@18af50d4, com.sumologic.scala.collector.blade.wildcard.LocalWildcardBlade@18af50da), current usage is 0

使用できる境界式には、次のようなものがあります。

  • ^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}.*
  • .*\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}.*\n
  • ^.*\[CPU-ResourceMonitor-1\].*

次の境界式は、最初の行全体と一致しないため、使用できません。

  • ^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}
  • [CPU-ResourceMonitor-1\]

複数行のよくある質問

syslog ソースを使用する場合、複数行はどのように処理されますか?

Sumo Logic では、syslog ソース内での複数行検出のためのオプションは提供されていません。UDP 経由で受信された syslog メッセージの場合、Sumo Logic では 1 つの syslog リクエストに含まれるすべての内容が 1 つのメッセージとして処理されます。

TCP 経由で受信した syslog メッセージの場合、Sumo Logic ではリクエスト内の各行が新しいメッセージとして処理されます。これは、TCP がデータ ストリームとして受信され、改行が検出されるたびにコレクタによってメッセージが出力されるためです。

HTTP ソースを使用する場合、複数行はどのように処理されますか?

HTTP ソースの複数行検出は、1 つの HTTP リクエストの範囲でのみ機能します。1 つの HTTP POST リクエストで複数の複数行メッセージを送信する場合、それらのメッセージに複数行オプションが適用されます。複数行のメッセージを別々の POST リクエストとして送信する場合、複数行オプションは適用されません。

Sumo Logic では、複数の HTTP 投稿を 1 つのメッセージにまとめることはできません。これは、受信の順番が保証されていないため (単純に HTTP の性質上の問題)、および複数のクライアントが同じ HTTP ソースに送信するという確証がないためです。これにより、メッセージをどのような順序で受信したかという新たな問題が生じる可能性があります。

  • この記事は役に立ちましたか?