Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

감사 로그 스키마와 식별자

감사 로그는 정해진 스키마를 가진 구조화된 기록입니다. audit.3의 requestFields와 resultFields, 과거 audit.2의 request_params와 result_params에는 이벤트별 정보가 들어갑니다. 요청 당시 알려진 값과 실제 실행 중 얻은 결과를 구분해 읽어야 합니다.

audit.3의 범주와 보장

Audit.3 로그는 하나 이상의 표준 범주를 결합해 생성합니다. 각 범주는 적용 대상과 요청 및 결과 필드를 정의합니다. 이름이 지정된 리소스 같은 주요 정보는 상세 필드뿐 아니라 최상위 엔터티에도 나타납니다.

이벤트 이름만 나열하지 않고 dataExport, dataLoad 같은 범주를 사용하면 여러 제품의 같은 종류의 동작을 함께 조사할 수 있습니다. 다만 passThrough처럼 상세 파라미터가 실행 중 외부 시스템에 의해 정해지는 범주는 내부 내용의 구조를 별도로 다뤄야 합니다.

audit.3 필드

필드자료형의미
categoriesset<string>이벤트에 포함된 모든 감사 범주입니다.
entitieslist<any>요청 및 결과 필드에 등장하는 리소스 등의 모든 엔터티입니다.
environmentoptional<string>로그가 생성된 환경입니다.
eventIduuid하나의 감사 대상 이벤트 식별자입니다. 큰 바이너리 응답의 시작과 끝처럼 여러 로그 행이 같은 이벤트에 속할 수 있습니다.
hoststring로그를 만든 호스트입니다.
logEntryIduuid개별 로그 행의 고유 식별자입니다. 수집 중 중복된 같은 ID의 행은 같은 기록으로 취급합니다.
namestring감사 이벤트 이름입니다. 일반적으로 제품과 엔드포인트 이름을 대문자 snake case로 결합합니다. 예: DATA_PROXY_SERVICE_GENERATED_GET_DATASET_AS_CSV2.
orgIdoptional<string>알 수 있는 경우 uid 사용자의 조직입니다.
originoptional<string>IP나 Kubernetes 노드 등 발신 머신의 최선 추정 식별자입니다. 위조될 수 있습니다.
originslist<string>요청 헤더에서 얻은 네트워크 요청 출처입니다. 위조될 수 있으며 아래의 요청 연결 분석에 사용합니다.
productstring로그를 생성한 제품입니다. 제품별 분석 필터에 권장되는 불변 필드입니다.
producerTypeAuditProducer백엔드 SERVER, 프런트엔드 CLIENT처럼 로그 생성 주체의 종류입니다.
productVersionstring로그를 생성한 제품 버전입니다.
requestFieldsmap<string, any>메서드 호출 시점에 알려진 파라미터입니다. 포함 필드는 categories에 따라 정해집니다.
resultAuditResult성공 여부와 실패 종류입니다. 예를 들어 ERROR, UNAUTHORIZED 같은 결과가 있습니다.
resultFieldsmap<string, any>실행 중 얻은 정보이며 반환값의 일부 등이 포함됩니다.
sequenceIdoptional<integer>같은 eventId를 공유하는 이벤트의 최선 추정 순서입니다.
serviceoptional<string>로그를 만든 서비스입니다. 같은 제품의 서로 다른 인스턴스를 구분하는 데 쓸 수 있습니다.
sidoptional<SessionId>알 수 있는 경우 세션 ID입니다.
sourceOriginoptional<string>TCP 스택에서 결정한 네트워크 요청 출처입니다.
stackoptional<string>로그가 생성된 스택입니다.
timedatetimeRFC3339Nano 형식의 UTC 시각 문자열입니다. 예: 2025-11-13T23:20:24.180Z.
tokenIdoptional<TokenId>알 수 있는 경우 API 토큰 ID입니다.
traceIdoptional<TraceId>알 수 있는 경우 Zipkin trace ID입니다.
uidoptional<UserId>호출 체계에서 가장 하류 호출자의 사용자 ID입니다.
userAgentoptional<string>로그를 유발한 요청의 user agent입니다.
usersset<ContextualizedUser>해당 로그에 등장하는 모든 사용자입니다.

type 최상위 필드는 audit.2 또는 audit.3처럼 로그 형식을 구분하는 데 사용할 수 있습니다. Foundry 내보내기 데이터셋의 date 파티션 열은 이벤트 본문의 time과 구분합니다.

사용자 정보

ContextualizedUser의 구조에는 다음 필드가 있습니다.

필드자료형
uidUserId
userNameoptional<string>
firstNameoptional<string>
lastNameoptional<string>
groupslist<string>
realmoptional<string>

현재 audit.3 전달 과정에서는 uid만 채우며 userName, firstName, lastName과 realm은 설정하지 않고 groups는 항상 빈 목록입니다. 낮은 지연의 전달 과정에서 신원 제공자를 실시간 조회하지 않기 때문입니다. 사용자 프로필이 필요하면 하류 파이프라인에서 사용자 디렉터리 데이터와 연결해 보강합니다. 빈 groups를 사용자가 실제로 어떤 그룹에도 속하지 않았다는 증거로 해석하면 안 됩니다.

사용자 요청과 API gateway 추적

origins가 비어 있지 않은 로그는 사용자 시작 요청을 찾는 기준입니다. 비어 있는 로그는 그 요청을 수행하는 과정에서 Palantir 백엔드가 시작한 서비스 요청에 해당합니다.

origins가 있고 categories에 apiGatewayRequest가 있으면 API gateway가 사용자 요청을 처리한 것입니다. 실제 하류 작업을 찾으려면 같은 traceId를 가진 로그 중 userAgent가 그 gateway 로그의 service 이름으로 시작하는 항목을 확인합니다.

origin과 origins는 위조될 수 있으므로 단독 신원 증거로 사용하지 않습니다. eventId는 여러 행을 한 사건으로 묶고, logEntryId는 같은 행의 중복을 제거하는 데 사용합니다. 서로 대체하지 않습니다.

과거 audit.2 필드

Audit.2에는 제품 간 요청 및 결과 구조의 공통 보장이 없습니다. 범주가 있다면 request_params 안의 _category 또는 _categories에 들어가지만, 범주 자체가 없을 수도 있습니다.

필드자료형의미
filename.log.gz 파일명아카이브의 압축 로그 파일 이름입니다.
ipstring발신 IP의 최선 추정값입니다.
namestringPUT_FILE 같은 이벤트 이름입니다.
request_paramsmap<string, any>호출 시점에 알려진 파라미터입니다.
resultAuditResult성공 또는 실패 등의 결과입니다.
result_paramsmap<string, any>실행 중 얻은 정보와 반환값 일부입니다.
sidoptional<SessionId>세션 ID입니다.
timedatetimeRFC3339Nano UTC 시각 문자열입니다.
token_idoptional<TokenId>API 토큰 ID입니다.
trace_idoptional<TraceId>Zipkin trace ID입니다.
typestringaudit.2입니다.
uidoptional<UserId>가장 하류 호출자의 사용자 ID입니다.

두 스키마의 필드 이름을 바꾸는 것만으로 같은 의미의 데이터가 되는 것은 아닙니다. 전환 절차에서 상세 필드의 이동, 과거 이력과 중복 기간을 고려합니다.