数据采集脱敏¶
如果只需要按字段名进行全局修改或脱敏,建议使用 setDataModifier,性能开销更低;需要结合一条数据中的多个字段进行判断或替换时,再使用 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;对象会在写入本地缓存前序列化为字符串。两类回调都不能新增、删除字段,也不能在标签和字段之间移动数据。