고급 검색 (Advanced Search)
로그 검색 결과를 더 세밀하게 다듬거나, 분석과 모니터링을 위한 맞춤 데이터셋을 만들고 싶을 때가 있어요. 그럴 땐 서브쿼리를 이용해 다른 로그 그룹과 결과를 비교하거나, Reference Table의 데이터를 이용해 로그를 필터링할 수 있어요.
출처: 문서
본문
고급 검색 옵션은 Log Explorer와 로그 모니터에서 사용할 수 있어요.
서브쿼리로 로그 필터링하기
결과를 보조 쿼리의 결과를 기준으로 필터링하고 싶을 때 서브쿼리를 사용해요. 두 가지 예시 시나리오에 대한 서브쿼리 예제를 살펴볼게요.
서브쿼리 필터를 추가하는 방법:
- Log Explorer로 이동해요.
- 검색창에 쿼리를 입력해 로그를 필터링해요. 이게 메인 쿼리예요.
- + Add를 클릭해요.
- Add Query Filter 섹션에서 Logs를 선택해요.
그러면 쿼리 편집기에 새로운 요소가 생겨요:
- where 필드에서 드롭다운 메뉴를 이용해 상관 관계를 맺을 속성을 선택해요. 선택할 수 있는 속성은 메인 쿼리에서 반환된 로그에서 나와요.
- from 필드에서 서브쿼리 필터를 정의해요.
- 서브쿼리 필터 앞에 있는 Select Column 드롭다운 메뉴에서, 서브쿼리 결과를 그룹화하고 정렬할 속성을 선택해요.
- IN 또는 NOT IN 연산자 중 무엇을 사용할지 선택해요:
- IN 연산자의 결과는 속성 값이 서브쿼리 결과에도 들어 있는 로그만 포함해요. 예를 들어
service:a가 만든 로그만 보되,service:b의 상위 사용자이기도 한 사용자와 연관된 로그만 보고 싶을 때 써요. - NOT IN 연산자의 결과는 속성 값이 서브쿼리 결과에 들어 있는 로그를 제외해요. 예를 들어
status:error로그만 보되, 그 로그와 연관된 사용자가 결국status:success로그까지 도달하는 경우는 걸러내고 싶을 때 써요. 자세한 예시는 '오래되거나 대체된 로그 필터링하기'를 참고해요.
- IN 연산자의 결과는 속성 값이 서브쿼리 결과에도 들어 있는 로그만 포함해요. 예를 들어
- 선택적으로, 매칭할 서브쿼리 속성 값의 개수를 줄일 수 있어요. 기본값은
1000이고 최댓값은1,000,000이에요. top(빈도가 가장 높은 값) 또는 bottom(빈도가 가장 낮은 값) 중에서 선택할 수 있어요.
서브쿼리 예시
로그에서 필요한 정보를 얻으려고 서브쿼리를 사용해야 하는 시나리오를 소개할게요.
오래되거나 대체된 로그 필터링하기
이커머스 플랫폼을 운영한다고 가정해 볼게요. 고객이 주문을 시도할 때마다 로그가 생성돼요. 웹사이트의 지속적인 문제로 인해 잃어버린 잠재 구매의 총액을 이해하려고 로그를 분석하고 싶어요.
그런데 주문은 성공적으로 완료되기 전에 여러 번 실패할 수 있다는 점을 알게 돼요. 즉 특정 주문 ID에 대해 검색 결과에 status:error 로그와 status:success 로그가 모두 존재할 수 있어요. 두 쿼리에서 고유 주문 ID 목록을 추출하면 이 주문 ID가 둘 다에 나타나게 되는 거죠. 서브쿼리를 쓰면 이 목록을 상호 배타적으로 만들 수 있어요.
이 예시에서는 결국 성공하지 못한 주문의 로그에만 관심이 있어요. 서브쿼리 기능으로 결국 성공한 주문을 제외하려면:
status:success로그에 대한 서브쿼리를 정의해요.- NOT IN 연산자를 선택해 서브쿼리 결과 집합에 있는 주문을 제외해요.
서로 다른 로그 소스 간 상관 관계 맺기
network_directory라는 서비스가 조직 내 모든 내부 네트워크 리소스와 그 리소스에 대한 접근을 모니터링한다고 가정할게요. 이 서비스가 만든 로그 이벤트에는 표준 속성(host, service, source 등)과 클라이언트 IP 주소 같은 커스텀 속성이 포함돼요.
또한 모든 내부 자산(인프라, 직원 기기 등)을 추적하는 device-manager 서비스도 있다고 해볼게요.
진행 중인 공격을 조사하고 있는데 거의 모든 엔드포인트에서 API 요청이 크게 증가한 걸 관찰했어요. 이상 요청 볼륨과 연관된 IP 주소를 먼저 식별해서 방화벽 수준에서 차단하고 싶어요. 하지만 내부 서비스가 이 엔드포인트의 가장 큰 소비자 중 하나라서, 실수로 차단하지 않도록 쿼리 결과에서 제외해야 해요.
이 예시에서는 service:network_directory를 메인 쿼리로 사용하고, device-manager 서비스에 대한 서브쿼리 필터를 정의해 인식된 기기의 결과를 필터링해요.
Reference Table 기반으로 로그 필터링하기
⚠️ 1,000,000행이 넘는 Reference Table은 이벤트 필터링에 사용할 수 없어요. Reference Table을 만들고 관리하는 방법에 대한 자세한 내용은 커스텀 메타데이터를 Reference Table로 추가하기를 참고해요.
Reference Table을 사용하면 메타데이터를 로그와 결합해 애플리케이션 문제를 해결하는 데 더 많은 정보를 얻을 수 있어요. 조회 쿼리를 수행하려면 Reference Table 기반의 쿼리 필터를 추가해요. 이 기능을 만들고 관리하는 방법은 Reference Tables를 참고해요.
Reference Table로 쿼리 필터를 적용하려면 쿼리 편집기 옆의 Add 버튼을 클릭하고 Join with Reference Table을 선택해요.
- 드롭다운 메뉴에서 reference table을 선택해요.
- 조인할 로그 필드를 선택해요.
- IN 또는 NOT IN 연산자를 선택해 매칭되는 로그를 포함하거나 제외해요.
- 조인할 Reference Table 컬럼을 선택해요.
- (선택) 로그를 보강하는 데 사용할 Reference Table 컬럼을 선택해요.
- (선택) Reference Table 컬럼의 데이터를 직접 쿼리해 로그를 필터링해요.
다음 예시에서는 제품 정보가 담긴 Reference Table을 사용해 로그를 필터링하고 보강하고 있어요: