本トピックでは、データ変換の新バージョンに対応した手順の使用方法を説明し、実行例を示します。
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 | いいえ |
デフォルトでは、完全一致によるフィールドマッチングが使用されます。ワイルドカードマッチングを有効にするには、このパラメーターを追加します。 |
format | Bool | いいえ | 自動フォーマットを有効にするかどうかを指定します。 デフォルトでは無効であり、変換時に無効なラベルデータはスキップされます。 有効にすると、無効なラベルデータがフォーマットされます。ラベル値には、 |
names | FieldList | はい | 対応するメトリックデータポイントを生成するために使用されるログフィールドのリストです。 入力データ内のフィールドが、指定されたフィールド名またはワイルドカードパターンのいずれかに少なくとも 1 つ一致する場合、そのフィールドに対してメトリックデータポイントが生成されます。メトリック名はフィールド名、メトリック値はフィールド値となります。 たとえば、 重要
時系列データ形式については、「時系列データ(メトリック)」をご参照ください。 |
labels | FieldList | いいえ | 対応する時系列ラベル情報を構築するために使用されるログフィールドのリストです。 入力データ内のフィールドが、指定されたフィールド名またはワイルドカードパターンのいずれかに少なくとも 1 つ一致する場合、そのフィールドがデータポイントのラベルに追加されます。ラベル名はフィールド名、ラベル値はフィールド値となります。 たとえば、 重要
時系列データ形式については、「時系列データ(メトリック)」をご参照ください。 |
time_field | String | いいえ | 時系列データのタイムフィールドです。デフォルトでは、ログから取得した 重要 入力フィールドはタイムスタンプである必要があります。対応するデータ型は 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 型のみです。 たとえば、生データが |
del_labels | Array | いいえ | 削除するラベルフィールドのリストです。これは新しい時系列ラベル情報を構築するために使用されます。 入力のフィールド名が元のラベルのフィールド名と一致する場合、対応するフィールドが元のラベルから削除されます。 たとえば、元のラベル値が |
rename_labels | Map | いいえ | リネームするラベルフィールドのリストです。これは新しい時系列ラベル情報を構築するために使用されます。 マップ情報に基づいて、元の時系列ポイントのラベルを更新します。キーは元のフィールド名、値は新しいフィールド名です。 たとえば、 |
format | Bool | いいえ | 自動フォーマットを有効にするかどうかを指定します。デフォルトでは無効であり、変換時に無効なデータはスキップされます。 有効にした場合:
|
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