

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 템플릿 및 변수
<a name="templates-and-variables"></a>

****  
이 설명서 주제는 **Grafana 버전 8.x**를 지원하는 Grafana 워크스페이스를 위해 설계되었습니다.  
Grafana 버전 12.x를 지원하는 Grafana 워크스페이스는 섹션을 참조하세요[Grafana 버전 12에서 작업](using-grafana-v12.md).  
Grafana 버전 10.x를 지원하는 Grafana 워크스페이스는 [Grafana 버전 10에서 작업](using-grafana-v10.md) 섹션을 참조하세요.  
Grafana 버전 9.x를 지원하는 Grafana 워크스페이스의 경우 [Grafana 버전 9에서 작업](using-grafana-v9.md) 섹션을 참조하세요.

변수는 값의 자리표시자입니다. 지표 쿼리 및 패널 제목에서 변수를 사용할 수 있습니다. 변수를 사용하면 보다 동적이고 대화형 기능이 강화된 대시보드를 생성할 수 있습니다. 지표 쿼리에서 서버, 애플리케이션 및 센서 이름과 같은 사물을 하드 코딩하는 대신 해당 위치에서 변수를 사용할 수 있습니다.

변수는 대시보드 상단에 드롭다운 목록으로 표시됩니다. 대시보드 상단의 드롭다운 목록을 사용하여 값을 변경하는 경우 패널의 지표 쿼리에 새 값이 반영됩니다.

이는 최종 사용자가 시각화를 빠르게 조정할 수 있도록 허용하되 전체 편집 권한을 부여하지 않으려는 관리자에게 특히 유용할 수 있습니다. Grafana 최종 사용자는 변수를 사용할 수 있습니다.

변수 및 템플릿을 사용하면 단일 소스 대시보드를 사용할 수 있습니다. 동일한 데이터 소스 또는 서버가 여러 개 있는 경우 하나의 대시보드를 만들고 변수를 사용하여 보고 있는 내용을 변경할 수 있습니다. 이를 통해 유지 관리가 간소화됩니다.

지원되는 변수 유형 목록과 각 변수 유형 추가 지침은 [변수 유형](variables-types.md) 섹션을 참조하세요.

## 템플릿
<a name="templates"></a>

 *템플릿*은 변수를 포함하는 모든 쿼리입니다.

예를 들어 여러 서버를 모니터링하기 위해 대시보드를 관리하는 경우 각 서버에 대한 대시보드를 만들 수 있습니다. 또는 다음 예제와 같이 하나의 대시보드를 생성하고 템플릿 쿼리가 있는 패널을 사용할 수 있습니다.

```
wmi_system_threads{instance=~"$server"}
```

변수 값은 항상 `var-<varname>=value` 구문을 사용하여 URL에 동기화됩니다.

## 변수 모범 사례
<a name="variable-best-practices"></a>

변수 드롭다운 목록은 **대시보드 설정**의 변수 목록에 나열된 순서대로 표시됩니다.

자주 변경하는 변수를 맨 위에 배치하면 해당 변수가 먼저 표시됩니다(대시보드에서 맨 왼쪽).

## 변수 구문
<a name="variable-syntax"></a>

 패널 제목과 지표 쿼리는 두 가지 다른 구문을 사용하여 변수를 참조할 수 있습니다.
