すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:データ変換の手順(新バージョン)

最終更新日:Mar 21, 2026

本トピックでは、データ変換の新バージョンに対応した手順の使用方法を説明し、実行例を示します。

pack-fields

この命令は、複数のフィールドを JSON シリアル化文字列として新しいフィールドにパッケージングします。構造化された送信(たとえば、API リクエストボディの構築など)が必要なシナリオで有効です。

重要
  • デフォルトでは、Varchar 型でないフィールドは処理されません。これには __time__ および __time_ns_part__ フィールドが含まれます。

  • デフォルトでは、ソースデータは保持されません。

構文

| pack-fields -keep -ltrim -include=<include> -exclude=<exclude> as <output>

パラメーター

パラメーター

必須

説明

output

String

はい

パッケージング後の出力フィールドの名前。フィールド値は JSON 形式です。

include

正規表現

いいえ

ホワイトリスト構成。正規表現に一致するフィールドがパッケージングされます。デフォルト値は ".*" であり、すべてのフィールドに一致します。詳細については、「正規表現」をご参照ください。

exclude

正規表現

いいえ

ブラックリスト構成。ホワイトリストより優先されます。正規表現に一致するフィールドはパッケージングされません。デフォルト値は空文字列であり、マッチングは行われません。詳細については、「正規表現」をご参照ください。

ltrim

String

いいえ

出力フィールド名からプレフィックスを削除します。

keep

Bool

いいえ

パッケージング後にソースデータを保持するかどうかを指定します。

True:パッケージング済みのソースデータを出力に保持します。

False(デフォルト):パッケージング済みのソースデータを出力に保持しません。

実行例

  • 例 1:すべてのログフィールドを test フィールドにパッケージングします。デフォルトでは、元のパッケージング対象フィールドは削除されます。

    • SPL 文

      * | pack-fields -include='\w+' as test
    • 入力データ

      test1:123
      test2:456
      test3:789
    • 出力

      test:{"test1": "123", "test2": "456", "test3": "789"}
  • 例 2:元のパッケージング対象フィールドを削除せずに、すべてのログフィールドを test フィールドにパッケージングします。

    • SPL 文

      * | pack-fields -keep -include='\w+' as test
    • 入力データ

      test1:123
      test2:456
      test3:789
    • 出力

      test:{"test1": "123", "test2": "456", "test3": "789"}
      test1:123
      test2:456
      test3:789
  • 例 3:test および abcd フィールドを content フィールドにパッケージングし、元のフィールドを保持します。

    • SPL 文

      * | pack-fields -keep -include='\w+' as content
    • 入力データ

      abcd@#%:123
      test:456
      abcd:789
    • 出力

      abcd:789
      abcd@#%:123
      content:{"test": "456", "abcd": "789"}
      test:456
  • 例 4:test および abcd フィールドを除くすべてのフィールドを content フィールドにパッケージングし、元のパッケージング対象フィールドを削除します。

    • SPL 文

      * | pack-fields -exclude='\w+' as content
    • 入力データ

      abcd@#%:123
      test:456
      abcd:789
    • 出力

      abcd:789
      content:{"abcd@#%": "123"}
      test:456
  • 例 5:フィールド値から指定された正規表現に一致するすべてのキーと値のペアを抽出し、それらを name フィールドにパッケージングします。

    • SPL 文

      * | parse-kv -prefix='k_' -regexp dict, '(\w+):(\w+)' | pack-fields -include='k_.*' -ltrim = 'k_' as name
    • 入力データ

      dict: x:123, y:456, z:789
    • 出力

      dict:x:123, y:456, z:789
      name:{"x": "123", "y": "456", "z": "789"}

log-to-metric

この命令は、ログを時系列データの保存に必要な形式に変換します。

重要
  • デフォルトでは、メトリック の要件を満たさないログデータは無視されます。

  • 生ログデータ内のタイムスタンプフィールドの時間単位は自動検出されます。サポートされる単位には、秒、ミリ秒、マイクロ秒、ナノ秒があります。

  • デフォルトでは、ハッシュベースの書き込みが使用されます。

