search

입력 레코드를 필터 조건식으로 평가하여, 조건에 일치하는 레코드만 출력합니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한없음
라이선스 사용량해당 없음
병렬 실행지원
분산 실행미지원

문법

search [limit=N] EXPR

옵션

limit=N
출력할 최대 레코드 수. 조건에 일치하는 레코드가 지정한 수에 도달하면 이후 입력을 무시합니다.

대상

EXPR
필터 조건식. 논리 연산자(and, or, not)와 비교 연산자(==, !=, >, >=, <, <=)를 사용하여 조건을 조합할 수 있습니다. 와일드카드(*)를 사용한 문자열 매칭을 지원합니다.
  • and: 두 조건이 모두 참인 레코드를 출력합니다.
  • or: 두 조건 중 하나 이상 참인 레코드를 출력합니다.
  • not: 뒤따르는 조건을 부정합니다. and, or와 달리 단항 접두사로 사용합니다.

not은 단일 조건 앞에 붙여 사용하며, 복합 조건을 부정하려면 괄호로 감싸야 합니다.

json "[{'status': 200}]" | search not status == 403
json "[{'src_ip': '192.0.2.1', 'status': 500}]" | search not (src_ip == "192.0.2.1" and status >= 400)

is null, not null 연산자로 널 여부를 검사할 수 있습니다.

json "[{'dst_ip': '192.0.2.1'}]" | search src_ip is null
json "[{'src_ip': '192.0.2.1'}]" | search src_ip not null

출력 필드

입력된 레코드의 모든 필드가 그대로 출력됩니다. search 명령어는 필드를 추가하거나 제거하지 않습니다.

오류 코드

파싱 오류

해당 사항 없음

런타임 오류

해당 사항 없음

설명

search 명령어는 각 입력 레코드에 대해 조건식을 평가하고, 결과가 참인 레코드만 다음 명령어로 전달합니다. 조건식이 거짓이거나 null을 반환하는 레코드는 출력하지 않습니다.

  • 필터링만 수행: 새로운 필드를 생성하거나 기존 필드를 변경하지 않습니다. 필드를 추가하려면 eval 명령어를 사용하세요.
  • 조기 종료: limit 옵션으로 지정된 개수의 레코드가 필터링되면 입력 데이터를 더 이상 처리하지 않고 쿼리가 완료됩니다.
  • null 처리: 입력 필드가 없거나 null인 경우 표현식은 거짓으로 평가되어 해당 레코드는 필터링됩니다.
필터 전용 연산자

search 명령어는 일반 표현식에서 사용할 수 없는 필터 전용 연산자를 추가로 지원합니다. 이 연산자들은 search 명령어의 조건식에서만 사용할 수 있으며, eval 등 다른 명령어에서는 사용할 수 없습니다.

연산자설명문법예시
contain부분 문자열 포함필드 contain 값search message contain "error"
regexp정규 표현식 매칭필드 regexp "패턴"search message regexp "^ERROR.*"
in목록 포함 여부필드 in 값1,값2,...search status in 400,403,500
is null널 검사필드 is nullsearch src_ip is null
not null널 아님 검사필드 not nullsearch src_ip not null

다른 명령어에서 동일한 기능이 필요하면 함수를 사용하세요. containcontains(), regexpmatch(), is nullisnull(), not nullisnotnull()로 대체할 수 있습니다.

사용 예

이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.

  1. 특정 HTTP 상태 코드로 필터링

    table WEB_APACHE_SAMPLE | search status == 403
    

    HTTP 상태 코드가 403(금지됨)인 접근 요청만 필터링합니다.

  2. 대용량 응답을 반환하는 요청으로 필터링

    table WEB_APACHE_SAMPLE | search bytes >= 1000000
    

    응답 크기가 1MB 이상인 대용량 요청을 필터링합니다.

  3. 특정 URI 패턴으로 필터링

    table WEB_APACHE_SAMPLE | search uri == "/admin/*"
    

    URI가 /admin/으로 시작하는 요청만 필터링합니다.

  4. 복합 조건으로 의심 활동 식별

    table WEB_APACHE_SAMPLE | search (src_ip == "203.0.113.15" or src_ip == "203.0.113.89") and status >= 400
    

    특정 IP 주소(203.0.113.15 또는 203.0.113.89)에서 발생한 오류 상태(400 이상)의 요청을 필터링합니다.

  5. limit 옵션으로 상위 이벤트 추출

    table WEB_APACHE_SAMPLE | search limit=10 status == 500
    

    HTTP 상태 코드가 500(서버 오류)인 레코드 중 처음 10개를 추출한 후 쿼리가 완료됩니다.

  6. 봇 트래픽 제외하기

    table WEB_APACHE_SAMPLE | search not contains(agent, "bot")
    

    agent 필드에 "bot"을 포함하지 않는 요청만 추출합니다.

호환성

search 명령어는 소나 4.0 이전 버전부터 제공되었습니다.