+  `$varname` 다음 예제와 같이 이 구문을 더 쉽게 읽을 수 있습니다. `apps.frontend.$server.requests.count`. 하지만 단어 중간에 변수를 사용할 수 없습니다.
+  `${var_name}` - 표현식 중간에 변수를 보간하려는 경우 이 구문을 사용합니다.
+  `${var_name:<format>}` - 이 형식을 사용하면 Grafana에서 값을 보간하는 방법을 더 잘 제어할 수 있습니다. 자세한 내용은 [고급 변수 형식 옵션](#advanced-variable-format-options) 단원을 참조하십시오.

 쿼리가 데이터 소스로 전송되기 전에 쿼리가 *보간*됩니다. 즉, 변수가 현재 값으로 대체됩니다. 보간 중에 쿼리 언어의 구문과 사용되는 위치를 준수하기 위해 변수 값이 *이스케이프 처리*될 수 있습니다. 예를 들어 Prometheus 쿼리의 정규식에 사용되는 변수는 정규식으로 이스케이프 처리됩니다. 보간 중 값 이스케이프 처리에 대한 자세한 내용은 데이터 소스별 설명서 주제를 참조하세요.

 데이터 소스 기본 형식을 재정의하는 고급 구문에 대한 자세한 내용은 [고급 변수 형식 옵션](#advanced-variable-format-options) 섹션을 참조하세요.

## 기타 변수 옵션
<a name="other-variable-options"></a>

이 섹션에서는 사용 가능한 다른 변수 옵션을 설명합니다.

### 변수 선택 옵션 입력
<a name="enter-variable-selection-options"></a>

**선택 옵션**을 사용하여 변수 옵션 선택을 관리할 수 있습니다. 모든 선택 옵션은 선택 사항이며 기본적으로 꺼져 있습니다.

#### 다중 값
<a name="multi-value"></a>

이 옵션을 켜면 변수 드롭다운 목록에서 여러 옵션의 동시 선택을 지원합니다. 자세한 내용은 [다중 값 변수 형식 지정](#formatting-multi-value-variables) 단원을 참조하십시오.

#### 모두 포함 옵션
<a name="include-all-option"></a>

Grafana 워크스페이스는 변수 드롭다운 목록에 `All` 옵션을 추가합니다. 최종 사용자가 이 옵션을 선택하면 모든 변수 옵션이 선택됩니다.

#### 모든 사용자 지정 값
<a name="custom-all-value"></a>

이 옵션은 **모든 옵션 포함**을 선택한 경우에만 표시됩니다.

`All` 옵션의 값을 정의하려면 **모든 사용자 지정 값** 필드에 정규식, glob 또는 Lucene 구문을 입력합니다.

기본적으로 `All` 값에는 결합된 표현식의 모든 옵션이 포함됩니다. 그러면 매우 길고 성능 문제가 있을 수 있습니다. 와일드카드 정규식과 같이 모든 사용자 지정 값을 지정하는 것이 더 나을 수 있습니다.

**모든 사용자 지정 값** 옵션에 사용자 지정 정규식, glob 또는 Lucene 구문을 포함하려면 이스케이프 처리되지 않으므로 데이터 소스에 유효한 값이 무엇인지 고려해야 합니다.

### 고급 변수 형식 옵션
<a name="advanced-variable-format-options"></a>

 변수 보간의 형식 지정은 데이터 소스에 따라 다르지만 기본 형식 지정을 변경하려는 상황이 있습니다.

 예를 들어 MySQL 데이터 소스의 기본값은 따옴표로 묶어 쉼표로 구분된 다중 값을 조인하는 것입니다(`'server01','server02'`). 경우에 따라 `server01,server02`와 같이 따옴표 없이 쉼표로 구분된 문자열을 사용할 수 있습니다. 이렇게 하려면 다음 고급 변수 형식 지정 옵션을 사용합니다.

#### 일반 구문
<a name="general-syntax"></a>

 구문: `${var_name:option}` 

잘못된 형식 지정 옵션이 지정된 경우 `glob`가 기본 또는 대체 옵션입니다.

#### CSV
<a name="variables-csv"></a>

 다중 값 변수를 쉼표로 구분된 문자열 형식으로 지정합니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:csv}'
Interpolation result: 'test1,test2'
```

#### 분산 - OpenTSDB
<a name="distributed---opentsdb"></a>

 다중 값 변수를 OpenTSDB에 대한 사용자 지정 형식으로 지정합니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:distributed}'
Interpolation result: 'test1,servers=test2'
```

#### 큰따옴표
<a name="doublequote"></a>

 단일 및 다중 값 변수를 쉼표로 구분된 문자열 형식으로 지정하고, 각 값에서 `"`를 `\"`로 이스케이프 처리하고 각 값을 `"`로 묶습니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:doublequote}'
Interpolation result: '"test1","test2"'
```

#### Glob - Graphite
<a name="glob---graphite"></a>

 다중 값 변수를 Graphite 쿼리에 대한 glob 형식으로 지정합니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:glob}'
Interpolation result: '{test1,test2}'
```

#### JSON
<a name="json"></a>

 다중 값 변수를 쉼표로 구분된 문자열 형식으로 지정합니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:json}'