構文

| log-to-metric -wildcard -format -names=<names> -labels=<labels> -time_field=<time_field> -buckets=<buckets>

パラメーター

パラメーター

必須

説明

wildcard

Bool

いいえ

names および labels で指定されたフィールド名に対して、ワイルドカードマッチングを有効にするかどうかを指定します。

デフォルトでは、完全一致によるフィールドマッチングが使用されます。ワイルドカードマッチングを有効にするには、このパラメーターを追加します。

format

Bool

いいえ

自動フォーマットを有効にするかどうかを指定します。

デフォルトでは無効であり、変換時に無効なラベルデータはスキップされます。

有効にすると、無効なラベルデータがフォーマットされます。ラベル値には、"|""#""$" などの文字を含めることはできません。これらの文字が含まれている場合、アンダースコア (_) に置き換えられます。

names

FieldList

はい

対応するメトリックデータポイントを生成するために使用されるログフィールドのリストです。

入力データ内のフィールドが、指定されたフィールド名またはワイルドカードパターンのいずれかに少なくとも 1 つ一致する場合、そのフィールドに対してメトリックデータポイントが生成されます。メトリック名はフィールド名、メトリック値はフィールド値となります。

たとえば、["mem","mem:pct"] を指定すると、mem および mem:pct という名前の 2 つのデータポイントが生成されます。

重要
  • 入力フィールド名は正規表現 [a-zA-Z_:][a-zA-Z0-9_:]* に一致する必要があります。そうでない場合、そのフィールドに対してデータポイントは生成されません。

  • 入力フィールド値は、以下のいずれかの条件を満たす必要があります。そうでない場合、そのフィールドに対してデータポイントは生成されません:

    • 数値型である:TINYINT、SMALLINT、INTEGER、BIGINT、HUGEINT、REAL、DOUBLE

    • VARCHAR テキスト型であり、その値が有効な DOUBLE 型に変換可能である

時系列データ形式については、「時系列データ(メトリック)」をご参照ください。

labels

FieldList

いいえ

対応する時系列ラベル情報を構築するために使用されるログフィールドのリストです。

入力データ内のフィールドが、指定されたフィールド名またはワイルドカードパターンのいずれかに少なくとも 1 つ一致する場合、そのフィールドがデータポイントのラベルに追加されます。ラベル名はフィールド名、ラベル値はフィールド値となります。

たとえば、["host","ip"] を指定すると、host および ip という 2 つの時系列ラベルが、それぞれの元のフィールド値とともに追加されます。

重要
  • 入力フィールド名は正規表現 [a-zA-Z_][a-zA-Z0-9_]* に一致する必要があります。そうでない場合、生成されたデータポイントのラベルにはこのフィールドが含まれません。

  • 入力フィールド値には、縦線 (|) を含めることはできません。含む場合、生成されたデータポイントのラベルにはこのフィールドが含まれません。

  • 入力フィールドは VARCHAR テキスト型である必要があります。そうでない場合、対応するラベルは生成されません。

時系列データ形式については、「時系列データ(メトリック)」をご参照ください。

time_field

String

いいえ

時系列データのタイムフィールドです。デフォルトでは、ログから取得した __time__ フィールドが、時系列データのタイムフィールドとして使用されます。

重要

入力フィールドはタイムスタンプである必要があります。対応するデータ型は BIGINT または VARCHAR である必要があります。フィールドが VARCHAR テキスト型の場合、その値は有効な BIGINT 型に変換可能である必要があります。

buckets

Integer

いいえ

デフォルト値は 32 です。このパラメーターをターゲットシャード数に設定します。これにより、log-to-metric 演算子の書き込みパフォーマンスを最適化するためのハッシュ範囲が調整されます。このパラメーターはハッシュバケット数を制御し、metricstore 内でのデータ分散およびクエリパフォーマンスに影響を与えます。

