콘텐츠로 이동

검색


탐색기 검색창은 텍스트 검색, 필드 필터링, JSON 검색 및 함수 쿼리를 지원합니다. DQL 모드로 전환하여 전체 쿼리문을 작성할 수도 있습니다.

검색 방식 선택

쿼리 요구사항 사용 방식 예시
텍스트 내용 검색 텍스트 검색 connection timeout
연속 구문 검색 구문 검색 "connection timeout"
필드 및 값 기준 필터링 필드 필터링 service:api
JSON 내장 필드 검색 JSON 검색 @meta.service:api
MD5 마스킹 데이터 검색 MD5 함수 쿼리 아래 참조
IP 대역 검색 CIDR 함수 쿼리 CIDR(@client_ip, 10.0.0.0/8)
복잡한 쿼리 또는 계산 실행 DQL 쿼리 L::logs:(*) {...}
검색과 필터링

텍스트를 직접 입력하면 시스템이 텍스트 검색을 수행하고, 필드명:필드값 형식을 사용하면 시스템이 필드 필터링을 수행합니다. 예를 들어 error timeout은 텍스트 검색에 사용되고, service:apiservice 필드를 필터링하는 데 사용됩니다.

조합 검색

로그 탐색기는 검색창 드롭다운 목록에서 AND, OR 등 자주 사용되는 조합 연산자를 제안합니다.

  • AND: 앞뒤 두 조건을 모두 충족해야 합니다.
  • OR: 앞뒤 조건 중 하나만 충족하면 됩니다.
  • 조합 연산자는 반드시 대문자를 사용해야 합니다.
  • 소문자 and, or는 일반 텍스트로 간주되어 검색에 포함됩니다.

예시:

service:api AND status:error
source:nginx OR source:apache
(service:api OR service:web) AND status:error

텍스트 검색

탐색기 텍스트 검색은 search() 쿼리 구문을 사용합니다. 시스템은 입력 내용을 토큰화하고 모든 토큰을 포함하는 데이터를 검색합니다.

  • 한자는 문자 단위로 토큰화됩니다.
  • 영어는 공백, 구두점 등 단어 경계를 기준으로 토큰화됩니다.
  • 영어 검색은 대소문자를 구분하지 않습니다.
  • 각 토큰이 연속적으로 나타날 필요는 없습니다.

토큰 검색

텍스트를 입력하면 시스템이 자동으로 토큰화합니다. 데이터에 모든 토큰이 포함되어 있으면, 토큰 사이에 다른 내용이 있더라도 검색 결과로 조회될 수 있습니다.

한국어 예시:

입력: 사과를 좋아해요

가능한 일치:
- 나는 사과를 좋아해요
- 나는 사과를 매우 좋아해요
- 사과는 내가 좋아하는 과일이에요

위 결과는 모두 검색어의 모든 유효한 토큰을 포함하며, 이러한 토큰이 연속적으로 나타날 필요는 없습니다.

영어 예시:

입력: connection timeout

가능한 일치:
- connection timeout
- Connection retry timeout
- connection request failed due to timeout

위 결과는 모두 "connection"과 "timeout"을 동시에 포함하며, 토큰이 연속적으로 나타날 필요가 없고 대소문자를 구분하지 않습니다.

구문 검색

완전하고 연속적인 구문으로 검색해야 하는 경우 영문 반각 따옴표 "로 검색어를 감쌀 수 있습니다.

  • "사과를 좋아해요": "사과를 좋아해요, 바나나도 좋아해요"와 일치하지만 "나는 사과를 매우 좋아해요"와는 일치하지 않습니다.
  • "connection timeout": "connection timeout occurred"와 일치하지만 "connection retry timeout"과는 일치하지 않습니다.
불용어

자주 나타나지만 검색에 도움이 되지 않는 일부 단어는 전체 텍스트 인덱스에서 제외됩니다. 검색 결과가 예상과 다를 경우 전체 텍스트 인덱스 불용어 목록을 확인하세요.

JSON 검색

전제 조건
  • 워크스페이스가 2022년 6월 23일 이후에 생성되었습니다.
  • 로그 탐색기에서 사용됩니다.

JSON 검색은 로그 message의 내장 필드를 쿼리하는 데 사용되며, message는 유효한 JSON 형식이어야 합니다. 쿼리 형식은 @필드명:필드값이며, 중첩된 필드를 쿼리할 때는 .를 사용하여 각 계층의 필드명을 연결합니다.

예를 들어, message 내용이 다음과 같을 때:

{
  "__namespace": "tracing",
  "cluster_name_k8s": "k8s-demo",
  "meta": {
    "service": "ruoyi-mysql-k8s",
    "name": "mysql.query"
  }
}

다음 조건을 사용하여 쿼리할 수 있습니다:

@cluster_name_k8s:k8s-demo       # 정확히 일치
@cluster_name_k8s:k?s*           # 와일드카드 일치
@meta.service:ruoyi-mysql-k8s    # 중첩 필드 쿼리
@meta.service:ruoyi?mysql*       # 중첩 필드 와일드카드 일치

여기서 *는 0개 이상의 문자와 일치하고, ?는 1개의 문자와 일치합니다. 이 와일드카드는 필드 필터링에만 사용되며, 일반 텍스트 검색에는 적용되지 않습니다.

필드명에 . 포함

JSON 검색에서 .는 기본적으로 중첩 필드 계층을 의미합니다. 필드명 자체에 .가 포함된 경우 백슬래시 \를 사용하여 이스케이프해야 합니다.

시나리오 올바른 작성법 설명
중첩 필드 log.tag 쿼리 @log.tag:error .는 필드 계층을 의미
필드명 user.id 쿼리 @user\.id:1001 \.를 필드명의 일부로 이스케이프