Interpolation result: '["test1", "test2"]'
```

#### Lucene - OpenSearch
<a name="lucene---opensearch"></a>

 다중 값 변수를 OpenTSDB에 대한 Lucene 형식으로 지정합니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:lucene}'
Interpolation result: '("test1" OR "test2")'
```

#### Percentencode
<a name="percentencode"></a>

 URL 파라미터에 사용할 단일 값 및 다중 값 변수의 형식을 지정합니다.

```
servers = ['foo()bar BAZ', 'test2']
String to interpolate: '${servers:percentencode}'
Interpolation result: 'foo%28%29bar%20BAZ%2Ctest2'
```

#### 파이프
<a name="pipe"></a>

 다중 값 변수를 파이프로 구분된 문자열 형식으로 지정합니다.

```
servers = ['test1.', 'test2']
String to interpolate: '${servers:pipe}'
Interpolation result: 'test1.|test2'
```

#### 원시
<a name="raw"></a>

 SQL 쿼리에서 작은따옴표와 같은 데이터 소스 특정 형식 지정을 끕니다.

```
servers = ['test1.', 'test2']
String to interpolate: '${var_name:raw}'
Interpolation result: '{test.1,test2}'
```

#### Regex
<a name="regex"></a>

 다중 값 변수를 정규식 문자열 형식으로 지정합니다.

```
servers = ['test1.', 'test2']
String to interpolate: '${servers:regex}'
Interpolation result: '(test1\.|test2)'
```

#### Singlequote
<a name="singlequote"></a>

 단일 및 다중 값 변수를 쉼표로 구분된 문자열 형식으로 지정하고, 각 값에서 `'`를 `\'`로 이스케이프 처리하고 각 값을 `'`로 묶습니다.

```
servers = ['test1', 'test2']
String to interpolate: '${servers:singlequote}'
Interpolation result: "'test1','test2'"
```

#### Sqlstring
<a name="sqlstring"></a>

 단일 및 다중 값 변수를 쉼표로 구분된 문자열 형식으로 지정하고, 각 값에서 `'`를 `''`로 이스케이프 처리하고 각 값을 `'`로 묶습니다.

```
servers = ["test'1", "test2"]
String to interpolate: '${servers:sqlstring}'
Interpolation result: "'test''1','test2'"
```

#### 텍스트
<a name="text"></a>

 단일 및 다중 값 변수를 텍스트 표현 형식으로 지정합니다. 단일 변수의 경우 텍스트 표현만 반환합니다. 다중 값 변수의 경우 `+`와 결합된 텍스트 표현을 반환합니다.

```
servers = ["test1", "test2"]
String to interpolate: '${servers:text}'
Interpolation result: "test1 + test2"
```

### 다중 값 변수 형식 지정
<a name="formatting-multi-value-variables"></a>

선택한 다중 값 변수 보간은 변수가 사용되는 지정된 컨텍스트에서 유효한 문자열로 다중 값 형식을 지정하는 방법이 간단하지 않기 때문에 어렵습니다. Grafana는 각 데이터 소스 플러그인이 템플릿 지정 보간 엔진에 다중 값에 사용할 형식을 알릴 수 있도록 함으로써 이 문제를 해결하려고 합니다.

**참고**  
 Grafana가 모든 값을 단일 문자열 형식으로 지정하려면 변수의 **모든 사용자 지정 값** 옵션이 비어 있어야 합니다. 비워 두면 Grafana에서는 쿼리의 모든 값을 연결(함께 추가)합니다. `value1,value2,value3`과 비슷합니다. 사용자 지정 `all` 값을 사용하는 경우 대신 값은 `*` 또는 `all`과 비슷합니다.

