고급 변수 구성

고급 변수 구성 (Advanced variable configurations)

이 페이지의 고급 변수 구성은 복잡한 데이터 구조와 사용자 선택에 적응하는 대시보드를 만들게 해줘요. 다중 속성(multi-property) 변수, 체인(chained) 변수, 정규 표현식 필터링 세 가지를 다룹니다. 여러 환경·데이터 소스·리전·클러스터·네임스페이스 같은 계층적 데이터를 아우르는 대시보드에 유용해요.

출처: 문서

본문

  • Multi-property 변수: 하나의 논리 값을 여러 소스별 값으로 매핑
  • Chained 변수: 다른 변수의 선택에 따라 한 변수의 옵션 업데이트
  • 정규 표현식 필터링: 변수 쿼리가 반환하는 값을 필터링

Multi-property 변수

다중 소스 대시보드에서 같은 논리 개념(예: 한 소스에선 dev, 다른 소스에선 development로 식별되는 환경)에 여러 값을 쓴다면, multi-property 변수로 한 변수에서 그 값들을 참조하세요. 각 객체가 원하는 만큼 속성을 가질 수 있는 JSON 배열을 구성하면, 변수를 사용하면서 어떤 속성이든 참조할 수 있어요. 적용 가능한 변수 유형: Custom, Query, Infinity, PostgreSQL.

Multi-property custom 변수

여러 속성을 가진 custom 변수를 만들려면 JSON 배열을 정의하세요.

[
  { "value": "1", "text": "Development", "aws": "dev", "azure": "development", "google": "googledev" },
  { "value": "2", "text": "Staging", "aws": "stag", "azure": "staging", "google": "googlestag" },
  { "value": "3", "text": "Production", "aws": "prod", "azure": "production", "google": "googleprod" }
]

그 다음 ${varName.someProperty} 문법으로 대시보드 패널·메트릭에서 어떤 속성이든 참조할 수 있어요. 속성을 깊게 중첩해도 익숙한 변수 문법으로 접근할 수 있습니다.

Multi-property query 변수

데이터 소스마다 쿼리 구성이 달라 JSON 배열 설정 방법이 하나로 정해지지 않아요. PostgreSQL은 PostgreSQL 템플릿 변수, 그 외 데이터 소스는 데이터 소스 문서를 참고하세요.

Chained 변수

Chained 변수(linked 변수 또는 nested 변수라고도 함)는 변수 쿼리에 다른 변수를 하나 이상 포함하는 쿼리 변수입니다. 한 변수의 옵션이 다른 변수의 선택에 의존하는 관계를 만들며, 계층적 데이터를 드릴다운하게 해주는 캐스케이딩 필터를 가능하게 해요. region > cluster > namespace > pod 같은 다단계 필터링 시나리오에서 흔히 쓰입니다. 기술적으로 체인 개수에 제한은 없지만, 링크가 많을수록 쿼리 부하가 커져요.

Grafana Play 대시보드 예시

Graphite Templated NestedInfluxDB Templated 대시보드에는 두 단계 깊이의 기본 chained 변수가 있어요.

Graphite 예시 설명

여러 애플리케이션이 있고 각각 서로 다른 서버 하위 집합이 있다고 해요. 메트릭 소스마다 별도 변수를 만들면 어떤 서버가 어느 앱에 속하는지 알아야 하는 문제가 생겨요. 더 좋은 해결책은 한 변수로 다른 변수를 필터링하는 것입니다.

  • app 변수 쿼리: apps.*backend, country, fakesite, All 반환
  • server 변수 쿼리: apps.$app.* → 사용자가 backend 선택 시 apps.backend.*가 되어 backend_01, backend_02 등 반환

두 변수 모두 Multi-valueInclude all option을 사용해 언제든 일부 또는 전체 옵션을 선택할 수 있어요.

더 확장한다면 CPU 메트릭 변수: apps.$app.$server.cpu.* → 선택에 따라 apps.backend.backend_01.cpu.* 같은 쿼리 생성.

참고: 이 예시는 이론적입니다. 예시의 Graphite 서버에는 CPU 메트릭이 없어요.

InfluxDB 예시 설명

여러 데이터센터가 있고 각각 다른 호스트 하위 집합이 있다고 해요.

  • datacenter 변수 쿼리: SHOW TAG VALUES WITH KEY = "datacenter"America, Africa, Asia, Europe
  • host 변수 쿼리: SHOW TAG VALUES WITH KEY = "hostname" WHERE "datacenter" =~ /^$datacenter$/ → 사용자가 America 선택 시 /^America/로 필터

확장하면 CPU 변수: SHOW TAG VALUES WITH KEY = "cpu" WHERE "datacenter" =~ /^$datacenter$/ AND "host" =~ /^$host$/.

참고: 이 예시는 이론적입니다.

Chained 변수 모범 사례

  • 새 chained 변수 만들기: 기반으로 삼을 변수를 복사하는 것이 가장 쉬워요. 변수 목록에서 Duplicate variable 아이콘을 클릭해 복사본을 만든 뒤 부모 변수 쿼리를 확장하세요. 새 변수는 목록 맨 아래에 나타나니 논리적 순서로 드래그하세요.
  • 변수 순서: 변수 목록에서 오른쪽 위/아래 화살표로 순서를 바꿀 수 있어요. Grafana는 이 목록대로 드롭다운을 왼쪽에서 오른쪽으로 나열합니다. 의존성이 없는 변수를 맨 위에, 각 변수는 의존하는 변수 다음에 배치하세요. UI에는 의존 관계 표시가 없으니 논리적 순서로 나열해 다른 사람이 쓰기 쉽게 하세요.
  • 복잡성 고려: 변수의 의존 레이어가 많을수록 변수 변경 후 대시보드 업데이트가 오래 걸려요. 4단계 연결 변수(country, region, server, metric)에서 루트 변수(country)를 바꾸면 Grafana는 시각화를 갱신하기 전에 모든 의존 변수 쿼리를 실행해야 합니다.

정규 표현식으로 변수 필터링

Regex 쿼리 옵션으로 변수 쿼리가 반환하는 옵션 목록을 필터링하거나 수정할 수 있어요. 정규 표현식에 대한 자세한 내용은 Mozilla 정규 표현식 가이드를 참고하세요.

옵션 목록 예시:

backend_01
backend_02
backend_03
backend_04

01 또는 02로 끝나는 옵션만 반환:

/(01|02)$/

결과: backend_01, backend_02

캡처 그룹으로 텍스트 일부만 반환(필터+수정):

/.*(01|02)/

결과: 01, 02

Prometheus 예시(up 시리즈에서 instance 추출):

/.*instance="([^"]*).*/

결과:

demo.robustperception.io:9090
demo.robustperception.io:9093
demo.robustperception.io:9100

named text/value 캡처 그룹 사용: named 캡처 그룹으로 드롭다운의 표시 이름(text)과 값(value)을 분리할 수 있어요. 예: node_hwmon_chip_names 메트릭에서 chip_namechip보다 친근할 때:

/chip_name="(?<text>[^"]+)|chip="(?<value>[^"]+)/g

결과:

Display Name          Value
------------          -------------------------
enp216s0f0np0         0000:d7:00_0_0000:d8:00_0
enp216s0f0np1         0000:d7:00_0_0000:d8:00_1
...

참고: textvalue 캡처 그룹 이름만 지원됩니다.

더 알아보기 (Learn more)