ClickStack와 Elastic에서 검색하기
ClickStack 검색 구문 vs Elasticsearch 쿼리 문자열
| 기능 | ClickStack 구문 | Elasticsearch 구문 | 설명 |
|---|---|---|---|
| 자유 텍스트 검색 | error | error | 모든 인덱싱된 필드에서 일치합니다. ClickStack에서는 다중 필드 SQL ILIKE로 다시 작성됩니다. |
| 필드 일치 | level:error | level:error | 구문이 동일합니다. ClickStack는 ClickHouse에서 정확한 필드 값과 일치시킵니다. |
| 구문 검색 | "disk full" | "disk full" | 따옴표로 묶인 텍스트는 정확한 문자열 순서와 일치합니다. ClickHouse는 문자열 동등 비교 또는 ILIKE를 사용합니다. |
| 필드 구문 일치 | message:"disk full" | message:"disk full" | SQL ILIKE 또는 정확 일치로 변환됩니다. |
| OR 조건 | error OR warning | error OR warning | 용어의 논리 OR입니다. 두 시스템 모두 이를 네이티브로 지원합니다. |
| AND 조건 | error AND db | error AND db | 둘 다 교집합으로 변환되며, 사용자 구문에는 차이가 없습니다. |
| 부정 | NOT error or -error | NOT error or -error | 동일하게 지원됩니다. ClickStack는 이를 SQL NOT ILIKE로 변환합니다. |
| 그룹화 | (error OR fail) AND db | (error OR fail) AND db | 두 시스템 모두에서 표준 불리언 그룹화입니다. |
| 와일드카드 | error* or *fail* | error*, *fail* | ClickStack는 앞/뒤 와일드카드를 지원합니다. ES는 성능상 이유로 기본적으로 앞부분 와일드카드를 비활성화합니다. 용어 내부의 와일드카드는 지원되지 않습니다. 예: f*ail. 와일드카드는 필드 일치와 함께 사용해야 합니다. |
| 범위(숫자/날짜) | duration:[100 TO 200] | duration:[100 TO 200] | ClickStack는 SQL BETWEEN을 사용하고, Elasticsearch는 범위 쿼리로 확장합니다. 범위에서 제한 없는 *는 지원되지 않습니다. 예: duration:[100 TO *]. 필요한 경우 아래의 Unbounded ranges를 사용하십시오. |
| 제한 없는 범위(숫자/날짜) | duration:>10 or duration:>=10 | duration:>10 or duration:>=10 | ClickStack는 표준 SQL 연산자를 사용합니다 |
| 포함/제외 경계 | duration:{100 TO 200} (exclusive) | 동일 | {}는 배타적 경계를 나타냅니다. 범위에서 *는 지원되지 않습니다. 예: duration:[100 TO *] |
| 존재 여부 확인 | N/A | _exists_:user or field:* | _exists_는 지원되지 않습니다. Map 컬럼(예: LogAttributes)에는 LogAttributes.log.file.path: *를 사용하십시오. 루트 컬럼은 반드시 존재하며, 이벤트에 포함되지 않으면 기본값을 가집니다. 기본값 또는 누락된 컬럼을 검색하려면 Elasticsearch와 같은 구문인 ServiceName:* 또는 ServiceName != ''를 사용하십시오. |
| 정규식 | match function | name:/joh?n(ath[oa]n)/ | 현재 Lucene 구문에서는 지원되지 않습니다. SQL과 match function 또는 다른 string search functions을 사용할 수 있습니다. |
| 퍼지 일치 | editDistance('quikc', field) = 1 | quikc~ | 현재 Lucene 구문에서는 지원되지 않습니다. SQL에서 Distance functions를 사용할 수 있습니다. 예: editDistance('rror', SeverityText) = 1 또는 other similarity functions. |
| 근접 검색 | 지원되지 않음 | "fox quick"~5 | 현재 Lucene 구문에서는 지원되지 않습니다. |
| 부스팅 | quick^2 fox | quick^2 fox | 현재 ClickStack에서는 지원되지 않습니다. |
| 필드 와일드카드 | service.*:error | service.*:error | 현재 ClickStack에서는 지원되지 않습니다. |
| 이스케이프된 특수 문자 | 예약 문자는 \로 이스케이프 | 동일 | 예약 기호를 사용할 때 이스케이프가 필요합니다. |
존재/누락 차이
Nullable필드는NULL로 설정됩니다.- 널 비허용 필드(기본값)는 기본값으로 채워집니다(대개 빈 문자열, 0 또는 이에 상응하는 값).
Nullable이 권장되지 않으므로 후자의 방식을 사용합니다.
즉, Elasticsearch에서와 같은 의미로 필드가 “존재하는지”를 직접 확인하는 것은 지원되지 않습니다.
대신 비어 있지 않은 값이 있는지 확인하려면 field:* 또는 field != ''를 사용할 수 있습니다. 따라서 실제로 누락된 필드와 명시적으로 빈 필드를 구분할 수는 없습니다.
실제로 이러한 차이로 인해 관측성 사용 사례에서 문제가 발생하는 경우는 드물지만, 시스템 간에 쿼리를 옮길 때는 이 점을 염두에 두어야 합니다.