검색¶
탐색기 검색창은 토큰 검색, 구문 검색, 필드 필터, JSON 검색 및 함수 쿼리를 지원합니다. DQL 모드로 전환하여 전체 쿼리문을 작성할 수도 있습니다.
검색 방식 선택¶
| 쿼리 요구 사항 | 사용 방식 | 예시 |
|---|---|---|
| 텍스트 내용 검색 | 텍스트 검색 | connection timeout |
| 연속 구문 검색 | 구문 검색 | #"connection timeout" |
| 필드 및 값 필터 | 필드 필터 | service:api |
| JSON 내장 필드 검색 | JSON 검색 | @meta.service:api |
| MD5 마스킹 데이터 검색 | MD5 함수 쿼리 | color:md5(red) |
| IP 네트워크 검색 | CIDR 함수 쿼리 | CIDR(@client_ip, 10.0.0.0/8) |
| 복잡한 쿼리 또는 계산 수행 | DQL 쿼리 | L::logs:(*) {...} |
검색과 필터
텍스트를 직접 입력하면 시스템이 토큰 검색을 수행합니다. 따옴표 앞에 #을 추가하면 구문 검색을 수행합니다. 필드명:필드값 형식을 사용하면 필드 필터를 수행합니다. 예를 들어 error timeout은 토큰 검색, #"error timeout"은 연속 구문 검색, service:api는 service 필드 필터에 사용됩니다.
조합 검색¶
로그 탐색기는 검색창 드롭다운 목록에서 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"는 일치하지 않습니다.
탐색기는 다음 구문 작성을 지원합니다.
| 작성법 | 설명 | 변환된 DQL 조건 |
|---|---|---|
#"connection timeout" |
권장 작성법 | search('#"connection timeout"') |
#'connection timeout' |
작은따옴표 호환 작성법 | search('#"connection timeout"') |
#“connection timeout” |
중국어 따옴표 호환 작성법 | search('#"connection timeout"') |
#은 구문 검색 연산자이며 검색 내용에 포함되지 않습니다. 따옴표만 사용하고 #을 추가하지 않으면 구문 검색이 활성화되지 않습니다. 따옴표는 쌍으로 사용해야 하며 구문은 비어 있을 수 없습니다. 닫히지 않은 #"connection timeout, #'connection timeout 및 빈 구문 #"", #''은 유효한 쿼리로 실행되지 않습니다.
구문 검색은 필드 필터 및 조합 연산자와 함께 사용할 수 있습니다.
여기서 -#"health check"는 해당 연속 구문을 포함하는 데이터를 제외함을 의미하며, DQL 조건 not search('#"health check"')에 해당합니다. 표준 모드에서 DQL 모드로 전환하면 호환 작성법은 #"..." 형식의 DQL 구문으로 일괄 변환됩니다. 표준 모드로 다시 전환할 때 백슬래시 이스케이프 문자가 누적되지 않습니다.
불용어
검색에 의미가 거의 없는 빈번하게 나타나는 일부 단어는 전체 텍스트 인덱스에 포함되지 않습니다. 검색 결과가 예상과 다를 경우 전체 텍스트 인덱스 불용어 목록을 참조하세요.
JSON 검색¶
전제 조건
- 워크스페이스가
2022년 6월 23일이후에 생성된 경우 - 로그 탐색기에서 사용
JSON 검색은 로그 message의 내장 필드를 쿼리하는 데 사용되며, message는 유효한 JSON 형식이어야 합니다. 쿼리 형식은 @필드명:필드값입니다. 중첩 필드를 쿼리할 때는 .을 사용하여 각 계층의 필드명을 연결합니다.
@meta.service:api를 예로 들면 다음과 같습니다.
| 구성 요소 | 의미 |
|---|---|
@ |
JSON 필드 접두사, 탐색기가 연산자로 인식합니다. |
meta.service |
message의 중첩 필드 경로 |
: |
필드와 값의 구분자 |
api |
일치시킬 필드값 |
예를 들어 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 함수 쿼리를 사용할 수 있습니다.
함수 형식 사용을 권장합니다.
예를 들어 color 필드의 원본 값 red가 MD5 해시로 변환된 경우 다음을 입력할 수 있습니다.
시스템은 이를 다음 DQL 조건으로 변환합니다.
탐색기는 md5와 괄호를 함수 구문으로 인식합니다. 기존 쿼리와의 호환성을 위해 이전 작성법인 color:md5|red도 계속 사용할 수 있으며 동일한 DQL 조건을 생성합니다. 함수 매개변수는 비어 있을 수 없습니다. MD5는 대소문자와 공백을 구분하므로 입력 내용이 암호화 전 원본 값과 완전히 일치하는지 확인하세요.
MD5는 단방향 해시 알고리즘이므로 해시 값에서 원본 내용을 복원할 수 없습니다. 자세한 내용은 민감 데이터 스캔을 참조하세요.
DQL 쿼리¶
함수, 표현식, 집계 또는 복잡한 필터 조건이 필요한 경우 검색창 오른쪽의 DQL 버튼을 클릭하여 DQL 쿼리 모드로 전환할 수 있습니다.
표준 모드의 검색 조건은 모드 전환 시 DQL로 변환됩니다. 예를 들면 다음과 같습니다.
| 표준 모드 | DQL 조건 |
|---|---|
#"connection timeout" |
search('#"connection timeout"') |
-#"health check" |
not search('#"health check"') |
color:md5(red) |
`color` = md5("red") |
시스템은 현재 탐색기에 따라 해당 데이터 유형과 데이터 소스를 자동으로 가져옵니다. 예를 들어 다음 DQL 쿼리는 최근 1시간 동안 message에 connection timeout이 포함된 로그를 검색하는 데 사용됩니다.
L은 로그 데이터를 나타냅니다."default"는 로그 인덱스를 나타냅니다.logs는 데이터 소스를 나타냅니다.[1h]는 최근 1시간 데이터를 쿼리함을 나타냅니다.
DQL 모드로 전환하면 전체 DQL 문을 사용해야 합니다. 각 탐색기마다 해당하는 데이터 유형이 다르므로 현재 탐색기에서 다른 데이터 유형으로 전환할 수 없습니다.
로그 탐색기 분석 모드
로그 탐색기에서 고급 쿼리와 페이지 분석 구성을 함께 사용할 때 쿼리문에 BY 그룹 조건이 포함된 경우, 페이지는 중복되거나 충돌하는 그룹 조건을 방지하기 위해 문의 BY를 무시하고 페이지에서 구성된 분석 차원을 우선 적용합니다.
CIDR 함수 쿼리¶
CIDR 함수는 지정된 IP 필드에서 특정 네트워크에 속하는 데이터를 쿼리하는 데 사용되며, 문자열 일치가 아닌 네트워크 범위 일치를 수행합니다.
CIDR은 네트워크 주소와 접두사 길이로 구성됩니다. 예를 들어 13.0.0.0/8입니다. 접두사 길이가 클수록 일치하는 주소 범위는 작아집니다. IPv4에서 /32는 하나의 IP 주소만 일치합니다.
쿼리 형식:
예를 들어 network.client.ip 필드에서 13.0.0.0/8 네트워크에 속하는 데이터를 쿼리합니다.
단일 IPv4 주소를 정확히 일치시켜야 하는 경우 /32를 사용할 수 있습니다.
필드 값이 비어 있거나, 형식이 잘못되었거나, 유효한 IP 주소가 아닌 경우 일치하지 않습니다.
DQL 모드에서는 소문자 cidr() 함수를 사용하고 네트워크를 큰따옴표로 묶을 수 있습니다.
검색 기록¶
로그 탐색기의 인덱스 선택 기록은 검색 및 필터 조건 기록과 별도로 관리되며, 로그 인덱스 검색창 오른쪽의 기록 아이콘을 통해 열 수 있습니다.
현재 사용자는 로컬 브라우저에서 최근에 사용한 검색 및 필터 조건을 확인할 수 있으며, 최대 100개까지 유지됩니다. 기록 조건을 클릭하면 현재 탐색기에서 재사용할 수 있습니다.
검색 기록 병합 규칙
탐색기는 플랫폼 내의 범용 도구로 여러 기능에 적용되며, 기능 간 검색 기록의 상호 운용성에는 일부 차이가 있습니다.
- RUM > Session/View/Resource/Action/Long Task/Error 6가지 탐색기 검색 기록이 상호 운용됩니다.
- 컨테이너 탐색기와 Kubernetes 탐색기 검색 기록이 상호 운용됩니다.
- 리소스 카탈로그 탐색기 검색 기록이 상호 운용됩니다.
- 로그 탐색기와 로그 오류 추적 탐색기 검색 기록이 상호 운용됩니다.
- 트레이스 탐색기, APM 오류 추적, 프로파일링 탐색기 검색 기록이 상호 운용됩니다.
위의 경우를 제외한 나머지 탐색기는 각각 독립적으로 검색 기록을 저장합니다.


