Elasticsearch 템플릿 변수
Elasticsearch 템플릿 변수 (Template variables)
지표 쿼리에 서버, 애플리케이션, 센서 이름 같은 세부 정보를 하드코딩하는 대신 변수를 사용할 수 있어요. Grafana는 이런 변수를 대시보드 상단의 드롭다운 선택 상자에 나열해 대시보드에 표시되는 데이터를 쉽게 바꿀 수 있게 해줘요. Grafana는 이러한 변수를 템플릿 변수라고 부러요.
본문
템플릿과 템플릿 변수 소개는 Templating과 Add and manage variables 문서를 참고하세요.
필터 사용
Elasticsearch는 필터 사용을 지원해요. 임의의 수의 키/값 필터를 지정할 수 있고, Grafana가 모든 Elasticsearch 쿼리에 자동으로 적용해요.
필터는 다음 연산자를 지원해요.
| 연산자 | 설명 |
|---|---|
= |
같음. AND field:"value"를 쿼리에 추가 |
!= |
같지 않음. AND -field:"value"를 쿼리에 추가 |
=~ |
정규식 일치. AND field:/value/를 쿼리에 추가 |
!~ |
정규식 비일치. AND -field:/value/를 쿼리에 추가 |
> |
큼. AND field:>value를 쿼리에 추가 |
< |
작음. AND field:<value를 쿼리에 추가 |
자세한 내용은 Filter and Group by documentation을 참고하세요.
변수 문법 선택
Elasticsearch 데이터 소스는 Query 필드에서 사용할 두 가지 변수 문법을 지원해요.
$varname(예:hostname:$hostname) - 읽고 쓰기 쉽지만 단어 중간에서 변수를 사용할 수 없어요.[[varname]](예:hostname:[[hostname]])
Multi-value 또는 Include all value 옵션이 활성화되면 Grafana가 라벨을 일반 텍스트에서 Lucene 호환 조건으로 변환해요. 자세한 내용은 Multi-value variables 문서를 참고하세요.
쿼리에서 변수 사용
Lucene 쿼리 필드, 지표 집계 필드, 버킷 집계 필드, 별칭 필드에서 변수를 사용할 수 있어요.
Lucene 쿼리의 변수
변수로 Elasticsearch 쿼리를 동적으로 필터링해요.
hostname:$hostname AND level:$level
변수 체인 또는 중첩
하나의 변수 값이 다른 변수의 선택에 의존하는 중첩 변수를 만들 수 있어요. 이 예시는 선택한 $environment와 일치하는 호스트만 표시하는 $host 변수를 정의해요.
{ "find": "terms", "field": "hostname", "query": "environment:$environment" }
드롭다운에서 $environment 변수의 값을 바꿀 때마다 Grafana는 $host 변수를 업데이트해 선택한 환경으로 필터링된 호스트 이름만 담도록 해요.
집계의 변수
버킷 집계 필드에서 변수를 사용해 데이터가 그룹화되는 방식을 동적으로 바꿀 수 있어요. 예를 들어 Terms group by 필드에 변수를 사용해 사용자가 hostname, service, datacenter별로 그룹화를 전환하게 할 수 있어요.
템플릿 변수 예시
위 예시에서 Lucene 쿼리는 $hostname 변수를 사용해 hostname 속성을 기준으로 문서를 필터링해요. 이 예시는 또한 Terms group by 필드 입력 상자에 변수를 사용해 데이터가 그룹화되는 방식을 빠르게 바꿀 수 있게 해요.
쿼리 만들기
필드가 Elasticsearch 인덱스 매핑에서 keyword로 매핑된 상태에서 커스텀 JSON 문자열을 사용해 쿼리를 작성해요.
쿼리가 text와 keyword 유형이 모두 있는 multi-field라면 쿼리에서 keyword 필드를 지정하려면 "field":"fieldname.keyword"(때로는 fieldname.raw)를 사용해요.
| Query | 설명 |
|---|---|
{"find": "fields", "type": "keyword"} |
인덱스 유형이 keyword인 필드 이름 목록 반환 |
{"find": "fields", "type": "number"} |
숫자 필드 이름 목록 반환(float, double, integer, long, scaled_float 포함) |
{"find": "fields", "type": "date"} |
날짜 필드 이름 목록 반환 |
{"find": "terms", "field": "hostname.keyword", "size": 1000} |
keyword 필드의 값 목록 반환. 현재 대시보드 시간 범위 사용 |
{"find": "terms", "field": "hostname", "query": "<Lucene query>"} |
Lucene 쿼리로 필터링된 값 목록 반환. 현재 대시보드 시간 범위 사용 |
{"find": "terms", "field": "status", "orderBy": "doc_count"} |
문서 수로 정렬된 값 반환(기본 내림차순) |
{"find": "terms", "field": "status", "orderBy": "doc_count", "order": "asc"} |
문서 수로 오름차순 정렬된 값 반환 |
terms 쿼리는 기본적으로 500개 결과 제한이 있어요. 커스텀 한도를 설정하려면 쿼리에 size 속성을 설정하세요.
쿼리 결과 정렬
기본적으로 쿼리는 용어 순서로 결과를 반환해요(이후 변수의 Sort 설정으로 알파벳순 또는 숫자순으로 정렬 가능).
문서 수로 정렬된 용어 목록(top-N 값 목록)을 만들려면 orderBy 속성에 doc_count를 추가해요. 그러면 자동으로 내림차순 정렬이 선택돼요.
{ "find": "terms", "field": "status", "orderBy": "doc_count" }
order 속성을 사용해 오름차순 또는 내림차순 정렬을 명시적으로 설정할 수도 있어요.
{ "find": "terms", "field": "hostname", "orderBy": "doc_count", "order": "asc" }
참고: Elasticsearch는 문서 수 오름차순 정렬이 부정확한 결과를 반환할 수 있어 권장하지 않아요.
용어를 문서 수 순서로 유지하려면 변수의 Sort 드롭다운을 Disabled로 설정해요. 대신 Alphabetical 같은 다른 정렬 기준을 사용해 다시 정렬할 수도 있어요.
더 알아보기 (Learn more)
- Templating - 템플릿 개요
- Add and manage variables - 변수 추가·관리
- Elasticsearch query editor - 쿼리 편집기
- Elasticsearch data source - 데이터 소스 개요
- Elasticsearch template variables - 원문 문서