Graphite 템플릿 변수

Graphite 템플릿 변수 (Graphite template variables)

메트릭 쿼리에서 서버·애플리케이션·센서 이름 같은 상세 값을 하드코딩하지 않고 변수를 사용할 수 있어요. Grafana는 변수를 대시보드 상단의 드롭다운 선택 박스에 나열해 표시 데이터를 바꾸기 쉽게 해 주는데, 이를 템플릿 변수라고 해요. Graphite 데이터 소스에서는 쿼리 변수만 만들 수 있고, 태그 기반 변수와 중첩 변수도 지원해요.

출처: 문서

본문

템플릿과 템플릿 변수 소개는 Templating변수 추가·관리 문서를 참고하세요. 예제 대시보드는 Graphite Templated Nested dashboard를 참고해요.

쿼리 변수 사용하기

Graphite 데이터 소스에서는 쿼리 변수만 만들 수 있어요. Grafana는 Graphite 기반 변수에 세 가지 쿼리 유형을 지원합니다.

쿼리 유형 설명 예시
Default query Graphite 함수를 사용해 메트릭·노드·태그 값을 동적으로 나열 tag_values(apps.*.requests.count, app)
Value query 메트릭과 함수를 포함한 쿼리의 모든 값을 반환 tag_values(apps.*.status.*, status)
Metric name query 메트릭과 함수를 포함한 쿼리의 모든 이름을 반환 apps.*.requests.count

변수 문법 선택

Graphite 데이터 소스는 Query 필드에서 두 가지 변수 문법을 지원해요.

문법 예시
$varname apps.frontend.$server.requests.count
${varname} apps.frontend.${server}.requests.count
  • 축약 문법($varname): 간단한 경로에 편리하지만 변수가 다른 문자와 인접하면(cpu$coreLoad) 동작하지 않아요.
  • 전체 문법(${varname}): 더 유연하며 단어 안에 포함되는 등 문자열 어디서나 동작해요.

Graphite 메트릭 경로 구조에 맞는 형식을 선택하세요.

태그 변수 사용하기

Grafana는 Graphite에 태그 기반 변수를 지원해 메트릭 시리즈의 태그 키·값을 기반으로 드롭다운을 동적으로 채울 수 있어요. 변수 쿼리에서 Graphite 함수 tags()tag_values()를 사용하세요.

쿼리 설명
tags() Graphite 데이터베이스의 모든 태그 키 목록 반환
tags(server=~backend\*) 제공된 필터 표현식과 일치하는 시리즈의 태그 키만 반환
tag_values(server) 지정된 태그 키의 모든 값 반환
tag_values(server, server=~backend\*) 일치하는 시리즈에 나타나는 값으로 필터링된 태그 값 반환

여러 필터 표현식을 사용할 수 있고, 다른 Grafana 변수를 포함할 수도 있어요.

tag_values(server, server=~backend\*, app=~${apps:regex})

이 쿼리는 server 태그가 backend*와 일치하고 app 태그가 다른 변수 ${apps}의 regex 필터 값과 일치하는 시리즈의 모든 server 태그 값을 반환해요. 자세한 내용은 Graphite tags 자동완성 API 문서를 참고하세요.

정규 표현식 포맷과 등가 물결 연산자(=~) 사용:

server=~${servers:regex}

이 쿼리는 servers 변수의 선택 값을 정규 표현식으로 포맷해요(두 서버 선택 시 (server1|server2)처럼). 자세한 내용은 고급 변수 포맷 옵션을 참고하세요.

여러 표현식으로 필터링

태그 쿼리에서 다중 값 변수를 사용할 때 변수 이름에 ${var:regex}를 붙여 regex 포맷을 적용하세요.

tag_values(server, app=~${apps:regex})

이 쿼리는 app 태그가 ${apps} 선택 값(regex로 포맷)과 일치하는 시리즈만 반환해요. =~는 정규 표현식 연산자입니다. 태그가 아닌 쿼리는 다중 값 변수에 기본 glob 포맷을 사용해요.

다른 쿼리 변수 사용하기

쿼리를 작성할 때 metric find 쿼리 유형으로 동적 값을 가져오세요. 예를 들어 쿼리 prod.servers.*는 와일드카드 위치(*)에 존재하는 모든 값으로 변수를 채워요. 결과에는 쿼리 경로의 마지막 레벨에서 찾은 값만 포함된다는 점에 주의하세요. 전체 메트릭 경로를 반환하려면 expand() 함수를 사용하세요.

expand(*.servers.*).

확장/비확장 메트릭 검색 결과 비교

  • 확장 쿼리(expand() 함수): 쿼리와 일치하는 전체 메트릭 경로를 반환
  • 비확장 쿼리: 각 일치 메트릭 경로의 마지막 세그먼트만 반환 → 메트릭 이름의 더 깊은 부분을 추출·필터링하는 데 제약

예: 데이터베이스에 prod.servers.001.cpu, prod.servers.002.cpu, test.servers.001.cpu가 있을 때:

비확장 쿼리 결과 확장 쿼리 확장 결과
* prod, test expand(*) prod, test
*.servers servers expand(*.servers) prod.servers, test.servers
test.servers servers expand(test.servers) test.servers
*.servers.* 001, 002 expand(*.servers.*) prod.servers.001, prod.servers.002, test.servers.001
test.servers.* 001 expand(test.servers.*) test.servers.001
*.servers.*.cpu cpu expand(*.servers.*.cpu) prod.servers.001.cpu, prod.servers.002.cpu, test.servers.001.cpu

참고: 비확장 쿼리는 확장 쿼리처럼 동작하지만 각 일치 메트릭의 마지막 세그먼트만 반환해요.

Grafana는 쿼리에서 다른 변수를 참조할 수 있는 중첩 변수도 지원해요. 예:

apps.$app.servers.*

이 쿼리는 $app 변수의 선택 값을 사용해 메트릭 경로를 동적으로 필터링합니다.

__searchFilter로 쿼리 변수 결과 필터링

Grafana는 변수 __searchFilter를 제공해 사용자가 변수 드롭다운에 입력한 내용에 따라 쿼리 결과를 동적으로 필터링할 수 있어요. 빈 값이면 __searchFilter*로 기본 설정되어 모든 값을 반환하고, 문자열을 입력하면 그 입력으로 치환됩니다.

Query:

apps.$app.servers.$__searchFilter

TagValues:

tag_values(server, server=~${__searchFilter:regex})

더 알아보기 (Learn more)