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