

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

# 데이터 쿼리 및 변환
<a name="v9-panels-query-xform"></a>

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

Grafana는 다양한 유형의 [데이터 소스](AMG-data-sources.md)를 지원합니다. 데이터 소스 *쿼리*는 Grafana에서 *변환*하고 시각화할 수 있는 데이터를 반환합니다. 각 데이터 소스는 자체 쿼리 언어를 사용하며, 데이터 소스 플러그인은 각각 쿼리 편집기라고 하는 쿼리 빌드 사용자 인터페이스를 구현합니다.

## 쿼리 정보
<a name="v9-panels-query-xform-about"></a>

Grafana 패널은 시각화를 위한 데이터를 검색하는 쿼리를 통해 데이터 소스와 통신합니다. 쿼리는 데이터 소스에서 사용하는 쿼리 언어로 작성된 질문입니다.

패널의 데이터 소스 옵션에서 쿼리 빈도 및 데이터 수집 제한을 구성할 수 있습니다. Grafana는 패널당 최대 26개의 쿼리를 지원합니다.

각 데이터 소스의 쿼리 언어에 대한 자세한 내용은 [데이터 소스](AMG-data-sources.md) 섹션에서 확인할 수 있습니다.

**쿼리 편집기**

각 데이터 소스의 *쿼리 편집기*는 고유한 기능을 활용하는 쿼리를 작성하는 데 도움이 되는 사용자 지정 사용자 인터페이스를 제공합니다.

쿼리 언어 간의 차이로 인해 각 데이터 소스 쿼리 편집기는 모양과 기능이 다릅니다. 데이터 소스에 따라 쿼리 편집기는 자동 완성 기능, 지표 이름, 변수 제안 또는 시각적 쿼리 빌드 인터페이스를 제공할 수 있습니다.

특정 데이터 소스의 고유한 쿼리 편집기 기능에 대한 자세한 내용은 해당 설명서를 참조하세요.
+ Grafana에 포함된 데이터 소스는 [기본 제공 데이터 소스](AMG-data-sources-builtin.md)를 참조하세요.
+ Grafana Enterprise 버전에 포함된 데이터 소스는 [Enterprise 데이터 소스에 연결](AMG-data-sources-enterprise.md) 섹션을 참조하세요.

**쿼리 구문**

데이터 소스는 다양한 쿼리 언어를 사용하여 데이터를 요청합니다. 특정 데이터 소스의 고유한 쿼리 언어에 대한 자세한 내용은 해당 설명서를 참조하세요.

**PostgreSQL 예제:**

```
SELECT hostname FROM host WHERE region IN($region)
```

**PromQL 예제:**

```
query_result(max_over_time(<metric>[${__range_s}s]) != <state>)
```

**특수 데이터 소스**

또한 Grafana에는 **Grafana**, **혼합**, **대시보드**와 같은 세 가지 특수 데이터 소스도 포함되어 있습니다. 자세한 내용은 데이터 소스를 참조하세요.

## 쿼리 탭 탐색
<a name="v9-panels-query-xform-navigate"></a>

패널의 **쿼리** 탭은 다음 요소로 구성됩니다.
+ **데이터 소스 선택기** - 쿼리할 데이터 소스를 선택합니다.
+ **쿼리 옵션:** 최대 데이터 검색 파라미터 및 쿼리 실행 시간 간격을 설정합니다.
+ **쿼리 검사기 버튼:** 쿼리를 보고 최적화할 수 있는 쿼리 검사기 패널을 엽니다.
+ **쿼리 편집기 목록:** 작성한 쿼리를 나열합니다.
+ **표현식:** 표현식 빌더를 사용하여 경고 표현식을 생성합니다. 표현식에 대한 자세한 내용은 [표현식 쿼리 쓰기](v9-panels-query-xform-expressions.md) 섹션을 참조하세요.

## 쿼리 추가
<a name="v9-panels-query-xform-add"></a>

쿼리는 Grafana가 대시보드 패널에서 시각화하는 데이터를 반환합니다. 패널을 생성하면 Grafana에서 기본 데이터 소스를 자동으로 선택합니다.

**쿼리를 추가하는 방법**

1. 쿼리를 추가할 패널을 편집하세요.

1. **쿼리(Query)** 탭을 선택합니다.

1. **데이터 소스** 드롭다운 메뉴를 선택하고 데이터 소스를 선택하세요.

1. **쿼리 옵션**을 선택하여 필요한 최대 데이터 포인트 수를 구성하세요. 기타 옵션에 대한 자세한 내용은 [쿼리 옵션](#v9-panels-query-xform-options) 섹션을 참조하세요.

1. 쿼리 편집기를 사용하여 쿼리를 작성하세요.

1. **적용**을 선택합니다.

Grafana에서 데이터 소스를 쿼리하고 데이터를 시각화합니다.

## 쿼리 관리
<a name="v9-panels-query-xform-manage"></a>

Grafana에서는 축소 가능한 쿼리 행으로 쿼리를 구성합니다. 각 쿼리 행에는 쿼리 편집기가 포함되어 있으며 문자(A, B, C 등)로 식별됩니다.

쿼리를 관리하기 위해 쿼리를 복사하고, 쿼리를 숨기며, 쿼리를 제거하고, 쿼리를 재정렬하며, 쿼리 편집기에 대한 도움말을 전환할 수 있습니다.

## 쿼리 옵션
<a name="v9-panels-query-xform-options"></a>

선택한 데이터 소스에 대한 설정을 보려면 데이터 소스 선택기 옆에 있는 **쿼리 옵션**을 선택합니다. 여기서 변경한 내용은 이 패널에서 수행된 쿼리에만 영향을 줍니다.

Grafana는 어두운 회색 텍스트로 표시되는 기본값을 설정합니다. 변경 사항은 흰색 텍스트로 표시됩니다. 필드를 기본 설정으로 되돌리려면 필드에서 흰색 텍스트를 삭제합니다.

패널 데이터 소스 쿼리 옵션은 다음을 포함합니다.
+ **최대 데이터 포인트** - 데이터 소스가 지원하는 경우 반환되는 각 시리즈의 최대 데이터 포인트 수를 설정합니다. 쿼리가 최대 데이터 포인트 설정보다 더 많은 데이터 포인트를 반환하는 경우 데이터 소스는 평균, 최대 또는 다른 함수별로 집계하여 반환되는 포인트 수를 줄입니다.

  포인트 수를 제한하여 쿼리 성능을 개선하거나 시각화된 라인을 평활화할 수 있습니다. 기본값은 그래프의 너비 또는 픽셀 수입니다. 그래프 패널에 표시할 공간이 있는 만큼의 데이터 포인트만 시각화할 수 있기 때문입니다.

  스트리밍 데이터에서 Grafana는 롤링 버퍼에 최대 데이터 포인트 값을 사용합니다. 스트리밍은 데이터의 지속적인 흐름이며 버퍼링은 스트림을 청크로 나눕니다. 예를 들어 Loki에서는 라이브 테일링 모드에서 데이터를 스트리밍합니다.
+ **최소 간격** - 자동으로 계산된 간격의 최소 한도(보통 최소 스크레이프 간격)을 설정합니다. 데이터 포인트를 15초마다 저장하는 경우 간격을 이보다 짧게 설정하지 않아도 됩니다. 또한 보다 대략적이지만 잘 작동하는 쿼리를 가져오기 위해 이 값을 스크레이프 간격보다 더 높은 최솟값으로 설정할 수 있습니다.
+ **간격** - 데이터 포인트를 시간별로 집계하거나 그룹화할 때 사용할 수 있는 시간 범위를 설정합니다.

  Grafana는 템플릿 쿼리에서 변수로 사용할 수 있는 적절한 간격을 자동으로 계산합니다. 변수는 초(`$__interval`) 또는 밀리초(`$__interval_ms`)로 측정됩니다.

  간격은 일반적으로 합계 또는 평균과 같은 집계 함수에 사용됩니다. 예를 들어 간격 변수(`rate(http_requests_total[$__interval])`)를 사용하는 Prometheus 쿼리입니다.

  이 자동 간격은 그래프의 너비를 기준으로 계산됩니다. 사용자가 시각화를 축소하면 간격이 증가하고 대략적인 집계가 생성됩니다. 마찬가지로 사용자가 확대하면 간격이 감소하고 보다 세분화된 집계가 생성됩니다.

  자세한 내용은 [전역 변수](v9-dash-variable-add.md#v9-dash-variable-add-global) 단원을 참조하십시오.
+ **상대 시간** - 대시보드의 오른쪽 상단에 있는 대시보드 시간 선택기에서 선택한 것과 다르게 개별 패널의 상대 시간 범위를 재정의합니다. 이를 사용하여 동일한 대시보드에 서로 다른 기간 또는 일수의 지표를 표시할 수 있습니다.
**참고**  
대시보드의 시간 범위가 절대값인 경우 패널 시간 재정의가 영향을 미치지 않습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/grafana/latest/userguide/v9-panels-query-xform.html)
+ **시간 전환** - 시간 선택기에 상대적인 시작 및 종료를 전환하여 개별 패널의 시간 범위를 재정의합니다. 예를 들어 패널의 시간 범위를 대시보드 시간 선택기보다 2시간 빠르게 전환할 수 있습니다.
**참고**  
대시보드의 시간 범위가 절대값인 경우 패널 시간 재정의가 영향을 미치지 않습니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/grafana/latest/userguide/v9-panels-query-xform.html)
+ **캐시 제한 시간** - *(데이터 소스에서 사용할 수 있는 경우에만 표시됨)* 시계열 저장소에 쿼리 캐시가 있는 경우 기본 캐시 제한 시간을 재정의합니다. 이 값을 초 단위의 숫자 값으로 지정합니다.

