log
스키마, 모델 또는 수집기를 지정하여 로그를 검색합니다. 검색 대상 테이블은 지정한 조건에 해당하는 수집기의 저장 테이블에서 자동으로 결정되므로, 테이블 이름을 직접 알지 못해도 로그를 조회할 수 있습니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 테이블 읽기 권한 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 수집 노드에서 실행 (mapper) |
문법
SEARCH_EXPR- 검색 조건식(선택). 필드 비교 연산자(
==,!=,<,<=,>,>=)와 논리 연산자(and,or,not)로 필드 값 조건을 조합합니다. 예:src_ip == "203.0.113.10" and dst_port == 443.range(),iprange()등 색인 검색 함수도 사용할 수 있습니다. 생략하면 조건 없이 대상 테이블의 모든 로그를 반환합니다.
옵션
schema=STR(필수)- 검색할 로그 스키마 코드. 등록되지 않은 코드를 지정하면 오류(300149)가 발생합니다.
duration=INT{s|m|h|d|mon}- 현재 시각으로부터 일정 시간 범위 이내의 로그로 한정합니다.
s(초),m(분),h(시),d(일),mon(월) 단위를 사용합니다. 예를 들면,10s는 현재 시각으로부터 10초 이전까지의 범위를 의미합니다.from옵션을 함께 지정하면from값이 우선 적용됩니다. from=DATE- 조회 범위의 시작 시각.
yyyyMMddHHmmss형식으로 입력하며, 뒷자리를 생략하면 0으로 채워집니다. to=DATE- 조회 범위의 끝 시각.
yyyyMMddHHmmss형식으로 입력하며, 뒷자리를 생략하면 0으로 채워집니다. model=STR- 검색 대상을 좁힐 수집 모델의 GUID 또는 이름. 쉼표로 구분하여 여러 개를 지정할 수 있습니다.
source옵션과 함께 사용할 수 없습니다. source=STR- 검색 대상을 좁힐 수집기의 GUID 또는 이름. 쉼표로 구분하여 여러 개를 지정할 수 있습니다.
model옵션과 함께 사용할 수 없습니다. alias=BOOL- 스키마에 정의된 필드 이름을 표시 이름으로 변환할지 여부 (기본값:
f).t또는true로 지정하면 활성화합니다(대소문자 구분).
입력 필드
없음 (쿼리 플래너가 실행 전에 항상 table 또는 fulltext 명령어로 치환하므로, log 명령어 자체는 실행되지 않습니다)
출력 필드
없음. 재작성된 table 또는 fulltext 명령어가 대상 테이블에 저장된 필드를 그대로 출력합니다. alias=t이고 스키마에 필드가 정의되어 있으면 필드 이름이 표시 이름으로 바뀌고 스키마에 정의된 필드만 남으며, alias를 지정하지 않으면 필드 이름은 그대로 두고 _table 필드를 맨 앞에 둔 뒤 스키마에 정의된 필드 순서로 그 뒤에 재배치합니다(그 외 필드는 뒤에 유지).
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 300148 | schema 옵션을 지정하세요. | schema 옵션을 지정하지 않은 경우 |
| 300149 | 지정된 로그 스키마가 존재하지 않습니다. | schema 옵션 값에 해당하는 로그 스키마가 없는 경우 |
| 300150 | model과 source 옵션을 동시에 지정할 수 없습니다. | model과 source 옵션을 함께 지정한 경우 |
| 300151 | 조건식에 예상치 못한 항목이 있습니다. | 검색 조건식에 예상치 못한 토큰이 있는 경우 |
| 300152 | 조건식에 파싱되지 않은 토큰이 있습니다. | 검색 조건식 파싱 후 처리되지 않은 토큰이 남은 경우 |
| 300153 | 조건식의 괄호가 일치하지 않습니다. | 검색 조건식의 소괄호 짝이 맞지 않는 경우 |
| 300154 | 조건식의 따옴표가 일치하지 않습니다. | 검색 조건식의 따옴표 짝이 맞지 않는 경우 |
| 300155 | 조건식의 대괄호가 일치하지 않습니다. | 검색 조건식의 대괄호 짝이 맞지 않는 경우 |
| 300156 | 조건식에 잘못된 이스케이프 문자가 있습니다. | 검색 조건식에 잘못된 이스케이프 시퀀스가 있는 경우 |
| 300157 | 조건식에 지원하지 않는 표현식 타입이 있습니다. | 연산자 없는 단일 식별자만 입력하는 등 지원하지 않는 표현식을 사용한 경우 |
| 300158 | 조건식에 지원하지 않는 연산자가 있습니다. | 검색 조건식에 지원하지 않는 연산자를 사용한 경우 |
| 300159 | 조건식 형식이 올바르지 않습니다. | 그 외 검색 조건식의 형식이 올바르지 않은 경우 |
런타임 오류
해당 사항 없음
설명
log 명령어는 로그 스키마, 수집 모델, 수집기 세 가지 방식으로 검색 대상 테이블을 결정합니다.
model옵션을 지정하면 해당 수집 모델에schema옵션과 일치하는 추출기(extractor)가 하나라도 있는지 모델 단위로 판정합니다. 일치하는 추출기가 있으면 그 모델을 사용하는 모든 수집기의 테이블을 대상으로 하고(수집기별로 추출기를 다시 대조하지 않음), 없으면 해당 모델은 대상에서 제외됩니다.source옵션을 지정하면 해당 수집기의 테이블을 대상으로 합니다.- 둘 다 지정하지 않으면
schema옵션과 일치하는 로그 스키마를 사용하는 모든 수집기의 테이블을 대상으로 합니다.
대상 테이블이 하나도 없으면(예: 조건에 맞는 수집기가 없는 경우) 오류 없이 빈 결과를 반환합니다. schema 옵션은 명령어를 파싱하는 시점에 존재 여부를 검사하지만(300149), 실행 직전 쿼리 플래너가 재작성하는 시점에 다시 한번 스키마를 조회합니다. 이 시점에 스키마를 찾을 수 없으면(예: 파싱 이후 스키마가 삭제된 경우) 오류를 발생시키지 않고 빈 결과를 반환합니다.
log 명령어는 실행되지 않고, 쿼리 플래너(LogCommandRewritingPlanner)가 항상 다음 두 형태 중 하나로 치환한 뒤 그 명령어가 실제로 실행됩니다.
schema=session이고 검색 조건식을 지정하지 않은 경우: 대상 테이블에 대한table명령어로 치환하고, 뒤에search _schema == "session"조건을 추가합니다.- 그 외의 경우(검색 조건식을 지정했거나
session스키마가 아닌 경우): 검색 조건식과_schema조건을 결합한fulltext명령어로 치환합니다.
이렇게 재작성된 table 또는 fulltext 명령어가 실제로 실행되므로, 테이블 읽기 권한은 log 명령어 자체가 아니라 재작성된 명령어의 실행 계층에서 강제됩니다. fulltext로 재작성되는 경우와 table로 재작성되는 경우 모두, 읽기 권한이 없는 테이블은 오류 없이 검색 대상에서 조용히 제외됩니다. 권한이 없는 테이블의 로그는 결과에 나타나지 않지만 오류 메시지가 표시되지 않으므로, 결과가 비어 있거나 예상보다 적으면 대상 테이블의 읽기 권한을 먼저 확인하세요. 계정별 테이블 읽기 권한 부여 현황은 sonar-users의 granted_tables 출력 필드로 확인할 수 있습니다.
사용 예
-
스키마만 지정하여 검색
log schema="session"session스키마를 사용하는 모든 수집기의 최근 로그를 검색합니다. -
기간과 검색 조건식을 지정하여 검색
log schema="session" duration=1h src_ip == "203.0.113.10"최근 1시간 이내에 수집된
session스키마 로그 중 출발지 IP가203.0.113.10인 로그만 검색합니다. -
특정 수집기로 범위를 좁혀 검색
log schema="session" source="fw-edge-01" from=20260801 to=20260802fw-edge-01수집기가 수집한session스키마 로그 중 2026년 8월 1일 하루치만 검색합니다. -
필드 표시 이름으로 변환하여 검색
log schema="session" alias=t duration=1d최근 하루 동안의
session스키마 로그를 검색하고, 필드 이름을 스키마에 정의된 표시 이름으로 변환하여 스키마에 정의된 필드만 반환합니다.
변경 이력
log 명령어는 소나 4.0.2609.0 버전부터 사용 가능합니다.
이 명령어는 실험실(Lab) 앱이 제공하던 것을 소나 코어에 내장한 것입니다(SNR#3463). 내장되지 않은 버전에서는 실험실 앱을 설치해 사용할 수 있습니다.