#### Graphite 데이터 소스에서 다중 값 변수
<a name="multi-value-variables-with-a-graphite-data-source"></a>

 Graphite에서는 glob 표현식을 사용합니다. 이 경우 다중 값 변수는 현재 값이 *host1*, *host2* 및 *host3*인 것처럼 `{host1,host2,host3}`으로 보간됩니다.

#### Prometheus 또는 InfluxDB 데이터 소스에서 다중 값 변수
<a name="multi-value-variables-with-a-prometheus-or-influxdb-data-source"></a>

 InfluxDB 및 Prometheus는 정규식을 사용하므로 동일한 변수가 `(host1|host2|host3)`으로 보간됩니다. 또한 모든 값이 정규식으로 이스케이프 처리됩니다. 그렇지 않은 경우 정규식 제어 문자가 있는 값으로 인해 정규식이 손상됩니다.

#### 탄력적 데이터 소스에서 다중 값 변수
<a name="multi-value-variables-with-an-elastic-data-source"></a>

Amazon OpenSearch는 Lucene 쿼리 구문을 사용하므로 동일한 변수의 형식이 `("host1" OR "host2" OR "host3")`으로 지정됩니다. 이 경우 모든 값이 이스케이프 처리되므로 값에는 Lucene 제어 단어와 따옴표만 포함됩니다.

#### 형식 문제 해결
<a name="formatting-troubles"></a>

 자동 이스케이프 처리 및 서식 지정으로 문제가 생길 수 있습니다. 특히 InfluxDB 및 Prometheus에서 문제 이면의 논리를 파악하기란 쉽지 않습니다. 이 경우 정규식 구문을 사용하려면 정규식 연산자 컨텍스트에서 변수를 사용해야 하기 때문입니다.

 Grafana가 이 자동 정규식 이스케이프 처리 및 서식 지정을 수행하지 않도록 하려면 다음 중 하나를 수행해야 합니다.
+ **다중 값**, **모두 포함 옵션** 옵션을 끕니다.
+ [원시 변수 형식]({{< relref "advanced-variable-format-options.md\#raw" >}})을 사용합니다.

### 정규식으로 변수 필터링
<a name="filter-variables-with-regex"></a>

 정규식 쿼리 옵션을 사용하여 변수 쿼리에서 반환된 옵션 목록을 필터링하거나 반환된 옵션을 수정할 수 있습니다.

이 섹션에서는 정규식을 사용하여 변수 드롭다운 목록에서 값을 필터링하고 수정하는 방법을 보여줍니다.

 정규식 쿼리 옵션을 사용하여 변수 쿼리에서 반환된 옵션 목록을 필터링하거나 반환된 옵션을 수정합니다. 자세한 내용은 [ Regular expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)를 참조하세요.

 다음 옵션 목록에 대한 필터링 예제: 

```
backend_01
backend_02
backend_03
backend_04
```

#### `01` 또는 `02`로 끝나는 옵션만 반환되도록 필터링
<a name="filter-so-that-only-the-options-that-end-with-01-or-02-are-returned"></a>

 정규식: 

```
/.*[01|02]/
```

 결과: 

```
backend_01
backend_02
```

#### 정규식 캡처 그룹을 사용하여 텍스트의 일부를 반환하도록 옵션 필터링 및 수정
<a name="filter-and-modify-the-options-using-a-regex-capture-group-to-return-part-of-the-text"></a>

 정규식: 

```
/.*(01|02)/
```

 결과: 

```
01
02
```

#### 필터링 및 수정 - Prometheus 예제
<a name="filter-and-modify---prometheus-example"></a>

 옵션 목록: 

```
up{instance="demo.robustperception.io:9090",job="prometheus"} 1 1521630638000
up{instance="demo.robustperception.io:9093",job="alertmanager"} 1 1521630638000
up{instance="demo.robustperception.io:9100",job="node"} 1 1521630638000
```

 정규식: 

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

 결과: 

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

#### 이름 지정된 텍스트 및 값 캡처 그룹을 사용하여 필터링 및 수정
<a name="filter-and-modify-using-named-text-and-value-capture-groups"></a>