実行例

  • 例 1:rt フィールドを含むログを時系列データ形式に変換します。

    • SPL 文

      * | log-to-metric -names='["rt"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
    • 出力

      __labels__:
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 2:rt フィールドを含むログを時系列データ形式に変換し、host フィールドを新しいラベルとして使用します。

    • SPL 文

      * | log-to-metric -names='["rt"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 3: rt および qps フィールドを含むログを時系列データ形式に変換し、host フィールドをラベルとして使用します。

    • SPL 文

      * | log-to-metric -names='["rt", "qps"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:qps
      __time_nano__:1614739608
      __value__:10

  • 例 4:ワイルドカードマッチングを使用して、rt1 および rt2 フィールドを含むログを時系列データ形式に変換し、host フィールドを新しいラベルとして使用します。

    • SPL 文

      * | log-to-metric -wildcard -names='["rt*"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt1: 123
      rt2: 10
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:rt1
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:rt2
      __time_nano__:1614739608
      __value__:10
  • 例 5: rt および qps フィールドを含むログを時系列データ フォーマットに変換し、host フィールドを新しいラベルとして使用し、新しいラベルの値を自動的にフォーマットします。

    • SPL 文

      * | log-to-metric -format -names='["rt", "qps"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost1|myhost2
    • 出力

      __labels__:host#$#myhost1_myhost2
      __name__:rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost1_myhost2
      __name__:qps
      __time_nano__:1614739608
      __value__:10
  • 例 6: rt フィールドと qps フィールドを含むログを時系列データ形式に変換します。フィールド名を max_rt および total_qps に置き換え、host フィールドを新しいラベルとして使用します。

    • SPL 文

      * | project-rename max_rt = rt, total_qps = qps| log-to-metric -names='["max_rt", "total_qps"]' -labels='["host"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 出力

      __labels__:host#$#myhost
      __name__:max_rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:host#$#myhost
      __name__:total_qps
      __time_nano__:1614739608
      __value__:10
  • 例 7: rt および qps フィールドを含むログを時系列データ形式に変換します。これらのフィールドは max_rt および total_qps に名前が変更され、host フィールドは hostname に名前が変更されて、新しいラベルとして使用されます。

    • SPL 文

      * | project-rename max_rt = rt, total_qps = qps, hostname=host| log-to-metric -names='["max_rt", "total_qps"]' -labels='["hostname"]'
    • 入力データ

      __time__: 1614739608
      rt: 123
      qps: 10
      host: myhost
    • 出力

      __labels__:hostname#$#myhost
      __name__:max_rt
      __time_nano__:1614739608
      __value__:123
      
      __labels__:hostname#$#myhost
      __name__:total_qps
      __time_nano__:1614739608
      __value__:10
  • 例 8:remote_user フィールドを含むログを時系列データ形式に変換します。status フィールドを新しいラベルとして使用し、time フィールドを時系列データのタイムスタンプとして使用します。

    • SPL 文

      * | log-to-metric -names='["remote_user"]' -labels='["status"]' -time_field='time'
    • 入力データ

      time:1652943594
      remote_user:89
      request_length:4264
      request_method:GET
      status:200
    • 出力

      __labels__:status#$#200
      __name__:remote_user
      __time_nano__:1652943594
      __value__:89

metric-to-metric

この命令は、既存の時系列データをさらに変換し、ラベルを追加・変更・削除します。

重要
  • 入力フィールド名は正規表現 [a-zA-Z_][a-zA-Z0-9_]* に一致する必要があります。そうでない場合、生成された時系列ポイントのラベルにはこのフィールドが含まれません。

  • 3 つのオプションパラメーターに同じフィールドが含まれる場合、優先度は次のとおりです:add_labels > del_labels > rename_labels。

出力時系列データ形式の詳細については、「時系列データ(メトリック)」をご参照ください。

構文

| metric-to-metric -format -add_labels=<add_labels> -del_labels=<del_labels> -rename_labels=<rename_labels> -buckets=<buckets>

