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

Simple Log Service:データ変換 (新バージョン) 命令

最終更新日:Nov 09, 2025

この Topic では、データ変換命令 (新バージョン) の使用方法について説明し、例を示します。

pack-fields

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

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

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

構文

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

パラメーター

パラメーター

必須

説明

output

String

はい

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

include

RegExp

いいえ

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

exclude

RegExp

いいえ

ブラックリスト構成。ホワイトリストよりも優先されます。正規表現に一致するフィールドはパッケージングされません。デフォルト値は Empty で、マッチングが実行されないことを意味します。詳細については、「正規表現」をご参照ください。

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

いいえ

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

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

format

Bool

いいえ

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

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

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

names

FieldList

はい

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

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

たとえば、[mem, "mem:pct"] は、memmem:pct という名前の 2 つのデータポイントを生成します。

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

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

    • フィールドが数値型である: TINYINT、SMALLINT、INTEGER、BIGINT、HUGEINT、REAL、または DOUBLE。

    • フィールドが VARCHAR テキスト型であり、その値を有効な DOUBLE 型に変換できる。

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

labels

FieldList

いいえ

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

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

たとえば、[host, ip] は、元のフィールド値を持つ 2 つの時系列ラベル hostip を追加します。

重要
  • 入力フィールド名は正規表現 [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_rttotal_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"] と入力すると、1 つの時系列ラベルが削除されます。元のラベルは 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