ストアは、Simple Log Service (SLS) におけるデータの保存およびクエリ実行の基本単位です。異なるデータ型をサポートするため、SLS では Logstore、Metricstore、Eventstore の 3 種類のストアが提供されています。
ストアタイプの選択方法
Simple Log Service では、Logstore、Metricstore、Eventstore の 3 種類のストアタイプがサポートされています。これらは主にデータモデルの互換性において区別されます。ご利用のデータに最も適したストアタイプを選択してください。特に要件がない場合は、デフォルトで Logstore を使用します。
ストアタイプ | 利用シーン |
Logstore | |
Metricstore | 時系列データ(メトリック):一意の識別子と一連のデータポイントから構成される時系列。Metricstore を使用すると、時系列データを効率的に保存およびクエリ実行できます。 |
Eventstore | イベントデータ:モニタリングアラートや定期検査の結果など、重要な発生事象の記録。Eventstore を使用して、離散的かつイベントベースのデータを保存します。 |
Logstore
Logstore は、Simple Log Service におけるログデータの保存およびクエリ実行の基本単位です。各 Logstore はプロジェクトに所属します。同一アプリケーションから出力される異なるログタイプを分離するために、1 つのプロジェクト内に複数の Logstore を作成できます。たとえば、アプリケーション A の操作ログ、アプリケーションログ、アクセスログを収集する場合、プロジェクト名として `app-a` を指定し、そのプロジェクト内に `operation_log`、`application_log`、`access_log` という名前の Logstore をそれぞれ作成して、各ログタイプを個別に保存します。
ログの書き込み、クエリ実行、分析、処理、コンシューム、配信を行う際には、必ず Logstore を指定します。具体的な用途は以下のとおりです:
Logstore を収集単位としてログを収集します。
Logstore にログを保存し、処理・コンシューム・配信を行います。
Logstore 内にインデックスを作成して、ログのクエリ実行および分析を行います。
Metricstore
Metricstore は、時系列データの保存およびクエリ実行の基本単位です。各 Metricstore はプロジェクトに所属します。プロジェクトごとに複数の Metricstore を作成することで、さまざまな要件に対応できます(例:異なる種類の時系列データごとに個別の Metricstore を作成)。たとえば、基本ホスト監視データ、クラウドサービス監視データ、ビジネスアプリケーション監視データを収集する場合、プロジェクト名として `demo-monitor` を指定し、そのプロジェクト内に `host-metrics`、`cloud-service-metrics`、`app-metrics` という名前の Metricstore をそれぞれ作成して、これらのデータタイプを個別に保存します。
時系列データの書き込み、クエリ実行、分析、コンシュームを行う際には、必ず Metricstore を指定します。具体的な用途は以下のとおりです:
Metricstore を収集単位として時系列データを収集します。
Metricstore を使用して時系列データを保存し、コンシューム操作を実行します。
Prometheus クエリ言語(PromQL)、SQL-92、または SQL+PromQL 構文を用いて、時系列データをクエリ実行および分析します。
Eventstore
Eventstore は、イベントデータの保存およびクエリ実行の基本単位です。各 Eventstore はプロジェクトに所属します。プロジェクトごとに複数の Eventstore を作成することで、さまざまな要件に対応できます(例:異なる種類のイベントデータごとに個別の Eventstore を作成)。たとえば、インフラストラクチャの異常イベント、ビジネスアプリケーションのイベント、カスタムイベントをそれぞれ分類・保存・分析するために、個別の Eventstore を使用します。
イベントデータの書き込み、クエリ実行、分析、コンシュームを行う際には、必ず Eventstore を指定します。具体的な用途は以下のとおりです:
Eventstore を収集単位としてイベントデータを収集します。
Eventstore を保存単位としてイベントデータを保存し、コンシューム操作を実行します。
参考資料
LogGroup
ロググループ(LogGroup)は、複数のログをまとめた集合体であり、データの書き込みおよび読み取りの基本単位です。1 つの LogGroup 内のすべてのログは、IP アドレスやソースなど、共通のメタデータを共有します。SLS へログを書き込んだり、SLS からログを読み取ったりする際には、複数のログが LogGroup にバンドルされます。これにより、読み取りおよび書き込みの回数が削減され、効率が向上します。各 LogGroup の最大サイズは 5 MB です。

