Simple Log Service (SLS) におけるログクエリに関するよくある質問に回答します。ソースマシンの特定、IP アドレスの検索、複数条件でのクエリ、フィールド値の切り捨てへの対処などについて説明します。
ログのソースマシンの特定
-
Logtail 設定はマシングループに適用されます。マシングループが IP アドレスベースのマシングループの場合は、内部 IP アドレスを使用してマシンを区別します。
-
インデックスを作成すると、SLS はデフォルトで
__tag__:__hostname__のインデックスを作成します。__tag__:__hostname__:XXXと入力してクエリを実行します。__tag__フィールドは 予約済みフィールド です。例:各ホスト名の出現回数をカウントします。* | select '__tag__:__hostname__' , count(1) as count group by '__tag__:__hostname__'
ログ内の IP アドレスの検索
-
特定の IP アドレスをクエリするには:
__tag__:__client_ip__:192.0.2.1 -
192.0.2 で始まる IP アドレスからのログをクエリするには:
__source__:192.0.2.* -
192.168.XX.XXに一致する IP アドレスを含むログをクエリするには、LIKE 演算子とワイルドカードを使用した あいまい検索 も可能です。* | select * from log where key like '192.168.%.%'
複数条件でのクエリ
クエリステートメントを組み合わせて、複数の条件でフィルタリングします。
たとえば、ステータスが OK または Unknown のログを除外するには、not OK not Unknown を検索します。
ログクエリの方法
SLS は 3 つのログクエリ方法をサポートしています:
-
コンソールでログをクエリおよび分析します。詳細については、「クエリと分析のクイックスタート」をご参照ください。
-
SDK を使用してログをクエリします。詳細については、「SDK リファレンス概要」をご参照ください。
-
RESTful API を使用してログをクエリします。詳細については、「Logstore 内のログのクエリ」をご参照ください。
SQL 分析のタイムアウトまたは失敗のトラブルシューティング
クライアント側のネットワークファイアウォールが、SQL 分析キーワードを含むリクエストをブロックしている可能性があります。
サービスエンドポイントを HTTPS に切り替えてみてください。
フィールド値の切り捨て
SLS では、フィールド値の長さに以下の制限があります:
-
クエリの場合、フィールド値の最大長は 512 KB (524,288 バイト) です。この制限を超えるコンテンツは、クエリ結果から除外されます。
-
分析の場合、デフォルトのフィールド値の最大長は 2 KB (2,048 バイト) で、最大 16 KB (16,384 バイト) まで設定可能です。
フィールドの最大長の設定
この変更は新しいログデータにのみ適用されます。既存のデータには影響しません。
Log Serviceコンソールにログインします。
[プロジェクト] セクションで、管理するプロジェクトをクリックします。
タブで、管理するログストアをクリックします。
-
をクリックします。
-
[クエリ & 分析] ページの下部で、[統計フィールドの最大長 (text)] を 64~16,384 バイトの間の値に設定します。
過去のログでの完全なフィールドコンテンツの表示
クエリと分析において、統計フィールドの最大長を変更しても、新しいログデータにのみ適用されます。過去のログで切り捨てられたフィールド値を復元することはできません。過去のログで完全なフィールドコンテンツを表示するには、以下のいずれかの方法を使用します:
-
生ログ:Logstore のクエリページで、[生ログ] タブをクリックします。生ログではフィールドコンテンツは切り捨てられません。フィールド値が長い場合は、[展開] をクリックして、完全な
contentおよびattributeフィールド値を表示します。 -
ログのエクスポート:SQL クエリ結果で、[ログをダウンロード] をクリックして、ログを CSV または JSON ファイルとしてエクスポートします。エクスポートされたファイルには、SQL クエリ結果のフィールドコンテンツが含まれます。このコンテンツは、分析時のフィールド長の制限により切り捨てられている場合があります。
-
スキャンモード:スキャンモードでログをクエリして、フィールドの切り捨てを回避します。API 呼び出しの場合は、
scanパラメータをtrueに設定します。コンソールでは、[スキャン] 機能を使用します。手順については、「スキャンベースの分析」および「ログのスキャン」をご参照ください。
インデックスが作成されていないフィールドの分析
インデックスが作成されていないフィールドを分析するには、以下のいずれかの方法を使用します:
-
インデックスの作成またはデータの再インデックス作成
-
新しいログを分析するには、対象フィールドの インデックスを作成し、統計を有効にします。
-
過去のログを分析するには、データの再インデックス作成を行い、統計を有効にします。
-
-
スキャンモードの有効化
インデックスを作成できない場合は、スキャンベースの分析 を使用して、インデックスなしでログをクエリします。詳細については、「ログのスキャン」をご参照ください。
返される行数の変更
SLS では、デフォルトで limit 100 が追加されます。LIMIT 句 を使用して、返される行数を変更してください。
SLS インデックスとデータベースインデックスの違い、およびユーザー情報の自動識別
SLS インデックスとデータベースインデックスの違い
SLS インデックスとデータベースインデックス (MySQL や PostgreSQL など) は目的は似ていますが、実装とユースケースが異なります:
-
SLS インデックス:ログクエリと分析を高速化するために使用されます。SLS は、すべてのコンテンツを対象としたトークン化検索のための全文インデックスと、構造化フィールド検索のための Key/Value インデックスを提供し、キーワード検索と SQL 分析をサポートします。
-
データベースインデックス:通常、B-tree データ構造に基づいており、データベーステーブル内の特定のレコードの検索を高速化するように設計されています。大規模なログデータの全文検索やリアルタイム分析には適していません。
ユーザー情報の自動識別と関連付け
SLS はログ内のユーザー情報を自動的に識別または関連付けることはできません。SLS がそのフィールドを使用してクエリ、分析、またはダウンロードを行うには、ユーザー情報がログフィールドとして存在する必要があります。ユーザー情報を含むフィールドがログに存在しない場合、SLS はログがどのユーザーに属するかを判断できません。
ユーザーごとにログをクエリする必要がある場合は、ログを収集する際にユーザー情報をログフィールドとして含めてください。その後、そのフィールドのインデックスを作成し、インデックス設定で分析を有効にしてください。