パラメーター

パラメーター

必須

説明

add_labels

Array

いいえ

追加するラベルフィールドのリストです。これは新しい時系列ラベル情報を構築するために使用されます。

生データを時系列ポイントのラベルに追加します。サポートされるのは VARCHAR 型のみです。

たとえば、生データが {"host":"http://www.xxx.com", "ip":"127.0.0.1"} であり、["host", "ip"] を指定した場合、|host#$#http://www.xxx.com|ip#$#127.0.0.1 が元のラベルに追加されます。元のラベルに host フィールドがすでに存在する場合、その値は上書きされます。

del_labels

Array

いいえ

削除するラベルフィールドのリストです。これは新しい時系列ラベル情報を構築するために使用されます。

入力のフィールド名が元のラベルのフィールド名と一致する場合、対応するフィールドが元のラベルから削除されます。

たとえば、元のラベル値が host#$#http://www.xxx.com|ip#$#127.0.0.1 であり、["ip"] を指定した場合、時系列ラベルの削除が指定され、元のラベルは host#$#http://www.xxx.com に更新されます。元のラベルに ip フィールドが含まれていない場合は、操作は行われません。

rename_labels

Map

いいえ

リネームするラベルフィールドのリストです。これは新しい時系列ラベル情報を構築するために使用されます。

マップ情報に基づいて、元の時系列ポイントのラベルを更新します。キーは元のフィールド名、値は新しいフィールド名です。

たとえば、{"host":"host_new", "ip":"ip_new"} を指定すると、"host""host_new" に、"ip""ip_new" にリネームされます。元のラベルに該当するフィールドが含まれていない場合、操作は行われません。

format

Bool

いいえ

自動フォーマットを有効にするかどうかを指定します。デフォルトでは無効であり、変換時に無効なデータはスキップされます。

有効にした場合:

  • __labels__ がソートされます。

  • LabelKey および LabelValue がフォーマットされます。

    • LabelKey:正規表現 "[a-zA-Z_][a-zA-Z0-9_]" に一致する必要があります。無効な文字は半角スペース (" ") に置き換えられます。

    • LabelValue:"|", "#", "$" などの文字を含めることはできません。含む場合、これらの文字はアンダースコア (_) に置き換えられます。

  • __labels__ 内で LabelValue が空文字列であるラベルは削除されます。ただし、データ入力自体は保持されます。

  • __labels__ フィールド内の重複ラベルは削除されます。辞書順で最初の LabelValue を持つラベルが保持されます。

buckets

Integer

いいえ

デフォルト値は 32 です。このパラメーターをターゲットシャード数に設定します。これにより、metric-to-metric 演算子の書き込みパフォーマンスを最適化するためのハッシュ範囲が調整されます。このパラメーターはハッシュバケット数を制御し、metricstore 内でのデータ分散およびクエリパフォーマンスに影響を与えます。

実行例

  • 例 1:ラベルを追加します。

    • SPL 文

      * | extend qps = '10'|metric-to-metric -add_labels='["qps"]'
    • 入力データ

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 2:ラベルを削除します。

    • SPL 文

      * | metric-to-metric -del_labels='["qps"]'
    • 入力データ

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力

      __labels__:host#$#myhost
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 3:ラベルをリネームします。

    • SPL 文

      * | metric-to-metric -rename_labels='{"host":"etl_host"}'
    • 入力データ

      __labels__:host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力

      __labels__:etl_host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123
  • 例 4:無効なデータをフォーマットします。

    • SPL 文

      * | metric-to-metric -format
    • 入力データ

      __labels__:host#$#myhost|qps#$#10|asda$cc#$#j|ob|schema#$#|#$#|#$#xxxx
      __name__:rt
      __time_nano__:1614739608
      __value__:123
    • 出力

      __labels__:asda_cc#$#j|host#$#myhost|qps#$#10
      __name__:rt
      __time_nano__:1614739608
      __value__:123