ストアは、SLS におけるデータストレージおよびクエリの基本的な単位です。SLS は、さまざまなデータに対応するため、Logstore、Metricstore、Eventstore という 3 種類のストアタイプを提供しています。
ストアタイプの選択
これらのストアタイプは、基盤となるデータモデルが異なります。データ構造 (ログ、メトリック、またはイベント) に合わせてタイプを選択してください。特別な要件がない場合は、デフォルトで Logstore を使用します。
|
ストアタイプ |
説明 |
|
Logstore |
|
|
Metricstore |
メトリック:一意の識別子と一連のデータポイントで構成される時系列です。時系列データを効率的に保存し、クエリするには Metricstore を使用します。 |
|
Eventstore |
イベント:監視アラートや定期的な検査の結果など、重要な出来事の記録です。離散的なイベントデータを保存するには Eventstore を使用します。 |
Logstore、Metricstore、Eventstore は、SLS コンソールでは異なるタブにグループ化されています。Logstore は [Log Storage] タブに、Metricstore は [Time Series Storage] タブに表示されます。作成した Metricstore (たとえば、名前が aliyun-prom- で始まるもの) が Logstore のリストで見つからない場合は、[Time Series Storage] タブに切り替えて表示してください。
Logstore
Logstore は、ログデータを保存し、クエリするための基本的な単位です。各 Logstore はプロジェクトに属します。1 つのプロジェクト内に複数の Logstore を作成して、同じアプリケーションから得られるさまざまな種類のログを分離できます。たとえば、アプリ A の操作ログ、アプリケーションログ、アクセスログを収集するには、app-a という名前のプロジェクトを作成します。このプロジェクト内に、operation_log、application_log、access_log という名前の Logstore を作成して、各ログタイプを個別に保存します。
ログの書き込み、クエリ、分析、処理、消費、または転送を行う際は、Logstore を指定します:
-
ログを Logstore に収集して書き込みます。
-
ログを Logstore に保存して、処理、消費、または配信します。
-
Logstore にインデックスを作成して、ログのクエリと分析を行います。
Metricstore
Metricstore は、時系列データ (メトリック) を保存し、クエリするための基本的な単位です。各 Metricstore はプロジェクトに属します。1 つのプロジェクトに複数の Metricstore を作成して、さまざまな種類の時系列データを分離します。たとえば、基本的なホスト監視データ、クラウドサービス監視データ、アプリケーション監視データを収集するには、demo-monitor という名前のプロジェクトを作成します。次に、このプロジェクト内に host-metrics、cloud-service-metrics、app-metrics という名前の Metricstore を作成して、これらのデータタイプを個別に保存します。
時系列データの書き込み、クエリ、分析、または消費を行う際は、Metricstore を指定します:
-
収集単位として、時系列データを Metricstore に収集します。
-
Metricstore を使用して時系列データを保存し、分析および消費します。
-
Prometheus クエリ言語 (PromQL)、SQL-92、または SQL+PromQL 構文を使用して、時系列データのクエリと分析を行います。
Eventstore
Eventstore は、イベントデータを保存し、クエリするための基本的な単位です。各 Eventstore はプロジェクトに属します。1 つのプロジェクトに複数の Eventstore を作成して、インフラストラクチャの異常イベント、ビジネスアプリケーションイベント、カスタムイベントなど、さまざまなイベントタイプを分離します。
イベントデータの書き込み、クエリ、分析、または消費を行う際は、Eventstore を指定します:
-
Eventstore を収集単位として、イベントデータを収集します。
-
Eventstore をストレージユニットとして、イベントデータを保存し、消費操作を実行します。
関連概念
ロググループ
ロググループは、複数のログをバンドルした基本的な読み書き単位です。同じグループ内のログは、IP アドレスやソースなどのメタデータを共有します。バンドルすることで、I/O 操作が減り、効率が向上します。グループの最大サイズは 5 MB です。

