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