필드명을 따옴표로 묶는 방식(예: @"user.id":1001)은 지원되지 않습니다.

MD5 함수 쿼리

민감 데이터 스캔 규칙이 MD5 암호화를 사용하는 경우, 원본 값은 되돌릴 수 없는 32자리 16진수 문자열로 대체됩니다. 마스킹된 데이터를 원본 값으로 찾아야 할 때 탐색기에서 MD5 함수 쿼리를 사용할 수 있습니다.

쿼리 형식:

필드명:md5|원본값

예를 들어, color 필드의 원본 값 red가 MD5로 암호화된 경우 다음과 같이 입력할 수 있습니다:

color:md5|red

시스템은 red의 MD5 값을 계산하여 color 필드에 저장된 해시 값과 비교합니다. MD5는 대소문자와 공백을 구분하므로 입력 내용이 암호화 전의 원본 값과 완전히 일치하는지 확인하세요.

MD5 암호화는 되돌릴 수 없으므로 해시 값을 통해 원본 내용을 복원할 수 없습니다. 자세한 내용은 민감 데이터 스캔을 참조하세요.

DQL 쿼리

함수, 표현식, 집계 또는 복잡한 필터 조건이 필요한 경우 검색창 오른쪽의 DQL 버튼을 클릭하여 DQL 쿼리 모드로 전환할 수 있습니다:

시스템은 현재 탐색기에 따라 해당 데이터 유형과 데이터 소스를 자동으로 가져옵니다. 예를 들어, 다음 DQL 쿼리는 최근 1시간 동안 messageconnection timeout이 포함된 로그를 검색합니다:

L("default")::logs:(message) {search(message, "connection timeout")} [1h]
  • L은 로그 데이터를 의미합니다.
  • "default"는 로그 인덱스를 의미합니다.
  • logs는 데이터 소스를 의미합니다.
  • [1h]는 최근 1시간 데이터를 쿼리함을 의미합니다.

DQL 모드로 전환한 후에는 완전한 DQL 문을 사용해야 합니다. 탐색기마다 해당 데이터 유형이 다르며, 현재 탐색기에서 다른 데이터 유형으로 전환할 수 없습니다.

로그 탐색기 분석 모드

로그 탐색기에서 고급 쿼리와 페이지 분석 설정을 함께 사용할 때, 쿼리문에 BY 그룹 조건이 포함된 경우 페이지는 BY를 무시하고 페이지에서 설정된 분석 차원을 우선 적용하여 중복되거나 충돌하는 그룹 조건을 방지합니다.

CIDR 함수 쿼리

CIDR 함수는 지정된 IP 필드에서 특정 네트워크 대역에 속하는 데이터를 쿼리하는 데 사용되며, 문자열 일치가 아닌 네트워크 대역 범위 일치를 수행합니다.

CIDR은 네트워크 주소와 프리픽스 길이로 구성됩니다(예: 13.0.0.0/8). 프리픽스 길이가 클수록 일치하는 주소 범위는 작아지며, IPv4에서 /32는 하나의 IP 주소만 일치합니다.

쿼리 형식:

CIDR(@필드명, IP네트워크대역)

예를 들어, network.client.ip 필드에서 13.0.0.0/8 네트워크 대역에 속하는 데이터를 쿼리하려면:

CIDR(@network.client.ip, 13.0.0.0/8)
일치 가능:
- 13.0.0.1
- 13.100.20.5
- 13.255.255.255

일치하지 않음:
- 12.255.255.255
- 14.0.0.1

단일 IPv4 주소를 정확히 일치시켜야 하는 경우 /32를 사용할 수 있습니다:

CIDR(@network.client.ip, 13.10.20.30/32)

필드 값이 비어 있거나, 형식이 잘못되었거나, 유효한 IP 주소가 아닌 경우 일치하지 않습니다.

DQL 모드에서는 소문자 cidr() 함수를 사용하고 네트워크 대역을 따옴표로 묶을 수 있습니다:

L::nginx:(*) {cidr(client_ip, "13.0.0.0/8")} [1h]

검색 기록

로그 탐색기의 인덱스 선택 기록은 검색 및 필터 조건 기록과 별도로 관리되며, 로그 인덱스 검색창 오른쪽에 있는 기록 아이콘을 통해 열 수 있습니다.

현재 사용자는 로컬 브라우저에서 최근에 사용한 검색 및 필터 조건을 확인할 수 있으며, 최대 100개까지 보관됩니다. 기록 조건을 클릭하면 현재 탐색기에서 재사용할 수 있습니다.

검색 기록 통합 규칙

탐색기는 플랫폼 내 공통 도구로서 여러 기능에 적용되며, 기능 간 검색 기록 상호 운용성에는 몇 가지 차이점이 있습니다:

  • RUM > Session/View/Resource/Action/Long Task/Error 여섯 가지 탐색기의 검색 기록이 상호 운용됩니다.
  • 컨테이너 탐색기와 Kubernetes 탐색기의 검색 기록이 상호 운용됩니다.
  • 리소스 카탈로그 탐색기의 검색 기록이 상호 운용됩니다.
  • 로그 탐색기와 로그 오류 추적 탐색기의 검색 기록이 상호 운용됩니다.
  • 분산 추적 탐색기, APM 오류 추적, 프로파일링 탐색기의 검색 기록이 상호 운용됩니다.

위 경우를 제외한 나머지 탐색기는 각각 검색 기록을 별도로 저장합니다.

더 읽어보기

문서 평가

이 페이지가 도움이 되었나요?