# 표현식 쿼리 쓰기
<a name="v9-panels-query-xform-expressions"></a>

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

서버 측 표현식을 사용하면 수학 및 기타 연산을 사용하여 쿼리에서 반환된 데이터를 조작할 수 있습니다. 표현식은 새 데이터를 생성하고 데이터 소스에서 반환하는 데이터를 조작하지 않습니다.

## 표현식 정보
<a name="v9-panels-query-about"></a>

서버 측 표현식을 사용하면 수학 및 기타 연산을 사용하여 쿼리에서 반환된 데이터를 조작할 수 있습니다. 표현식에 데이터를 허용 가능한 입력으로 사용할 수 있도록 일부 사소한 데이터 구조 조정을 제외하고 표현식에서는 새 데이터를 생성하고 데이터 소스에서 반환하는 데이터를 조작하지 않습니다.

**표현식 사용**

표현식은 주로 [Grafana 알림](v9-alerts.md)에서 사용됩니다. 처리는 서버 측에서 수행되므로 표현식은 브라우저 세션 없이 작동할 수 있습니다. 그러나 표현식은 백엔드 데이터 소스 및 시각화와 함께 사용할 수도 있습니다.

**참고**  
표현식은 레거시 대시보드 알림에서 작동하지 않습니다.

표현식은 서로 다른 데이터 소스의 쿼리를 결합할 수 있도록 하거나 데이터 소스에서 사용할 수 없는 작업을 제공하여 데이터 소스를 보강하기 위한 기능입니다.

**참고**  
가능하면 데이터 소스 내에서 데이터 처리를 수행해야 합니다. 처리를 위해 스토리지에서 Grafana 서버로 데이터를 복사하는 것은 비효율적이므로 표현식은 경량 데이터 처리를 목표로 합니다.

