콘텐츠로 이동

데이터 수집 마스킹

필드 이름별로 전역 수정이나 마스킹만 수행해야 한다면 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를 지원합니다. 객체는 로컬 캐시에 쓰기 전에 문자열로 직렬화됩니다. 두 유형의 콜백 모두 필드를 추가하거나 삭제할 수 없으며, 태그와 필드 간에 데이터를 이동할 수도 없습니다.

문서 평가

이 페이지가 도움이 되었나요?