このトピックでは、Simple Log Serviceに送信されるログのデータモデルについて説明します。
次のセクションでは、Simple Log Serviceの基本用語について説明します。
リージョン
リージョンはAlibaba Cloudのサービスノードです。 Alibaba Cloudは複数のリージョンにサービスをデプロイします。 自分に最も近いリージョンを選択できます。 これにより、アクセスの待ち時間が短縮され、ユーザーエクスペリエンスが向上します。
プロジェクト
プロジェクトは、Simple Log Serviceの基本的な管理単位です。 リソースの分離と制御に使用されます。 プロジェクトを使用して、アプリケーションのすべてのログとログソースを管理できます。
ログストア
Logstoreは、ログの収集、保存、および消費の単位です。 各Logstoreは単一のプロジェクトに属します。 各プロジェクトは複数のLogstoreを持つことができます。 1つのプロジェクトに複数のLogstoreを作成できます。 アプリケーションのログの種類ごとにLogstoreを作成することを推奨します。 たとえば、big-gameという名前のゲームアプリケーションがあります。 サーバーでは、操作ログ、アプリケーションログ、アクセスログの3種類のログが生成されます。 この場合、big-gameという名前のプロジェクトを作成し、このプロジェクトの3種類のログのそれぞれに対してLogstoreを作成できます。 次に、Logstoreを使用してログを保存および使用できます。
ログエントリ
ログエントリは、Simple log Serviceで処理されるデータの基本単位です。 Simple Log Serviceは、半構造化データモデルを使用してログエントリを定義します。 次の表にモデルを示します。
項目 | 説明 | 要件 |
time | ログエントリが生成される時刻。 このフィールドは予約済みフィールドです。 ほとんどの場合、フィールド値はログエントリの時間情報に基づいて生成されます。 | この値は UNIX タイムスタンプです。 1970年1月1日の00:00:00 UTCから経過した秒数を表します。 |
topic | ログエントリのユーザー定義フィールド。 このフィールドは、ログのグループをマークするために使用できます。 たとえば、サイトに基づいてアクセスログのトピックを指定できます。 | フィールド値は、空の文字列を含む最大128バイトの文字列にすることができます。 このフィールドのデフォルト値は空の文字列です。 |
source | ログエントリのソース。 例えば、このパラメータの値は、ログエントリが生成されるサーバのIPアドレスとすることができる。 | フィールド値は、長さが128バイトまでのUTF-8にエンコードされた文字列です。 このフィールドのデフォルト値は空の文字列です。 |
content | ログエントリの特定の内容。 コンテンツは、1つ以上のコンテンツアイテムからなる。 各コンテンツアイテムは、キーと値のペアです。 | キーは、長さが128バイトまでのUTF-8にエンコードされた文字列です。 英数字、およびアンダースコア (_) を使用できます。 キーの先頭は数字ではなく、次のキーワードを含めることはできません。
値は、長さが1024 × 1024バイトまでのUTF-8にエンコードされた文字列です。 |
tags | ログタグには次のものがあります。
| フィールド値は辞書です。 キーと値はどちらも文字列です。 フィールド名の先頭には |
トピック
Logstore内のログは、トピックごとにグループ化できます。 Simple Log Serviceに書き込まれるログのトピックを指定できます。 次に、ログを照会するときにトピックを指定できます。 たとえば、Simple log Serviceにログを書き込むときに、ユーザーIDをログトピックとして使用できます。 このようにして、トピックごとにログを照会するときに、自分のログのみを表示できます。 Logstoreでログを分類する必要がない場合は、すべてのログに同じトピックを使用します。
デフォルトのログトピックは空の文字列です。 ログの書き込みまたは照会時にログトピックを指定しない場合は、空の文字列をデフォルトトピックとして使用できます。
異なるシナリオで生成されるログの形式は異なります。 次の例では、生のNGINXアクセスログエントリをSimple log Serviceで必要なデータモデルに変換する方法を説明します。 この例では、NGINXサーバーのIPアドレスは10.10.10.1です。 次のサンプルは、このサーバーの生のログエントリです。
10.1.1.1 - - [01/Mar/2012:16:12:07 +0800] "GET /Send? AccessKeyId=82251054** HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"次の表に、生のログエントリをSimple log Serviceで必要なデータモデルに変換する方法を示します。
項目 | フィールド値 | 説明 |
topic | なし | デフォルト値 (空の文字列) が使用されます。 |
time | 1330589527 | ログエントリが生成された時刻。 時間は、生のログエントリのタイムスタンプから変換されます。 単位は秒です。 |
source | 10.10.10.1 | ログエントリが収集されるサーバーのIPアドレス。 |
content | キーと値のペア | ログエントリの内容。 |
生のログコンテンツを抽出し、抽出したコンテンツをキーと値のペアに結合する方法を決定できます。 次の表に、カスタムキーと値のペアを示します。
キー | 値 |
ip | 10.1.1.1 |
method | GET |
status | 200 |
length | 5 |
ref_url | - |
browser | Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 |
ログ
ログエントリのコレクション。
LogGroup
ログエントリのグループ。
LogGroupList
結果を返すために使用されるロググループのコレクション。
エンコーディングルール
次の表に、システムがサポートするコンテンツのエンコード方法を示します。 今後、より多くのエンコード方法が利用可能になります。 サポートされるエンコード方法は、RESTful APIのContent-Typeフィールドで指定されます。
説明 | 説明 | コンテンツタイプ |
Protobuf | データ・モデルは、プロトコル・バッファ (Protobuf) によって符号化される。 | application/x-protobuf |
Protobuf形式の詳細については、「データエンコーディング」をご参照ください。
Protobuf では、キーと値のペアが一意である必要はありません。 ただし、同じキーを使用することはできません。 それ以外の場合、未定義の動作を示すエラーが発生します。
Protobufは、ログエントリ内のフィールドをエンコードするために、フィールド番号の順序に従う必要があります。 そうしないと、データの解析に失敗する可能性があります。