ログデータ
ログデータは、システムにおけるイベントや状態変化の時系列記録であり、特定のオブジェクトに対する操作とその結果から構成される順序付きコレクションです。広義には、テキストファイル(LogFiles)、イベント(Events)、データベースのバイナリログ(BinLogs)、時系列データ(メトリック)などが含まれます。Simple Log Service では、半構造化データモデルを用いてログを定義しており、その構成要素はトピック(Topic)、時刻(time)、コンテンツ(content)、ソース(source)、タグ(tags)の 5 つの主要なデータドメインからなります。以下の表に、各データドメインのフォーマット要件を示します。
データドメイン | 説明 | フォーマット |
トピック(Topic) | Simple Log Service では、予約済みフィールド( Logstore、トピック、シャード(shards) の関係は以下のとおりです: | 0~128 バイトの文字列(空文字列を含む)。 Logstore 内のログを区別する必要がない場合は、ログ収集時にトピックを空文字列として設定します。空文字列は有効なトピックです。 |
ログ時刻 | 予約済みフィールド( | UNIX タイムスタンプ。 |
ログコンテンツ | ログの内容で、1 つ以上の シンプルモード(単一行または複数行)で Logtail を使用してログを収集する場合、Logtail はログコンテンツを解析しません。生ログ全体が content フィールドにアップロードされます。 |
|
ログソース | 予約済みフィールド( | 0~128 バイトの任意の文字列。 |
タグ | ログタグには以下の種類があります:
| 文字列のキーと値のペアからなる辞書。ログ内では、タグは |
例
以下の例では、Web サイトのアクセスログを用いて、生ログと Simple Log Service のデータモデルとの対応関係を示します。
生ログ
127.0.0.1 - - [01/Mar/2021:12:36:49 0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36シンプルモードで収集されたログ。生ログ全体が content フィールドに保存されます。

正規表現モードで収集されたログ。構成された正規表現に基づき、ログコンテンツが複数のキーと値のペアに分割されて構造化されます。

時系列データ(メトリック)
時系列データは、時系列識別子とデータポイントから構成されます。同一の識別子を持つデータポイントは、1 つの時系列を形成します。Simple Log Service の時系列データ型は、Prometheus データモデル と互換性があります。Metricstore 内のすべてのデータは、時系列データとして保存されます。

時系列識別子
各時系列は、メトリック名および一連のラベルによって一意に識別されます。
メトリック名は、メトリックの種類を識別する文字列です。正規表現 [a-zA-Z_:][a-zA-Z0-9_:]* に一致する必要があります。たとえば、http_request_total は、受信した HTTP リクエストの合計数を表します。
ラベルは、メトリックの属性を識別するキーと値のペアの集合です。キーは正規表現 [a-zA-Z_][a-zA-Z0-9_]* に一致する必要があります。値には縦棒(|)を含めることはできません。たとえば、method は POST、URL は /api/v1/get です。
データポイント
データポイントは、特定の時刻における時系列の値を表します。各データポイントはタイムスタンプと値から構成されます。タイムスタンプはナノ秒単位の精度を持ち、値は double 型です。
データ構造
時系列データの書き込みプロトコルは、ログと同じものであり、Protobuf の データエンコーディング 方法を使用します。時系列識別子およびデータポイントは、以下の表に示すように content フィールドに格納されます。
フィールド | 説明 | 例 |
__name__ | メトリック名。 | nginx_ingress_controller_response_size |
__labels__ | ラベル情報。フォーマットは 説明
| app#$#ingress-nginx|controller_class#$#nginx|controller_namespace#$#kube-system|controller_pod#$#nginx-ingress-controller-589877c6b7-hw9cj |
__time_nano__ | タイムスタンプ。秒(s)、ミリ秒(ms)、マイクロ秒(us)、ナノ秒(ns)など、さまざまな精度でタイムスタンプを書き込むことができます。SQL クエリを実行する際には、出力内のすべてのタイムスタンプがマイクロ秒(us)精度に標準化され、一貫した時間計算が保証されます。 | 1585727297293000 |
__value__ | 値。 | 36.0 |
例
指定された期間内における `process_resident_memory_bytes` メトリックのすべての生時系列データをクエリ実行します。
* | select * from "sls-mall-k8s-metrics.prom" where __name__ = 'process_resident_memory_bytes' limit all
イベントデータ
イベントとは、モニタリングアラートや定期検査ジョブの結果など、重要なデータ記録を指します。Simple Log Service のイベントデータは、以下の表に示すとおり、CloudEvents 仕様に準拠しています。
フィールドタイプ | フィールド名 | 必須 | データフォーマット | 説明 |
プロトコルフィールド |
| はい | 文字列 | デフォルト値は |
| はい | 文字列 | イベント ID。イベントを一意に識別するには、 | |
| はい | 文字列 | イベントが発生したコンテキスト(例:イベントソースやイベントを公開したインスタンスなど)。 | |
| はい | 文字列 | イベントタイプ(例: | |
| いいえ | 文字列 | イベントの件名。このフィールドは、 | |
| いいえ | 文字列 | イベントタイプ。デフォルト値は | |
| いいえ | URI |
| |
| いいえ | JSON | 特定のイベントコンテンツ。フォーマットは、イベントのソースおよびタイプに応じて異なります。 | |
| はい | タイムスタンプ | イベント時間。フォーマットの詳細については、RFC 3339 をご参照ください。例: | |
拡張フィールド |
| はい | 文字列 | イベントタイトル。 |
| はい | 文字列 | イベントの説明。 | |
| はい | 文字列 | イベントステータス。有効な値は以下のとおりです:
|
例
以下の例は、アラートイベントのデータを示しています:
{
"specversion": "1.0",
"id": "af****6c",
"source": "acs:sls",
"type": "sls.alert",
"subject": "https://sls.console.alibabacloud.com/lognext/project/demo-alert-chengdu/logsearch/nginx-access-log?encode=base64&endTime=1684312259&queryString=c3RhdHVzID49IDQwMCB8IHNlbGVjdCByZXF1ZXN0X21ldGhvZCwgY291bnQoKikgYXMgY250IGdyb3VwIGJ5IHJlcXVlc3RfbWV0aG9kIA%3D%3D&queryTimeType=99&startTime=1684311959",
"datacontenttype": "application/cloudevents+json",
"data": {
"aliuid": "16****50",
"region": "cn-chengdu",
"project": "demo-alert-chengdu",
"alert_id": "alert-16****96-247190",
"alert_name": "Nginx Access Error",
"alert_instance_id": "77****e4-1aad9f7",
"alert_type": "sls_alert",
"next_eval_interval": 300,
"fire_time": 1684299959,
"alert_time": 1684312259,
"resolve_time": 0,
"status": "firing",
"severity": 10,
"labels": {
"request_method": "GET"
},
"annotations": {
"__count__": "1",
"cnt": "49",
"desc": "Nginx has had 49 GET request errors in the last five minutes",
"title": "Nginx Access Error Alert Triggered"
},
"results": [
{
"region": "cn-chengdu",
"project": "demo-alert-chengdu",
"store": "nginx-access-log",
"store_type": "log",
"role_arn": "",
"query": "status >= 400 | select request_method, count(*) as cnt group by request_method ",
"start_time": 1684311959,
"end_time": 1684312259,
"fire_result": {
"cnt": "49",
"request_method": "GET"
},
"raw_results": [
{
"cnt": "49",
"request_method": "GET"
},
{
"cnt": "3",
"request_method": "DELETE"
},
{
"cnt": "7",
"request_method": "POST"
},
{
"cnt": "6",
"request_method": "PUT"
}
],
"raw_result_count": 4,
"truncated": false,
"dashboard_id": "",
"chart_title": "",
"is_complete": true,
"power_sql_mode": "auto"
}
],
"fire_results": [
{
"cnt": "49",
"request_method": "GET"
}
],
"fire_results_count": 1,
"condition": "Count:[1] > 0; Condition:[49] > 20",
"raw_condition": "Count:__count__ > 0; Condition:cnt > 20"
},
"time": "2023-05-17T08:30:59Z",
"title": "Nginx Access Error Alert Triggered",
"message": "Nginx has had 49 GET request errors in the last five minutes",
"status": "error"
}トレースデータ
トレースデータは、単一のリクエストに対するエンドツーエンドの処理を記録したもので、すべてのサービス呼び出しとその持続時間(処理時間)を含みます。各トレースデータは 1 つのトレースに対応します。トレースとは、分散システムを通じたトランザクションまたはプロセスの実行パスを表します。OpenTracing 標準によると、トレースはスパン(Spans)から構成される有向非循環グラフ(DAG)です。各スパンは、トレース内における名前付き・時刻付き・連続的な実行セグメントを表します。詳細については、「トレースデータのフォーマット」をご参照ください。