변수 문법
변수 문법 (Variable syntax)
패널 제목과 메트릭 쿼리는 두 가지 문법으로 변수를 참조할 수 있어요: $varname(읽기 쉽지만 단어 중간에 쓸 수 없음)과 ${var_name}(표현식 중간에 변수를 보간할 때 사용). 쿼리가 데이터 소스로 전송되기 전에 보간(interpolation)되어 변수가 현재 값으로 대체돼요. 보간 중에 변수 값은 쿼리 언어 문법에 맞게 이스케이프될 수 있어요.
출처: 문서
본문
기본 문법
$varname— 읽기 쉬운 문법이지만 단어 중간에 변수를 사용할 수 없어요. 예:apps.frontend.$server.requests.count${var_name}— 표현식 중간에 변수를 보간하고 싶을 때 사용해요.${var_name:<format>}— Grafana가 값을 보간하는 방식을 더 정밀하게 제어해요.[[varname]]— 사용하지 마세요. 더 이상 사용되지 않으며(deprecated) 향후 릴리스에서 제거될 문법이에요.
예를 들어 InfluxDB나 Prometheus 정규식 쿼리의 변수는 자동으로 이스케이프돼요. 보간 중 값 이스케이프에 대한 자세한 내용은 해당 데이터 소스 문서를 참고하세요.
고급 변수 형식 옵션
변수 보간 형식은 데이터 소스에 따라 달라지지만, 기본 형식을 변경하고 싶은 상황이 있을 수 있어요. 예를 들어 MySQL 데이터 소스의 기본값은 여러 값을 따옴표가 있는 쉼표 구분으로 결합하는 것('server01','server02')이고, 때로는 따옴표 없는 쉼표 구분 문자열(server01,server02)을 원할 수 있어요.
일반 문법: ${var_name:option}
Grafana Play 사이트에서 형식 옵션을 테스트할 수 있어요. 잘못된 형식 옵션을 지정하면 glob이 기본/폴백 옵션이 돼요. 대체 문법(향후 더 이상 사용되지 않을 수 있음)은 [[var_name:option]]이에요.
CSV — 여러 값의 변수를 쉼표 구분 문자열로 형식화:
servers = ['test1', 'test2']
String to interpolate: '${servers:csv}'
Interpolation result: 'test1,test2'
Distributed - OpenTSDB — OpenTSDB용 커스텀 형식으로 여러 값 변수 형식화:
servers = ['test1', 'test2']
String to interpolate: '${servers:distributed}'
Interpolation result: 'test1,servers=test2'
doublequote — 단일·다중 값 변수를 쉼표 구분 문자열로 형식화하고 각 값의 "를 \"로 이스케이프하며 "로 묶어요:
servers = ['test1', 'test2']
String to interpolate: '${servers:doublequote}'
Interpolation result: '"test1","test2"'
Glob - Graphite — 여러 값 변수를 glob(Graphite 쿼리용)으로 형식화:
servers = ['test1', 'test2']
String to interpolate: '${servers:glob}'
Interpolation result: '{test1,test2}'
Join — 다중 값 변수를 커스텀 구분자로 형식화. 구분자 인수를 제공하지 않으면 ,로 결합:
servers = ["test1", "test2"]
String to interpolate: '${servers:join:&}'
Interpolation result: "test1&test2"
JSON — 여러 값 변수를 쉼표 구분 문자열로 형식화:
servers = ['test1', 'test2']
String to interpolate: '${servers:json}'
Interpolation result: '["test1", "test2"]'
Lucene - Elasticsearch — Elasticsearch용 Lucene 형식으로 형식화:
servers = ['test1', 'test2']
String to interpolate: '${servers:lucene}'
Interpolation result: '("test1" OR "test2")'
percentencode — URL 파라미터에 사용하기 위한 단일·다중 값 변수 형식화:
servers = ['foo()bar BAZ', 'test2']
String to interpolate: '${servers:percentencode}'
Interpolation result: 'foo%28%29bar%20BAZ%2Ctest2'
Pipe — 여러 값 변수를 파이프 구분 문자열로 형식화:
servers = ['test1.', 'test2']
String to interpolate: '${servers:pipe}'
Interpolation result: 'test1.|test2'
Query parameters — 단일·다중 값 변수를 쿼리 파라미터 표현으로 형식화. 예: var-foo=value1&var-foo=value2
servers = ["test1", "test2"]
String to interpolate: '${servers:queryparam}'
Interpolation result: "var-servers=test1&var-servers=test2"
customqueryparam 포매터로 쿼리 파라미터 형식을 커스터마이즈할 수 있어요. 파라미터 이름과 값 접두사를 지정하는 두 선택 인수를 받아요:
servers = ["test1", "test2"]
String to interpolate: '${servers:customqueryparam:v-servers:x-}'
Interpolation result: "v-servers=x-test1&v-servers=x-test2"
Raw — 변수에 데이터 소스별 형식을 적용하지 않아요. 예를 들어 Prometheus 데이터 소스와 다중 값 변수가 있는 대시보드에서 Grafana는 보통 값을 (test1 | test2)로 변환하지만, raw 형식을 쓰면 형식화 없이 test1,test2를 반환해요:
servers = ['test1.', 'test2']
String to interpolate: '${servers:raw}'
Interpolation result: 'test1,test2'
Regex — 여러 값 변수를 정규식 문자열로 형식화:
servers = ['test1.', 'test2']
String to interpolate: '${servers:regex}'
Interpolation result: '(test1\\.|test2)'
singlequote — 단일·다중 값 변수를 쉼표 구분 문자열로 형식화하고 각 값의 '를 \'로 이스케이프하며 '로 묶어요:
servers = ['test1', 'test2']
String to interpolate: '${servers:singlequote}'
Interpolation result: "'test1','test2'"
sqlstring — 단일·다중 값 변수를 쉼표 구분 문자열로 형식화하고 각 값의 '를 ''로 이스케이프하며 '로 묶어요:
servers = ["test'1", "test2"]
String to interpolate: '${servers:sqlstring}'
Interpolation result: "'test''1','test2'"
Text — 단일·다중 값 변수를 텍스트 표현으로 형식화. 단일 변수는 텍스트 표현만 반환하고, 다중 값 변수는 +와 결합된 텍스트 표현을 반환해요:
servers = ["test1", "test2"]
String to interpolate: '${servers:text}'
Interpolation result: "test1 + test2"