ログ
ログは、システム内のイベントや変更を時系列で記録したものです。テキストファイル、システムイベント、データベースの BinLog、または時系列データを表すことができます。SLS では、ログは topic、time、content、source、tags の 5 つのフィールドを持つ半構造化モデルを使用します。次の表に、形式の要件を示します。
|
フィールド |
説明 |
形式 |
|
トピック |
SLS は、予約済みフィールドの Logstore、トピック、シャードの関係は次のとおりです: |
0 バイトから 128 バイトまでの文字列で、空の文字列も含まれます。 Logstore 内のログを区別する必要がない場合は、ログを収集するときにトピックを空の文字列に設定できます。空の文字列は有効なトピックです。 |
|
Time |
予約済みフィールド ( |
UNIX タイムスタンプ。 |
|
Content |
ログのコンテンツであり、1 つ以上の Logtail をシンプルモード (単一行または複数行) で使用してログを収集する場合、Logtail はログコンテンツを解析しません。生ログ全体が content フィールドにアップロードされます。 |
|
|
Source |
予約済みフィールド ( |
0 バイトから 128 バイトまでの文字列。 |
|
Tags |
ログタグには、以下が含まれます:
|
文字列のキーと値のペアの辞書です。ログでは、タグは |
例
次の例では、Web サイトのアクセスログを使用して、生ログと SLS のデータモデルとのマッピングを示します。
-
生ログ
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 フィールドに保存されます。
__source__:192.xxx.xxx.35 __tag__:__hostname__:iZxxxxxxxxxxxxxxkw0Z __tag__:__path__:/opt/log.txt __tag__:__receive_time__:1620639668 __topic__: content: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.xxx.xxx.6 Safari/537.36 -
正規表現モードで収集されたログ。ログコンテンツは、設定された正規表現に基づいて複数のキーと値のペアに抽出され、構造化されます。
解析された Nginx アクセスログの例には、次のキーと値のペアが含まれています:
-
remote_addr:127.0.0.1 -
request_method:GET -
request_uri:/index.html -
request__protocol:HTTP/1.1 -
status:200 -
body_bytes_sent:612 -
http_user_agent:Mozilla/5.0 ブラウザー情報 -
http_referer:- -
time_local:01/Mar/2021:12:36:49 +0800 -
__source__:ログソース IP -
__tag__:__path__:/opt/log.txt
-
メトリック
時系列データは、メトリック識別子とデータポイントで構成されます。同じ識別子を持つポイントが時系列を形成します。SLS モデルは、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) をサポートしますが、一貫した計算のためにクエリ結果では常にマイクロ秒 (us) に正規化されます。 |
1585727297293000 |
|
__value__ |
値。 |
36.0 |
トピック、ソース、Tags などのカスタムフィールドは、SDK 経由で書き込まれると Metricstore には保存されません。詳細については、「SDK によるメトリックの送信」をご参照ください。
例
次の例は、指定された時間範囲内の process_resident_memory_bytes メトリックのすべての生時系列データをクエリする例です。
* | select * from "sls-mall-k8s-metrics.prom" where __name__ = 'process_resident_memory_bytes' limit all
クエリ結果には、__name__ (メトリック名)、__labels__ (クラスター、インスタンス、ジョブ、名前空間、ノードなどのキーと値のペアを含むラベル情報)、__time_nano__ (タイムスタンプ)、__value__ (メトリック値) の 4 つの列が含まれます。
イベント
イベントは、重要なデータレコード (監視アラートや定期的な検査ジョブの結果など) です。SLS のイベントデータは、CloudEvents 仕様に準拠しており、次の表で説明します。
|
フィールドタイプ |
フィールド名 |
必須 |
データ形式 |
説明 |
|
プロトコル |
|
はい |
文字列 |
デフォルト値は |
|
|
はい |
文字列 |
イベント ID。 |
|
|
|
はい |
文字列 |
イベントが発生したコンテキスト (イベントソースやイベントを発行したインスタンスなど)。 |
|
|
|
はい |
文字列 |
イベントタイプ (例: |
|
|
|
いいえ |
文字列 |
|
|
|
|
いいえ |
文字列 |
data 値のコンテンツタイプ。デフォルトは |
|
|
|
いいえ |
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"
}
トレース
トレースは、単一リクエストのエンドツーエンドの処理を記録するもので、すべてのサービスコールとその所要時間が含まれます。トレースは、分散システムを介したトランザクションまたはプロセスの実行パスを表します。OpenTracing 標準に従い、トレースはスパンの有向非巡回グラフ (DAG) であり、各スパンは、名前が付けられ、時間が計測された、連続的な実行セグメントを表します。完全なデータ構造は、トレースデータ形式で定義されています。