跳转至

数据采集脱敏

如果只需要按字段名进行全局修改或脱敏,建议使用 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);

数据修改与黑名单过滤同时配置时,执行顺序为:DataModifierLineDataModifier → 黑名单过滤 → 写入本地缓存。本地和远程黑名单规则都会基于修改后的数据进行判断。

DataModifierValue 支持 stringnumberbooleanobject;对象会在写入本地缓存前序列化为字符串。两类回调都不能新增、删除字段,也不能在标签和字段之间移动数据。

文档评价

文档内容是否对您有帮助? ×