이름 지정된 캡처 그룹을 사용하여 변수 쿼리에서 반환된 옵션과 별도의 '텍스트' 및 '값' 부분을 캡처할 수 있습니다. 변수 드롭다운 목록에 선택할 수 있는 각 값에 대한 친숙한 이름이 포함될 수 있습니다.

 예를 들어 `node_hwmon_chip_names` Prometheus 지표를 쿼리할 때 `chip_name`은 `chip` 값보다 더 친숙합니다. 다음 변수 쿼리 결과로 시작합니다.

```
node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_0",chip_name="enp216s0f0np0"} 1
node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_1",chip_name="enp216s0f0np1"} 1
node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_2",chip_name="enp216s0f0np2"} 1
node_hwmon_chip_names{chip="0000:d7:00_0_0000:d8:00_3",chip_name="enp216s0f0np3"} 1
```

 다음 정규식을 통해 전달합니다.

```
/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
enp216s0f0np2         0000:d7:00_0_0000:d8:00_2
enp216s0f0np3         0000:d7:00_0_0000:d8:00_3
```

 **참고:** `text` 및 `value` 캡처 그룹 이름만 지원됩니다.

### 패널 또는 행 반복
<a name="repeat-panels-or-rows"></a>

 *템플릿 변수*를 사용하여 동적 대시보드를 생성할 수 있습니다. 쿼리의 모든 변수는 쿼리가 데이터베이스로 전송되기 전에 변수의 현재 값으로 확장됩니다. 변수를 사용하면 모든 서비스에 단일 대시보드를 재사용할 수 있습니다.

 템플릿 변수는 전체 대시보드에서 쿼리를 동적으로 변경하는 데 매우 유용할 수 있습니다. Grafana에서 선택한 값을 기반으로 새 패널 또는 행을 동적으로 생성하도록 하려면 *반복* 기능을 사용할 수 있습니다.

#### 패널 반복
<a name="repeating-panels"></a>

 `Multi-value` 또는 `Include all value` 옵션이 켜져 있는 변수가 있는 경우 패널 하나를 선택하고 Grafana에서 선택한 모든 값에 대해 해당 패널을 반복하도록 할 수 있습니다. 패널 편집 모드의 *일반 탭*에서 *반복* 기능을 찾을 수 있습니다.

 `direction`에서는 패널 배열 방법을 제어합니다.

`horizontal`을 선택하면 패널이 나란히 배열됩니다. Grafana는 각 반복 패널의 너비를 자동으로 조정하여 전체 행을 채웁니다. 현재 행의 다른 패널을 반복 패널과 혼합할 수 없습니다.

 `Max per row`를 설정하여 Grafana에 행당 원하는 최대 패널 수를 알려줍니다. 기본값은 *4*입니다.

`vertical`을 선택하면 패널이 열에서 배열(위에서 아래 방향)됩니다. 반복되는 패널의 너비는 반복되는 첫 번째 패널(원본 템플릿)과 동일합니다.

첫 번째 패널(원본 템플릿)만 변경합니다. 변경 사항이 모든 패널에 적용되려면 동적 대시보드를 다시 빌드하도록 시작해야 합니다. 변수 값(즉, 반복의 기준)을 변경하거나 대시보드를 다시 로드하여 이 작업을 수행할 수 있습니다.

**참고**  
패널을 반복하려면 변수에서 하나 이상의 항목을 선택해야 합니다. 패널을 0회 반복하여 숨길 수 없습니다.

#### 행 반복
<a name="repeating-rows"></a>

 위에서 볼 수 있듯이 패널에서 `Multi-value` 또는 `Include all value` 선택 옵션으로 변수가 설정된 경우에도 행을 반복할 수 있습니다.

 이 기능을 켜려면 먼저 *패널 추가* 메뉴를 사용하여 새 *행*을 추가해야 합니다. 그런 다음, 행 제목에서 일시 중지하고 톱니 버튼을 선택하여 `Row Options` 구성 패널에 액세스합니다. 그런 다음, 행을 반복할 변수를 선택할 수 있습니다.

 모범 사례는 행 제목에도 변수를 사용하는 것입니다.