データ収集マスキング¶
フィールド名に基づいて全体的に変更またはマスキングするだけでよい場合は、パフォーマンスオーバーヘッドが低い setDataModifier の使用を推奨します。1 件のデータ内の複数フィールドを組み合わせて判定または置換する必要がある場合は、setLineDataModifier を使用してください。
コールバック内で複雑な処理、時間のかかる処理、または非同期処理を実行しないでください。SDK のデータ書き込みパフォーマンスに影響を与えます。
DataModifier は、生の Log、ネイティブ RUM、WebView RUM のタグとフィールドを処理します。null を返すと、元の値が保持されます。
LineDataModifier は、SDK のタグとフィールドがマージされた後に実行され、コールバックはそのデータの完全な Map を受け取ります。戻り値は、置換対象のフィールドのみを含むパッチです。元のデータに存在するフィールドのみが置換されます。null、空の Map、値が null のフィールド、または存在しないフィールドを返した場合、データは変更されません。
import {
DataModifier,
DataModifierValue,
FTSDK,
FTSDKConfig,
LineDataModifier
} from '@guancecloud/ft_sdk/Index';
class FieldMasker implements DataModifier {
/**
* 単一のタグまたはフィールドを変更します。
* null を返すと、元の値は変更されません。
*/
modify(key: string, _value: DataModifierValue): DataModifierValue | null {
if (key === 'device_uuid' || key === 'authorization') {
return '[masked]';
}
return null;
}
}
class RecordMasker implements LineDataModifier {
/**
* 単一のデータを変更します。
* measurement はデータの指標タイプです。例: view、action、resource、longtask、error、df_rum_harmonyos_log。
* 変更対象のフィールドのみを含む Map を返します。null または空の Map を返すとデータは変更されません。
*/
modify(measurement: string, data: Map<string, DataModifierValue>): Map<string, DataModifierValue> | null {
const patch = new Map<string, DataModifierValue>();
if (measurement === 'view' && data.has('view_url')) {
patch.set('view_url', '[masked]');
}
if (data.get('message') === 'sensitive message') {
patch.set('message', '[masked]');
}
return patch.size > 0 ? patch : null;
}
}
const sdkConfig = FTSDKConfig.builder(datawayUrl, clientToken)
.setDataModifier(new FieldMasker())
.setLineDataModifier(new RecordMasker());
FTSDK.install(sdkConfig, this.context);
データ変更とブラックリストフィルタリングの両方が設定されている場合、新しいデータの実行順序は次のとおりです。DataModifier → LineDataModifier → ローカルおよび取得済みのリモートブラックリストフィルタリング → ローカルキャッシュへの書き込み。ルールは変更後のデータに基づいて判定されます。
リモートブラックリストルールは、取得後にアップロード前のローカルキャッシュもチェックし、一致した履歴データを削除します。ローカルブラックリストルールは、データがキャッシュに書き込まれる前にのみ有効で、キャッシュ済みデータを遡ってクリーンアップすることはありません。
DataModifierValue は string、number、boolean、object をサポートします。オブジェクトはローカルキャッシュへの書き込み前に文字列にシリアライズされます。どちらのコールバックも、フィールドの追加・削除はできません。また、タグとフィールドの間でデータを移動することもできません。