표현식은 시계열 또는 숫자 데이터를 반환하는 데이터 소스 쿼리와 함께 작동합니다. 또한 [다차원 데이터](getting-started-grafanaui.md#time-series-dimensions)에서도 작동합니다. 예를 들어 여러 시리즈를 반환하는 쿼리가 있으며 여기에서는 각 시리즈가 레이블 또는 태그로 식별됩니다.

개별 표현식은 하나 이상의 쿼리 또는 기타 표현식을 입력으로 사용하여 데이터를 결과에 추가합니다. 각 개별 표현식 또는 쿼리는 RefID로 알려진 이름 지정된 식별자(예: 기본 문자 `A` 또는 `B`)인 변수로 표시됩니다.

개별 표현식의 출력 또는 다른 표현식의 데이터 소스 쿼리를 참조하기 위해 이 식별자는 변수로 사용됩니다.

**표현식 유형**

표현식은 두 가지 유형의 데이터에서 작동합니다.
+ 시계열 컬렉션.
+ 각 번호가 항목인 숫자 컬렉션.

각 컬렉션은 단일 데이터 소스 쿼리 또는 표현식에서 반환되며 RefID로 표시됩니다. 각 컬렉션은 하나의 세트로,세트의 각 항목은 [레이블](getting-started-grafanaui.md#labels) 또는 키-값 페어로 저장되는 차원으로 고유하게 식별됩니다.

**데이터 소스 쿼리**

서버 측 표현식은 백엔드 데이터 소스에 대한 데이터 소스 쿼리만 지원합니다. 데이터는 일반적으로 레이블 지정된 시계열 데이터로 간주됩니다. 이후에 표현식에서 오류를 더 잘 처리할 수 있도록 쿼리 반환 유형(숫자 또는 시계열) 데이터의 어설션을 추가했습니다.

표현식과 함께 사용되는 데이터 소스 쿼리는 표현식 엔진에서 실행됩니다. 이렇게 하면 데이터를 데이터 프레임당 하나의 시계열 또는 하나의 숫자로 재구성합니다. 예를 들어 테이블 보기에서 한 프레임에 여러 시리즈를 반환하는 데이터 소스를 사용하는 경우 표현식으로 실행할 때 다르게 보일 수 있습니다.

현재 시간, 문자열 열 및 하나의 숫자 열이 없는 데이터 프레임을 사용할 때 시계열 이외의 숫자 형식만 지원됩니다.


| Loc | Host | Avg\$1CPU | 
| --- | --- | --- | 
|  MIA  |  A  |  1  | 
|  NYC  |  B  |  2  | 

위의 예제에서는 표현식에서 작동하는 숫자를 생성합니다. 문자열 열은 레이블이 되고 숫자 열은 해당 값이 됩니다. 예를 들어 값이 1인 `{"Loc": "MIA", "Host": "A"}`가 있습니다.

**운영**

표현식에서 수학, 축소 및 리샘플링 연산을 사용할 수 있습니다.

**수학 연산**

수학은 시계열 또는 숫자 데이터의 자유 형식 수학 공식에 사용됩니다. 수학 연산은 숫자와 시계열을 입력으로 가져와 다른 숫자와 시계열로 변경합니다.

다른 쿼리 또는 표현식의 데이터는 `$A`와 같이 달러 기호가 붙은 RefID 접두사로 참조됩니다. 변수의 이름에 공백이 있는 경우 `${my variable}`과 같은 괄호 구문을 사용할 수 있습니다.

숫자 상수는 십진수(`2.24`), 8진수(선행 0 포함, 예: `072`) 또는 16진수(선행 0x 포힘, 예: `0x2A`)일 수 있습니다. 지수 및 기호도 지원됩니다(예: `-0.8e-2`).

**연산자**

산술(`+`, 바이너리 및 단항 `-`, `*`, `/`, `%`, 지수 `**`), 관계형(`<`, `>`, `==`, `!=`, `>=`, `<=`), 논리(`&&`, `||` 및 단항 `!`) 연산자가 지원됩니다.

연산에서 데이터 동작 방식은 데이터가 숫자인지 시계열 데이터인지에 따라 달라집니다.

`$A + $B` 또는 `$A || $B`와 같은 바이너리 연산에서 연산자는 데이터 유형에 따라 다음과 같은 방식으로 적용됩니다.
+ `$A` 및 `$B`가 모두 숫자인 경우 두 숫자 사이에서 연산이 수행됩니다.
+ 한 변수가 숫자이고 다른 변수가 시계열인 경우 시계열에서 각 포인트 값과 숫자 사이의 연산이 수행됩니다.
+ `$A` 및 `$B`가 모두 시계열 데이터인 경우 두 시리즈의 각 값 사이에서 연산은 `$A` 및 `$B`에 모두 존재하는 각 타임스탬프에 수행됩니다. `Resample` 연산을 사용하여 타임스탬프를 정렬할 수 있습니다.

요약:
+ 번호 OP 번호 = 번호
+ 숫자 OP 시리즈 = 시리즈
+ 시리즈 OP 시리즈 = 시리즈

표현식은 단일 변수로 표시되는 여러 시리즈 또는 숫자와 함께 작동하므로 바이너리 연산도 두 변수 간에 합집합(조인)을 수행합니다. 각 개별 시리즈 또는 숫자와 연결된 식별 레이블을 기반으로 수행됩니다.

따라서 `$A`에서 `{host=web01}`과 같은 레이블을 포함하는 숫자와 `$B`의 다른 숫자가 있는 경우 각 변수 내 두 항목 사이에서 연산이 수행되고 결과에서는 동일한 레이블을 공유합니다. 이 합집합의 동작 규칙은 다음과 같습니다.
+ 레이블이 없는 항목은 모든 항목에 조인됩니다.
+ `$A` 및 `$B`에 각각 하나의 항목(시리즈 하나 또는 숫자 하나)만 포함된 경우 조인됩니다.
+ 레이블이 정확히 일치하는 경우 조인됩니다.
+ 레이블이 다른 레이블의 하위 세트인 경우(예: `$A`의 항목에 `{host=A,dc=MIA}` 레이블이 지정되고 `$B`의 항목에 `{host=A}` 레이블이 지정된 경우) 조인됩니다.
+ `$A`와 같은 변수 내에서 각 항목에 대해 태그 키가 서로 다르면 조인 도작은 정의되지 않습니다.

관계형 연산자와 논리 연산자는 거짓인 경우 0, 참인 경우 1을 반환합니다.

**수학 함수**

대부분의 함수는 자체 표현식 연산에 존재하지만 수학 연산에는 수학 연산자 또는 기호와 유사한 일부 함수가 있습니다. 함수가 숫자 또는 시리즈를 가져올 수 있는 경우 인수와 동일한 유형이 반환됩니다. 시리즈인 경우 시리즈의 각 포인트 값에 대해 연산이 수행됩니다.

*abs*

abs는 인수의 절댓값을 반환하며, 이는 숫자 또는 시리즈일 수 있습니다. 예를 들면 `abs(-1)` 또는 `abs($A)`입니다.

*is\$1inf*

is\$1inf는 숫자 또는 시리즈를 가져와 `Inf` 값에 대해 `1`(음수 또는 양수), 기타 값에 대해 `0`을 반환합니다. 예: `is_inf($A)`.

**참고**  
예를 들어 특별히 음의 무한대를 확인해야 하는 경우 `$A == infn()`과 같은 비교를 수행할 수 있습니다.

*is\$1nan*

is\$1nan은 숫자 또는 시리즈를 가져와 `NaN` 값에 대해 `1`, 기타 값에 대해 `0`을 반환합니다. 예: `is_nan($A)`. 이 함수는 `NaN`이 `NaN`과 같지 않으므로 존재합니다.

*is\$1null*

is\$1null은 숫자 또는 시리즈를 가져와 `null` 값에 대해 `1`, 기타 값에 대해 `0`을 반환합니다. 예: `is_null($A)`.

*is\$1number*

is\$1number는 숫자 또는 시리즈를 가져와 모든 실수 값에 대해 `1`, 기타 값((`null`, `Inf+`, `Inf-`, `NaN`)에 대해 `0`을 반환합니다. 예: `is_number($A)`.

*log*

Log는 인수의 자연 로그를 반환하며, 이는 숫자 또는 시리즈일 수 있습니다. 값이 0보다 작으면 `NaN`이 반환됩니다. 예를 들면 `log(-1)` 또는 `log($A)`입니다.

*inf, infn, nan, null*

inf, infn, nan 및 null 함수는 모두 이름의 단일 값을 반환합니다. 주로 테스트용으로 존재합니다. 예시: `null()`.

*round*

Round는 반올림된 정수 값을 반환합니다. 예: `round(3.123)` 또는 `round($A)`.

**ceil

Ceil은 숫자를 가장 가까운 정수 값으로 올림합니다. 예를 들어, `ceil(3.123)`은 `4`을 반환합니다.

**floor

Floor는 숫자를 가장 가까운 정수 값으로 내림합니다. 예를 들어, `floor(3.123`)은 `3`을 반환합니다.

**축소**

축소는 쿼리 또는 표현식에서 반환된 하나 이상의 시계열을 가져와 각 시리즈를 단일 숫자로 바꿉니다. 시계열의 레이블은 출력된 각 축소된 번호에서 레이블로 유지됩니다.

*필드:*
+ **함수** - 사용할 축소 함수
+ **입력** - 리샘플링할 변수(refID, 예: `A`)
+ **모드** - 시리즈에 숫자가 아닌 값(null, NaN, \$1-Inf)이 포함된 경우 축소 함수의 제어 동작 허용

**축소 함수**

*개수*

Count는 각 시리즈의 포인트 수를 반환합니다.

*Mean*

Mean은 각 시리즈에서 모든 값의 합계를 해당 시리즈의 포인트 수로 나눈 값을 반환합니다. `strict` 모드에서 시리즈의 값이 null 또는 nan이거나 시리즈가 비어 있는 경우 NaN이 반환됩니다.

**Min 및 Max

Min 및 Max는 각각 시리즈의 최솟값 또는 최댓값을 반환합니다. `strict` 모드에서 시리즈의 값이 null 또는 nan이거나 시리즈가 비어 있는 경우 NaN이 반환됩니다.

*합계*

Sum은 시리즈에 있는 모든 값의 합계를 반환합니다. 시리즈 길이가 0인 경우 합계는 0입니다. `strict` 모드에서 시리즈에 NaN 또는 Null 값이 있는 경우 NaN이 반환됩니다.

**Last

Last는 시리즈의 마지막 숫자를 반환합니다. 시리즈에 값이 없는 경우 NaN을 반환합니다.

**축소 모드**

*Strict*

Strict 모드인 경우 입력 시리즈는 그대로 처리됩니다. 시리즈의 값이 숫자가 아닌 경우(null, NaN 또는 \$1-Inf) NaN이 반환됩니다.

*숫자 이외 항목 삭제*

이 모드에서 축소 함수를 실행하기 전에 입력 시리즈의 숫자가 아닌 모든 값(null, NaN 또는 \$1-Inf)은 필터링됩니다.

*숫자 이외 항목 대체*

이 모드에서 숫자가 아닌 모든 값은 사전 정의된 값으로 대체됩니다.

**Resample**

Resample은 각 시계열의 타임스탬프를 일관된 시간 간격으로 변경합니다. 기본 사용 사례는 동일한 타임스탬프를 공유하지 않는 시계열을 리샘플링하여 이들 사이에서 수학 연산을 수행할 수 있도록 하는 것입니다. 두 시리즈 각각을 리샘플링한 다음, 리샘플링된 변수를 참조하는 수학 연산에서 수행할 수 있습니다.

*필드:*
+ **입력** - 리샘플링할 시계열 데이터의 변수(refID, 예: `A`)
+ **리샘플링 대상** - 리샘플링할 시간의 지속 시간(예: `10s.`). 단위는 `s`(초의 경우), `m`(분의 경우), `h`(시간의 경우), `d`(일의 경우), `w`(주의 경우), `y`(년의 경우)일 수 있습니다.
+ **다운샘플링** - 기간 샘플당 데이터 포인트가 두 개 이상 있을 때 사용할 축소 함수. 동작 세부 정보는 축소 연산을 참조하세요.
+ **업샘플링** - 데이터 포인트가 없는 기간 샘플을 채우는 데 사용하는 방법.
  + **pad**는 알려진 마지막 값으로 채움
  + **backfill**은 알려진 다음 값을 사용함
  + **fillna**는 NaN으로 빈 샘플 기간을 채움

## 표현식 작성
<a name="v9-panels-query-write"></a>

데이터 소스가 지원하는 경우 Grafana는 **표현식** 버튼을 표시하고 쿼리 편집기 목록에 기존 표현식을 표시합니다.

**표현식을 작성하는 방법**

1. 패널을 여세요.

1. 쿼리 아래에서 **표현식**을 선택하세요.

1. **연산** 필드에서 작성할 표현식 유형을 선택하세요.

1. 표현식을 작성하세요.

1. **적용**을 선택합니다.

## 특수 사례
<a name="v9-panels-query-special"></a>

쿼리된 데이터 소스에서 시리즈 또는 숫자를 반환하지 않으면 표현식 엔진은 `NoData`를 반환합니다. 예를 들어 요청에 표현식으로 병합되는 두 개의 데이터 소스 쿼리가 포함된 경우 데이터 소스 쿼리 중 하나 이상에서 `NoData`가 반환되면 전체 쿼리에 대해 반환된 결과는 `NoData`입니다. Grafana 알림이 `NoData` 결과를 처리하는 방법에 대한 자세한 내용은 [데이터 없음 또는 오류 사례 처리](v9-alerting-managerules-grafana.md#v9-alerting-rule-no-data-error) 섹션을 참조하세요.

# 쿼리 결과를 다른 패널과 공유
<a name="v9-panels-query-share"></a>

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

Grafana를 사용하면 한 패널의 쿼리 결과를 대시보드의 다른 패널에서 사용할 수 있습니다. 패널 간에 쿼리 결과를 공유하면 데이터 소스에 대한 쿼리 수가 줄어들어 대시보드 성능이 향상될 수 있습니다.

대시보드 데이터 소스를 사용하면 대시보드에서 결과를 공유하려는 쿼리가 포함된 패널을 선택할 수 있습니다. 각 패널에 대해 별도의 쿼리를 전송하는 대신 Grafana는 하나의 쿼리를 전송하고 다른 패널은 쿼리 결과를 사용하여 시각화를 구성합니다.

이 전략은 예를 들어 동일한 데이터를 시각화하는 여러 패널이 있을 때 발생하는 쿼리 수를 크게 줄일 수 있습니다.

**쿼리 결과를 공유하는 방법**

1. [대시보드를 생성하세요](v9-dash-creating.md).

1. 제목을 `Source panel`로 변경하세요. 이 패널을 다른 패널의 소스로 사용합니다.

1. 공유하려는 쿼리를 정의하세요.

   데이터 소스를 사용할 수 없는 경우 테스트에 사용할 수 있는 무작위 시계열을 반환하는 **TestData** 데이터 소스를 사용할 수 있습니다.

1. 두 번째 패널을 추가한 다음, 쿼리 편집기에서 **대시보드** 데이터 소스를 선택하세요.

1. **패널 목록의 결과 사용**에서 생성한 첫 번째 패널을 선택하세요.

이제 소스 패널에 정의된 모든 쿼리를 새 패널에서 사용할 수 있습니다. 소스 패널에서 만든 쿼리는 여러 패널과 공유할 수 있습니다.

쿼리 중 하나를 클릭하여 정의된 패널로 이동할 수 있습니다.

# 데이터 변환
<a name="v9-panels-xform"></a>

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

변환은 시스템에서 시각화를 적용하기 전에 쿼리에서 반환된 데이터를 조작하는 강력한 방법입니다. 변환을 사용하여 다음을 수행할 수 있습니다.
+ 필드 이름 바꾸기
+ 시계열 데이터 조인
+ 쿼리 간 수학 연산 수행
+ 한 변환의 출력을 다른 변환의 입력으로 사용

동일한 데이터세트의 여러 보기에 의존하는 사용자의 경우 변환을 통해 여러 대시보드를 효율적으로 생성하고 유지할 수 있습니다.

또한 한 변환의 출력을 다른 변환에 대한 입력으로 사용하여 성능을 개선할 수 있습니다.

**참고**  
때때로 시스템에서 변환된 데이터를 그래프로 표시할 수 없습니다. 이 경우 시각화 위의 **테이블 보기** 토글을 클릭하여 데이터의 테이블 보기로 전환합니다. 그러면 변환의 최종 결과를 이해하는 데 도움이 될 수 있습니다.

## 변환 유형
<a name="v9-panels-xform-types"></a>

Grafana에서는 데이터를 변환할 수 있는 다양한 방법을 제공합니다. 다음은 변환 함수의 전체 목록입니다.

## 변환 순서
<a name="v9-panels-xform-order"></a>

변환이 여러 개 있는 경우 Grafana는 나열된 순서대로 변환을 적용합니다. 각 변환은 결과 세트를 생성한 다음, 처리 파이프라인의 다음 변환으로 전달합니다.

Grafana에서 변환을 적용하는 순서는 결과에 직접적인 영향을 미칩니다. 예를 들어 축소 변환을 사용하여 한 열의 모든 결과를 단일 값으로 압축하는 경우 해당 단일 값에만 변환을 적용할 수 있습니다.

## 데이터에 변환 함수 추가
<a name="v9-panels-xform-add"></a>

다음 단계에서는 데이터에 변환을 추가하는 방법을 안내합니다.

**패널에 변환을 추가하는 방법**

1. 하나 이상의 변환을 추가하려는 패널로 이동하세요.

1. 패널 제목을 선택하고 **편집**을 클릭하세요.

1. [**변환(Transform)**] 탭을 선택합니다.

1. 변환을 선택하세요. 변환 행이 나타납니다. 여기서 변환 옵션을 구성합니다.

1. 다른 변환을 적용하려면 **변환 추가**를 선택하세요. 이 변환은 이전 변환에서 반환된 결과 세트에 따라 작동한다는 점에 유의하세요.

## 변환 디버깅
<a name="v9-panels-xform-debug"></a>

변환의 입력 및 출력 결과 세트를 보려면 변환 행 오른쪽에 있는 버그 아이콘을 선택합니다.

입력 및 출력 결과 세트는 변환을 디버깅하는 데 도움이 될 수 있습니다.

## 변환 삭제
<a name="v9-panels-xform-delete"></a>

필요하지 않은 변환은 제거하는 것이 좋습니다. 변환을 삭제하면 시각화에서 데이터가 제거됩니다.

사전 조건:

변환에 의존하는 모든 대시보드를 식별하고 영향을 받는 대시보드 사용자에게 알립니다.

**변환을 삭제하는 방법**

1. 편집하도록 패널을 여세요.

1. [**변환(Transform)**] 탭을 선택합니다.

1. 삭제하려는 변환 옆에 있는 휴지통 아이콘을 선택하세요.

## 변환 함수
<a name="v9-panels-xform-functions"></a>

데이터에서 다음 변환을 수행할 수 있습니다.

**계산에서 필드 추가**

이 변환을 사용하여 두 개의 다른 필드에서 계산된 새 필드를 추가합니다. 각 변환을 통해 하나의 새 필드를 추가할 수 있습니다.
+ **모드** - 모드를 선택합니다.
  + **행 축소** - 선택한 필드의 각 행에서 선택한 계산을 독립적으로 적용합니다.
  + **바이너리 옵션** - 선택한 두 필드의 단일 행 값에 기본 수학 작업(덧셈, 곱셈 등)을 적용합니다.
+ **필드 이름** - 새 필드의 계산에 사용할 필드 이름을 선택합니다.
+ **계산** - **행 축소** 모드를 선택하면 **계산** 필드가 나타납니다. 필드를 클릭하면 새 필드를 생성하는 데 사용할 수 있는 계산 선택 사항 목록이 표시됩니다. 사용 가능한 계산에 대한 자세한 내용은 [계산 유형](v9-panels-calculation-types.md)을 참조하세요.
+ **연산** - **바이너리 옵션** 모드를 선택하면 **연산** 필드가 나타납니다. 이러한 필드를 사용하면 선택한 두 필드의 단일 행에 있는 값에 대해 기본 수학 연산을 수행할 수 있습니다. 바이너리 연산에 숫자 값을 사용할 수도 있습니다.
+ **별칭** – (선택 사항) 새 필드의 이름을 입력합니다. 이 항목을 비워 두면 계산과 일치하도록 필드 이름이 지정됩니다.
+ **모든 필드 바꾸기** - (선택 사항) 다른 모든 필드를 숨기고 시각화에 계산된 필드만 표시하려면 이 옵션을 선택합니다.

**필드 연결**

이 변환은 모든 프레임의 모든 필드를 하나의 결과로 결합합니다. 이 두 쿼리를 고려하세요.

쿼리 A:


| 임시 파일  | 가동 시간 | 
| --- | --- | 
|  15.4  |  1230233  | 

쿼리 B:


| AQI | 오류 | 
| --- | --- | 
|  3.2  |  5  | 

필드를 연결하면 데이터 프레임은 다음과 같습니다.


| 임시 파일  | 가동 시간 | AQI | 오류 | 
| --- | --- | --- | --- | 
|  15.4  |  1230233  |  3.2  |  5  | 

**쿼리 결과에서 구성**

이 변환을 사용하면 쿼리 하나를 선택하고 여기에서 **최소**, **최대**, **단위** 및 **임계치**와 같은 표준 옵션을 추출하여 다른 쿼리 결과에 적용할 수 있습니다. 그러면 동적 쿼리 기반 시각화 구성을 지원합니다.

구성 쿼리 결과의 모든 행에 대해 고유한 구성을 추출하려면 행에서 필드로 변환을 시도합니다.

**옵션**
+ **구성 쿼리** - 구성으로 사용할 데이터를 반환하는 쿼리를 선택합니다.
+ **적용 대상** - 구성을 적용할 필드 또는 시리즈를 선택합니다.
+ **옵션에 적용** - **적용 대상**에서 선택한 항목에 따라 필드 유형 또는 필드 이름 정규식.

**필드 유형 변환**

이 변환은 지정된 필드의 필드 유형을 변경합니다.
+ **필드** - 사용 가능한 필드 중에서 선택
+ **유형** - 변환할 FieldType 선택
  + **숫자** - 값 번호를 만들려고 시도
  + **문자열** - 값을 문자열로 구성
  + **시간** - 값을 시간으로 구문 분석하려고 시도
    + yyyy-mm-dd 또는 DD MM YYYY hh:mm:ss와 같은 문자열에 의한 입력으로 DateFormat을 지정하는 옵션을 표시합니다.
  + **부울** - 값을 부울로 구성

예를 들어 다음 쿼리에서는 시간 필드를 시간으로 선택하고 날짜 형식을 YYYY로 선택하여 수정할 수 있습니다.


| Time | 표시 | 값 | 
| --- | --- | --- | 
|  7/1/2017  |  위  |  25  | 
|  8/2/2018  |  아래  |  22  | 
|  9/2/2019  |  아래  |  29  | 
|  10/4/2020  |  위  |  22  | 

결과:


| Time | 표시 | 값 | 
| --- | --- | --- | 
|  1/1/2017  |  위  |  25  | 
|  1/1/2018  |  아래  |  22  | 
|  1/1/2019  |  아래  |  29  | 
|  1/1/2020  |  위  |  22  | 

**이름을 기준으로 데이터 필터링**

이 변환을 사용하여 쿼리 결과의 일부를 제거합니다.

Grafana에서는 **식별자** 필드와 이 다음에 다음 쿼리에서 반환된 필드를 표시합니다.

다음 두 가지 방법 중 하나로 필터를 적용할 수 있습니다.
+ 정규식을 입력합니다.
+ 필드를 선택하여 해당 필드에서 필터링을 전환합니다. 필터링된 필드는 어두운 회색 텍스트로 표시되고 필터링되지 않은 필드는 흰색 텍스트로 표시됩니다.

**쿼리를 기준으로 데이터 필터링**

하나 이상의 쿼리를 숨기려면 여러 쿼리가 있는 패널에서 이 변환을 사용합니다.

Grafana에서는 쿼리 식별 문자를 어두운 회색 텍스트로 표시합니다. 쿼리 식별자를 클릭하여 필터링을 전환합니다. 쿼리 문자가 흰색이면 결과가 표시됩니다. 쿼리 문자가 어두운 색이면 결과가 숨겨집니다.

**참고**  
이 데이터 소스는 반환된 데이터와 쿼리의 상관 관계를 지원하지 않으므로 Graphite에서는 이 변환을 사용할 수 없습니다.

**값을 기준으로 데이터 필터링**

이 변환을 통해 Grafana에서 직접 데이터를 필터링하고 쿼리 결과에서 일부 데이터 포인트를 제거할 수 있습니다. 정의한 하나 이상의 조건과 일치하는 데이터를 포함하거나 제외할 수 있습니다. 조건은 선택한 필드에 적용됩니다.

이 변환은 기본적으로 값을 기준으로 데이터 소스를 필터링하지 않는 경우에 유용합니다. 공유 쿼리를 사용하는 경우 이 변환을 사용하여 값을 좁혀 표시할 수도 있습니다.

모든 필드에 대해 사용할 수 있는 조건은 다음과 같습니다.
+ **정규식** - 정규식과 일치
+ **Null임** - 값이 null인 경우 일치
+ **Null이 아님** - 값이 null이 아닌 경우 일치
+ **같음** - 값이 지정된 값과 같은 경우 일치
+ **다름** - 값이 지정된 값과 다른 경우 일치

숫자 필드에 대해 사용할 수 있는 조건은 다음과 같습니다.
+ **초과** - 값이 지정된 값보다 큰 경우 일치
+ **미만** - 값이 지정된 값보다 낮은 경우 일치
+ **이상** - 값이 크거나 같은 경우 일치
+ **이하** - 값이 작거나 같은 경우 일치
+ **범위** - 지정된 최솟값과 최댓값 사이의 범위(경계 포함) 일치

다음 데이터세트를 고려합니다.


| Time | Temperature | Altitude | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:23  |  32  |  101  | 
|  7/7/2020 오전 11:34:22  |  28  |  125  | 
|  7/7/2020 오전 11:34:21  |  26  |  110  | 
|  7/7/2020 오전 11:34:20  |  23  |  98  | 
|  7/7/2020 오전 10:32:24  |  31  |  95  | 
|  7/7/2020 오전 10:31:22  |  20  |  85  | 
|  7/7/2020 오전 9:30:57  |  19  |  101  | 

온도가 30°C 미만인 데이터 포인트를 **포함**하면 구성은 다음과 같이 표시됩니다.
+ **필터 유형** - `Include`
+ **조건** - `Temperature`가 `Lower Than 30`과 일치하는 행

그리고 30°C 미만의 온도만 포함된 다음과 같은 결과를 얻을 수 있습니다.


| Time | Temperature | Altitude | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:22  |  28  |  125  | 
|  7/7/2020 오전 11:34:21  |  26  |  110  | 
|  7/7/2020 오전 11:34:20  |  23  |  98  | 
|  7/7/2020 오전 10:31:22  |  20  |  85  | 
|  7/7/2020 오전 9:30:57  |  19  |  101  | 

필터에 둘 이상의 조건을 추가할 수 있습니다. 예를 들어 고도가 100보다 큰 경우에만 데이터를 포함할 수 있습니다. 이렇게 하려면 다음 구성에 해당 조건을 추가합니다.
+ 필터 유형 - 조건과 `Match All`하는 `Include` 행
+ 조건 1 - `Temperature` 항목이 `30` `Lower` 조건에 일치하는 행
+ 조건 2 - `Altitude` 항목이 `100` `Greater` 조건에 일치하는 행

조건이 둘 이상인 경우 추가한 조건과 **임의 일치** 또는 **모두 일치** 조건을 충족하는 행에 작업(포함/제외)을 적용할지 여부를 선택할 수 있습니다.

위의 예제에서는 30 미만의 온도 및(AND) 100을 초과하는 고도에 해당하는 행을 포함하기 때문에 **모두 일치**를 선택했습니다. 대신 30 미만의 온도 또는(OR) 100을 초과하는 고도에 해당하는 행을 포함하려면 **임의 일치**를 선택합니다. 여기에는 온도가 32°C지만(첫 번째 조건과 일치하지 않음) 고도가 101인(두 번째 조건과 일치함) 경우 포함되므로, 원본 데이터의 첫 번째 행이 포함됩니다.

유효하지 않거나 불완전하게 구성된 조건은 무시됩니다.

**그룹화 기준**

이 변환은 지정된 필드(열) 값을 기준으로 데이터를 그룹화하고 각 그룹에 대한 계산을 처리합니다. 계산 선택 목록을 보려는 경우에 클릭합니다.

다음은 원본 데이터 예제입니다.


| Time | 서버 ID | CPU 온도 | 서버 상태 | 
| --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  server 1  |  80  |  Shutdown  | 
|  7/7/2020 오전 11:34:20  |  server 3  |  62  |  정상  | 
|  7/7/2020 오전 10:32:20  |  server 2  |  90  |  Overload  | 
|  7/7/2020 오전 10:31:22  |  server 3  |  55  |  정상  | 
|  7/7/2020 오전 9:30:57  |  server 3  |  62  |  Rebooting  | 
|  7/7/2020 오전 9:30:05  |  server 2  |  88  |  정상  | 
|  7/7/2020 오전 9:28:06  |  server 1  |  80  |  정상  | 
|  7/7/2020 오전 9:25:05  |  server 2  |  88  |  정상  | 
|  7/7/2020 오전 9:23:07  |  server 1  |  86  |  정상  | 

이 변환은 두 단계로 구성됩니다. 먼저 데이터를 그룹화할 기준이 되는 하나 이상의 필드를 지정합니다. 그러면 정렬한 것처럼 해당 필드의 모든 동일한 값이 함께 그룹화됩니다. 예를 들어 서버 ID 필드를 기준으로 그룹화하면 다음과 같이 데이터를 그룹화합니다.


| Time | 서버 ID | CPU 온도 | 서버 상태 | 
| --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  server 1  |  80  |  Shutdown  | 
|  7/7/2020 오전 9:28:06  |  server 1  |  80  |  정상  | 
|  7/7/2020 오전 9:23:07  |  server 1  |  86  |  정상  | 
|  7/7/2020 오전 10:32:20  |  server 2  |  90  |  Overload  | 
|  7/7/2020 오전 9:30:05  |  server 2  |  88  |  정상  | 
|  7/7/2020 오전 9:25:05  |  server 2  |  88  |  정상  | 
|  7/7/2020 오전 11:34:20  |  server 3  |  62  |  정상  | 
|  7/7/2020 오전 10:31:22  |  server 3  |  55  |  정상  | 
|  7/7/2020 오전 9:30:57  |  server 3  |  62  |  Rebooting  | 

서버 ID의 동일한 값을 가진 모든 행이 함께 그룹화됩니다.

데이터를 그룹화할 기준이 되는 필드를 선택한 후 다른 필드에 다양한 계산을 추가할 수 있으며 계산을 각 행 그룹에 적용합니다. 예를 들어 각 서버의 평균 CPU 온도를 계산할 수 있습니다. 따라서 CPU 온도 필드에 적용된 *평균* 계산을 추가하여 다음을 얻을 수 있습니다.


| 서버 ID | CPU 온도(평균) | 
| --- | --- | 
|  server 1  |  82  | 
|  server 2  |  88.6  | 
|  server 3  |  59.6  | 

그리고 둘 이상의 계산을 추가할 수 있습니다. 예를 들면 다음과 같습니다.
+ 시간 필드의 경우 *마지막* 값을 계산하여 각 서버에 마지막 데이터 포인트가 수신된 시기를 알 수 있습니다.
+ 서버 상태 필드의 경우 *마지막* 값을 계산하여 각 서버에 대한 마지막 상태 값을 알 수 있습니다.
+ 온도 필드의 경우 *마지막* 값을 계산하여 각 서버에 대해 모니터링되는 최신 온도를 알 수도 있습니다.

그러면 다음을 얻을 수 있습니다.


| 서버 ID | CPU 온도(평균) | CPU 온도(마지막) | 시간(마지막) | 서버 상태(마지막) | 
| --- | --- | --- | --- | --- | 
|  server 1  |  82  |  80  |  7/7/2020 오전 11:34:20  |  Shutdown  | 
|  server 2  |  88.6  |  90  |  7/7/2020 오전 10:32:20  |  Overload  | 
|  server 3  |  59.6  |  62  |  7/7/2020 오전 11:34:20  |  정상  | 

이 변환을 통해 시계열에서 키 정보를 추출하여 편리한 방식으로 표시할 수 있습니다.

**필드로 조인**

이 변환을 사용하여 여러 결과를 단일 테이블에 조인합니다. 여러 시계열 결과를 공유 시간 필드가 있는 단일 와이드 테이블로 변환하는 데 특히 유용합니다.

*내부 조인*

내부 조인은 모든 테이블이 선택한 필드와 동일한 값을 공유하는 여러 테이블의 데이터를 병합합니다. 이 유형의 조인에는 모든 결과에서 값이 일치하지 않는 데이터가 제외됩니다.

이 변환을 사용하여 여러 쿼리의 결과를 하나의 결과로 결합하고(통과된 조인 필드 또는 첫 번째 열에서 결합) 조인에 실패한 행을 삭제합니다.

다음 예제에서는 두 쿼리에서 테이블 데이터를 반환합니다. 내부 조인 변환을 적용하기 전에 두 개의 개별 테이블로 시각화됩니다.

쿼리 A:


| Time | 작업 | 가동 시간 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  노드  |  25260122  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  123001233  | 
|  7/7/2020 오전 11:14:20  |  postgre  |  345001233  | 

쿼리 B:


| Time | Server | 오류 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  server 1  |  15  | 
|  7/7/2020 오전 11:24:20  |  server 2  |  5  | 
|  7/7/2020 오전 11:04:20  |  server 3  |  10  | 

내부 조인 변환을 적용한 후 결과는 다음과 같습니다.


| Time | 작업 | 가동 시간 | Server | 오류 | 
| --- | --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  노드  |  25260122  |  server 1  |  15  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  123001233  |  server 2  |  5  | 

*외부 조인*

외부 조인에는 내부 조인의 모든 데이터와 값이 모든 입력에서 일치하지 않는 행이 포함됩니다. 내부 조인은 시간 필드에서 쿼리 A와 쿼리 B를 조인하지만 외부 조인은 시간 필드에서 일치하지 않는 모든 행을 포함합니다.

다음 예제에서는 두 쿼리에서 테이블 데이터를 반환합니다. 외부 조인 변환을 적용하기 전에 두 테이블로 시각화됩니다.

쿼리 A:


| Time | 작업 | 가동 시간 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  노드  |  25260122  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  123001233  | 
|  7/7/2020 오전 11:14:20  |  postgre  |  345001233  | 

쿼리 B:


| Time | Server | 오류 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  server 1  |  15  | 
|  7/7/2020 오전 11:24:20  |  server 2  |  5  | 
|  7/7/2020 오전 11:04:20  |  server 3  |  10  | 

외부 조인 변환을 적용한 후 결과는 다음과 같습니다.


| Time | 작업 | 가동 시간 | Server | 오류 | 
| --- | --- | --- | --- | --- | 
|  7/7/2020 오전 11:04:20  |    |    |  server 3  |  10  | 
|  7/7/2020 오전 11:14:20  |  postgre  |  345001233  |    |    | 
|  7/7/2020 오전 11:34:20  |  노드  |  25260122  |  server 1  |  15  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  123001233  |  server 2  |  5  | 

**레이블에서 필드로**

이 변환은 레이블 또는 태그를 포함하는 시계열 결과를 각 레이블 키 및 값이 테이블 결과에 포함된 테이블로 변경합니다. 레이블은 열 또는 행 값으로 표시될 수 있습니다.

두 시계열의 쿼리 결과가 있는 경우:
+ 시리즈 1 – labels Server=Server A, Datacenter=EU
+ 시리즈 2 – labels Server=Server B, Datacenter=EU

**열** 모드에서 결과는 다음과 같습니다.


| Time | Server | 데이터 센터 | 값 | 
| --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  Server A  |  EU  |  1  | 
|  7/7/2020 오전 11:34:20  |  Server B  |  EU  |  2  | 

'행' 모드에서 결과에는 각 시리즈에 대한 테이블이 있으며 다음과 같은 각 레이블 값이 표시됩니다.


| 레이블 | 값 | 
| --- | --- | 
|  Server  |  Server A  | 
|  데이터 센터  |  EU  | 


| 레이블 | 값 | 
| --- | --- | 
|  Server  |  Server B  | 
|  데이터 센터  |  EU  | 

*값 필드 이름*

**값 필드 이름**으로 서버를 선택한 경우 서버 레이블의 모든 값에 대해 하나의 필드를 가져옵니다.


| Time | 데이터 센터 | Server A | Server B | 
| --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  EU  |  1  |  2  | 

*병합 동작*

레이블에서 필드 변환기는 내부적으로 두 개의 개별 변환입니다. 첫 번째는 단일 시리즈에 작동하고 레이블을 필드로 추출합니다. 두 번째는 모든 결과를 단일 테이블로 조인하는 병합 변환입니다. 병합 변환은 일치하는 모든 필드에서 조인을 시도합니다. 이 병합 단계는 필수이며 끌 수 없습니다.

**참고**  
*병합* 변환은 자체적으로 사용할 수 있으며 아래에 자세히 설명됩니다.

이를 설명하기 위해 중복 레이블이 없는 시계열을 반환하는 두 개의 쿼리가 있는 예제가 나와 있습니다.
+ 시리즈 1 – labels Server=ServerA
+ 시리즈 2 – labels Datacenter=EU

그러면 먼저 다음 두 테이블이 생성됩니다.


| Time | Server | 값 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  ServerA  |  10  | 


| Time | 데이터 센터 | 값 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  EU  |  20  | 

병합 후:


| Time | Server | 값 | 데이터 센터 | 
| --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  ServerA  |  10  |    | 
|  7/7/2020 오전 11:34:20  |    |  20  |  EU  | 

**Merge**

이 변환을 사용하여 여러 쿼리의 결과를 단일 결과로 결합합니다. 이 방식은 테이블 패널 시각화를 사용할 때 유용합니다. 병합할 수 있는 값은 동일한 행에 결합됩니다. 공유 필드에 동일한 데이터가 포함된 경우 값을 병합할 수 있습니다.

아래 예제에는 테이블 데이터를 반환하는 두 개의 쿼리가 있습니다. 변환을 적용하기 전에 두 개의 개별 테이블로 시각화됩니다.

쿼리 A:


| Time | 작업 | 가동 시간 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  노드  |  25260122  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  123001233  | 

쿼리 B:


| Time | 작업 | 오류 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  노드  |  15  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  5  | 

다음은 병합 변환을 적용한 후 결과입니다.


| Time | 작업 | 오류 | 가동 시간 | 
| --- | --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  노드  |  15  |  25260122  | 
|  7/7/2020 오전 11:24:20  |  postgre  |  5  |  123001233  | 

**필드 구성**

이 변환을 사용하여 쿼리에서 반환된 필드의 이름을 바꾸거나, 순서를 바꾸거나, 숨깁니다.

**참고**  
이 변환은 단일 쿼리가 있는 패널에서만 작동합니다. 패널에 여러 쿼리가 있는 경우 외부 조인 변환을 적용하거나 추가 쿼리를 제거해야 합니다.

Grafana에서는 쿼리에서 반환된 필드 목록을 표시합니다. 다음을 수행할 수 있습니다.
+ 필드 위에 커서를 가져가서 필드 순서를 변경합니다. 커서가 손 모양으로 바뀌면 필드를 새 위치로 끌 수 있습니다.
+ 필드 이름 옆에 있는 눈 아이콘을 클릭하여 필드를 숨기거나 표시합니다.
+ 이름 바꾸기 상자에 새 이름을 입력하여 필드의 이름을 바꿉니다.

**값별 파티션**

이러한 변환을 통해 여러 시리즈를 그래프로 표시할 때 서로 다른 `WHERE` 절을 사용하는 동일한 데이터 소스에 대한 여러 쿼리가 필요하지 않을 수 있습니다. 다음 데이터가 포함된 지표 SQL 테이블을 고려합니다.


| Time | 리전 | 값 | 
| --- | --- | --- | 
|  10/20/2022 오후 12:00:00  |  US  |  1520  | 
|  10/20/2022 오후 12:00:00  |  EU  |  2936  | 
|  10/20/2022 오전 1:00:00  |  US  |  1327  | 
|  10/20/2022 오전 1:00:00  |  EU  |  912  | 

v9.3 이전에는 동일한 시계열 패널에서 미국의 경우 빨간색 추세선, EU의 경우 파란색 추세선을 작성하려는 경우 이를 두 개의 쿼리로 분할해야 할 수 있습니다.

```
SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='US'
SELECT Time, Value FROM metrics WHERE Time > '2022-10-20' AND Region='EU'
```

또한 지표 테이블에 실제로 존재하는 리전을 미리 알아야 합니다.

*값별 파티션* 변환기를 사용하면 단일 쿼리를 실행하고 선택한 하나 이상의 열(`fields`)에서 고유한 값으로 결과를 분할할 수 있습니다. 다음 예에는 `Region`가 사용됩니다.

```
SELECT Time, Region, Value FROM metrics WHERE Time > '2022-10-20'
```


| Time | 리전 | 값 | 
| --- | --- | --- | 
|  10/20/2022 오후 12:00:00  |  US  |  1520  | 
|  10/20/2022 오전 1:00:00  |  US  |  1327  | 


| Time | 리전 | 값 | 
| --- | --- | --- | 
|  10/20/2022 오후 12:00:00  |  EU  |  2936  | 
|  10/20/2022 오전 1:00:00  |  EU  |  912  | 

**축소**

*축소* 변환을 사용하면 프레임의 각 필드에 계산을 적용하고 단일 값을 반환합니다. 이 변환을 적용하면 시간 필드가 제거됩니다.

다음 입력을 고려합니다.

쿼리 A:


| Time | 임시 파일  | 가동 시간 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  12.3  |  256122  | 
|  7/7/2020 오전 11:24:20  |  15.4  |  1230233  | 

쿼리 B:


| Time | AQI | 오류 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  6.5  |  15  | 
|  7/7/2020 오전 11:24:20  |  3.2  |  5  | 

축소 변환기에는 두 가지 모드가 있습니다.
+ **시리즈에서 행으로** - 각 필드에 대한 행과 각 계산에 대한 열을 생성합니다.
+ **필드 축소** - 기존 프레임 구조를 유지하지만 각 필드를 단일 값으로 축소합니다.

예를 들어, **시리즈에서 행으로** 변환과 함께 **첫 번째** 및 **마지막** 계산을 사용하는 경우 결과는 다음과 같습니다.


| Field | 첫 번째 | Last | 
| --- | --- | --- | 
|  임시 파일   |  12.3  |  15.4  | 
|  가동 시간  |  256122  |  1230233  | 
|  AQI  |  6.5  |  3.2  | 
|  오류  |  15  |  5  | 

마지막 계산과 함께 필드 축소를 수행하면 각각 하나의 행을 포함하는 두 개의 프레임이 생성됩니다.

쿼리 A:


| 임시 파일  | 가동 시간 | 
| --- | --- | 
|  15.4  |  1230233  | 

쿼리 B:


| AQI | 오류 | 
| --- | --- | 
|  3.2  |  5  | 

**정규식으로 이름 바꾸기**

이 변환을 사용하여 정규식 및 대체 패턴을 사용하여 쿼리 결과의 일부 이름을 바꿉니다.

역참조를 지원하는 대체 패턴과 함께 일치에만 적용되는 정규식을 지정할 수 있습니다. 예를 들어 호스트당 CPU 사용량을 시각화하며 이때 도메인 이름을 제거하려고 한다고 가정합니다. 정규식을 `([^\.]+)\..+`로 설정하고 대체 패턴을 `$1`로 설정하면 `web-01.example.com`이 `web-01`이 됩니다.

**행에서 필드로**

행에서 필드로 변환은 행을 별도의 필드로 변환합니다. 필드를 개별적으로 스타일 지정하고 구성할 수 있으므로 유용할 수 있습니다. 또한 추가 필드를 동적 필드 구성의 소스로 사용하거나 필드 레이블에 매핑할 수도 있습니다. 그런 다음, 추가 레이블을 사용하여 결과 필드에 대한 더 나은 표시 이름을 정의할 수 있습니다.

이 변환에는 구성 쿼리에서 반환된 데이터의 모든 필드를 나열하는 필드 테이블이 포함됩니다. 이 테이블을 통해 각 구성 속성에 매핑해야 하는 필드를 제어할 수 있습니다(\$1다음으로 사용\$1\$1 옵션). 반환된 데이터에 여러 행이 있는 경우 선택할 값을 선택할 수도 있습니다.

이 변환에는 다음이 필요합니다.
+ 필드 이름의 소스로 사용할 하나의 필드.

  기본적으로 변환은 첫 번째 문자열 필드를 소스로 사용합니다. 대신 사용하려는 필드의 **다음으로 사용** 열에서 **필드 이름**을 선택하여 이 기본 설정을 재정의할 수 있습니다.
+ 값의 소스로 사용할 하나의 필드.

  기본적으로 변환은 첫 번째 숫자 필드를 소스로 사용합니다. 그러나 대신 사용하려는 필드의 **다음으로 사용** 열에서 **필드 값**을 선택하여 이 기본 설정을 재정의할 수 있습니다.

다음 경우에 데이터를 시각화할 때 유용합니다.
+ Gauge
+ Stat
+ 파이 차트

*레이블에 추가 필드 매핑*

필드가 구성 속성에 매핑되지 않는 경우 Grafana는 출력 필드의 레이블에 대한 소스로 해당 필드를 자동으로 사용합니다.

예제:


| 이름 | 데이터 센터 | 값 | 
| --- | --- | --- | 
|  ServerA  |  US  |  100  | 
|  ServerB  |  EU  |  200  | 

출력:


| ServerA(레이블: DataCenter: US) | ServerB(레이블: DataCenter: EU) | 
| --- | --- | 
|  10  |  20  | 

이제 필드 표시 이름에 추가 레이블을 사용하여 더 완전한 필드 이름을 제공할 수 있습니다.

한 쿼리에서 구성을 추출하여 다른 쿼리에 적용하려면 쿼리 결과에서 구성 변환을 사용해야 합니다.

*예제*

입력:


| 이름 | 값 | 최대 | 
| --- | --- | --- | 
|  ServerA  |  10  |  100  | 
|  ServerB  |  20  |  200  | 
|  ServerC  |  30  |  300  | 

출력:


| ServerA(구성: 최대=100) | ServerB(구성: 최대=200) | ServerC(구성: 최대=300) | 
| --- | --- | --- | 
|  10  |  20  |  30  | 

소스 데이터의 각 행은 별도의 필드가 됩니다. 이제 각 필드에는 최대 구성 옵션 세트도 있습니다. 최소, 최대, 단위 및 임계치와 같은 옵션은 모두 필드 구성의 일부이며 이와 같이 설정된 경우 패널 편집기 옵션 창에서 수동으로 구성된 옵션 대신 시각화에서 사용됩니다.

**시계열 데이터 준비**

시계열 변환 준비는 데이터 소스가 사용하려는 패널에서 지원하지 않는 형식으로 시계열 데이터를 반환할 때 유용합니다.

이 변환을 통해 시계열 데이터를 와이드 형식에서 긴 형식 또는 반대로 변환하여 이 문제를 해결할 수 있습니다.

**다중 프레임 시계열** 옵션을 선택하여 시계열 데이터 프레임을 와이드 형식에서 긴 형식으로 변환합니다.

**와이드 시계열** 옵션을 선택하여 시계열 데이터 프레임을 긴 형식에서 와이드 형식으로 변환합니다.

**시리즈에서 행으로**

이 변환을 사용하여 여러 시계열 데이터 쿼리의 결과를 단일 결과로 결합합니다. 이 방식은 테이블 패널 시각화를 사용할 때 유용합니다.

이 변환의 결과에는 시간, 지표 및 값과 같은 세 가지 열이 포함됩니다. 지표가 생성된 쿼리를 확인할 수 있도록 지표 열이 추가됩니다. 소스 쿼리에서 레이블을 정의하여 이 값을 사용자 지정합니다.

아래 예제에는 시계열 데이터를 반환하는 두 개의 쿼리가 있습니다. 변환을 적용하기 전에 두 개의 개별 테이블로 시각화됩니다.

쿼리 A:


| Time | Temperature | 
| --- | --- | 
|  7/7/2020 오전 11:34:20  |  25  | 
|  7/7/2020 오전 10:31:22  |  22  | 
|  7/7/2020 오전 9:30:05  |  19  | 

쿼리 B:


| Time | 습도 | 
| --- | --- | 
|  7/7/2020 오전 11:34:20  |  24  | 
|  7/7/2020 오전 10:32:20  |  29  | 
|  7/7/2020 오전 9:30:57  |  33  | 

다음은 시리즈를 행으로 변환을 적용한 후 결과입니다.


| Time | 지표 | 값 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  Temperature  |  25  | 
|  7/7/2020 오전 11:34:20  |  습도  |  22  | 
|  7/7/2020 오전 10:32:20  |  습도  |  29  | 
|  7/7/2020 오전 10:31:22  |  Temperature  |  22  | 
|  7/7/2020 오전 9:30:57  |  습도  |  33  | 
|  7/7/2020 오전 9:30:05  |  Temperature  |  19  | 

**정렬 기준**

이 변환은 구성된 필드를 기준으로 각 프레임을 정렬합니다. `reverse`를 선택하면 값이 반대 순서로 반환됩니다.

**제한**

이 변환을 사용하여 표시되는 행 수를 제한합니다.

아래 예제에서는 데이터 소스에서 다음과 같은 응답을 받습니다.


| Time | 지표 | 값 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  Temperature  |  25  | 
|  7/7/2020 오전 11:34:20  |  습도  |  22  | 
|  7/7/2020 오전 10:32:20  |  습도  |  29  | 
|  7/7/2020 오전 10:31:22  |  Temperature  |  22  | 
|  7/7/2020 오전 9:30:57  |  습도  |  33  | 
|  7/7/2020 오전 9:30:05  |  Temperature  |  19  | 

다음은 값이 '3'인 제한 변환을 추가한 후의 결과입니다.


| Time | 지표 | 값 | 
| --- | --- | --- | 
|  7/7/2020 오전 11:34:20  |  Temperature  |  25  | 
|  7/7/2020 오전 11:34:20  |  습도  |  22  | 
|  7/7/2020 오전 10:32:20  |  습도  |  29  | 

# 쿼리 문제 해결
<a name="v9-panels-query-troubleshoot"></a>

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

이 페이지에서는 일반적인 대시보드 문제 해결과 관련된 정보를 제공합니다.

**함수를 재정렬할 때 다른 결과를 얻음**

함수 순서는 매우 중요합니다. 수학과 마찬가지로 함수를 배치하는 순서가 결과에 영향을 미칠 수 있습니다.

**쿼리 요청 및 응답 검사**

가장 일반적인 문제는 데이터 소스의 쿼리 및 응답과 관련이 있습니다. Grafana에서 버그 또는 시각화 문제처럼 보이지만 거의 대부분 데이터 소스 쿼리 또는 데이터 소스 응답 관련 문제입니다. 먼저 패널 쿼리 및 응답을 검사합니다.

자세한 내용은 [요청 및 응답 데이터 검사](v9-panels-panel-inspector.md)를 참조하세요.

**쿼리가 느림**

쿼리에서 반환하는 데이터 포인트는 몇 개인가요? 많은 데이터 포인트를 반환하는 쿼리는 속도가 느립니다. 다음 방법을 시도하세요.
+ **쿼리 옵션**에서 반환되는 **최대 데이터 포인트**를 제한합니다.
+ **쿼리 옵션**에서 **최소 간격** 시간을 늘립니다.
+ 쿼리에서 `group by` 함수를 사용합니다.