PostgreSQL 데이터 소스에 연결 - Amazon Managed Grafana

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

PostgreSQL 데이터 소스에 연결

PostgreSQL 데이터 소스를 사용하여 Amazon Aurora PostgreSQL 데이터베이스에서 데이터를 쿼리하고 시각화할 수 있습니다.

중요

Grafana 버전 8은 Postgres, MySQL 및 Microsoft SQL Server 데이터 소스의 데이터 프레임에 대한 기본 데이터 구조를 변경합니다. 따라서 시계열 쿼리 결과가 다양한 형식으로 반환됩니다. 자세한 내용은 Grafana 데이터 프레임 설명서의 와이드 포맷을 참조하십시오. 시각화가 버전 8 이전처럼 작동하도록 하려면 몇 가지 수동 마이그레이션을 수행해야 할 수 있습니다. 한 가지 해결 방법은 Github의 Postgres/MySQL/MSSQL에 설명되어 있습니다. 바로 시계열 쿼리 및 데이터 열 순서와 관련된 v8.0의 주요 변경 사항입니다.

Grafana 버전 9에서 PostgreSQL 데이터 소스는 데이터베이스에 연결하기 위한 루트 인증서를 이전 버전과 다르게 설정합니다. 작업 영역을 버전 8에서 9로 업데이트하는 경우 연결 방법을 변경해야 할 수 있습니다. 자세한 정보는 업데이트된 워크스페이스 관련 문제 해결을 참조하세요.

데이터 소스 추가

  1. 상단 헤더에서 Grafana 아이콘을 선택하여 사이드 메뉴를 엽니다.

  2. 구성 아이콘 아래의 사이드 메뉴에서 데이터 소스 링크를 찾을 수 있습니다.

  3. 상단 헤더에서 + 데이터 소스 추가 버튼을 선택합니다.

  4. 유형 드롭다운 목록에서 PostgreSQL을 선택합니다.

데이터 소스 옵션

명칭 설명
Name 데이터 소스 이름. 패널 및 쿼리에서 데이터 소스를 보는 방법은 다음과 같습니다.
Default 기본 데이터 소스는 새 패널에 사용할 데이터 소스가 미리 선택된다는 의미입니다.
Host PostgreSQL 인스턴스의 IP 주소/호스트 이름 및 선택적 포트입니다. 데이터베이스 이름은 포함하지 마십시오. Postgres에 연결하기 위한 연결 문자열이 올바르지 않아 오류가 발생할 수 있습니다.
Database PostgreSQL 데이터베이스의 이름입니다.
User 데이터베이스 사용자의 로그인/사용자 이름.
Password 데이터베이스 사용자 비밀번호
SSL Mode 이 옵션은 보안 SSL TCP/IP 연결을 서버와 협상할지 여부 또는 우선순위를 결정합니다.
Max open 데이터베이스에 대한 열린 최대 연결 수, 기본값 unlimited (Grafana v5.4+).
Max idle 유휴 연결 풀의 최대 연결 수, 기본값 2 (Grafana v5.4+).
Max lifetime 연결을 재사용할 수 있는 최대 시간 (초), 기본값은 14400 /4시간입니다 (Grafana v5.4+).
Version 이 옵션은 쿼리 빌더에서 사용할 수 있는 함수를 결정합니다 (Grafana 5.3+에서만 사용 가능).
TimescaleDB 타임스케일DB는 PostgreSQL 확장으로 구축된 시계열 데이터베이스입니다. 활성화되면 Grafana는 매크로에서 time_bucket $__timeGroup 사용하고 쿼리 빌더에 TimeScaledB 특정 집계 함수를 표시합니다 (Grafana 5.3 이상에서만 사용 가능).

최소 시간 간격

$_interval$_interval_ms변수의 하한값입니다. 예를 들어 데이터가 1분마다 기록되는 1m 경우 쓰기 빈도로 설정하는 것이 좋습니다. 대시보드 패널의 데이터 소스 옵션에서 이 옵션을 재정의/구성할 수도 있습니다. 이 값은 숫자 뒤에 유효한 시간 식별자가 오는 형식이어야 합니다 (예: 1m (1분) 또는 (30초)). 30s 지원되는 시간 식별자는 다음과 같습니다.

식별자 설명
y 연도
M
w
d
h 시간
m
s
ms 밀리초

데이터베이스 사용자 권한

중요

데이터 원본을 추가할 때 지정하는 데이터베이스 사용자에게는 쿼리하려는 지정된 데이터베이스 및 테이블에 대한 SELECT 권한만 부여해야 합니다. Grafana는 쿼리가 안전한지 확인하지 않습니다. 쿼리에는 모든 SQL 문이 포함될 수 있습니다. 예를 들어, DELETE FROM user; 및 와 DROP TABLE user; 같은 명령문이 실행됩니다. 이를 방지하려면 권한이 제한된 특정 PostgreSQL 사용자를 생성하는 것이 좋습니다.

다음 예제 코드는 권한이 제한된 특정 PostgreSQL 사용자를 생성하는 방법을 보여 줍니다.

CREATE USER grafanareader WITH PASSWORD 'password'; GRANT USAGE ON SCHEMA schema TO grafanareader; GRANT SELECT ON schema.table TO grafanareader;

사용자가 공개 역할에서 원치 않는 권한을 받지 않았는지 확인하십시오.

쿼리 편집기

PostgreSQL 쿼리 편집기는 그래프 또는 싱글스탯 패널의 편집 모드의 메트릭 탭에서 찾을 수 있습니다. 패널 제목을 선택하여 편집 모드로 전환한 다음 편집합니다.

쿼리 편집기에는 쿼리가 실행된 후 패널 편집 모드에 있는 동안 표시되는 생성된 SQL 링크가 있습니다. 선택하면 실행된 원시 보간 SQL 문자열이 확장되어 표시됩니다.

테이블, 시간 열, 지표 열 (FROM) 을 선택합니다.

처음으로 편집 모드로 전환하거나 새 쿼리를 추가하면 Grafana는 타임스탬프 열과 숫자 열이 있는 첫 번째 테이블로 쿼리 빌더를 미리 채우려고 합니다.

FROM 필드에서 Grafana는 데이터베이스 사용자의 테이블을 제안합니다. search_path 내 테이블이나 뷰에 없는 테이블을 선택하려면 다음과 같은 정규화된 이름 (schema.table) 을 수동으로 search_path 입력할 수 있습니다. public.metrics

시간 열 필드는 시간 값이 들어 있는 열의 이름을 나타냅니다. 지표 열 필드의 값 선택은 선택 사항입니다. 값을 선택하면 지표 열 필드가 시리즈 이름으로 사용됩니다.

지표 열 제안에는 텍스트 데이터 유형 (char, varchar, text) 의 열만 포함됩니다. 데이터 유형이 다른 열을 지표 열로 사용하려면 캐스트:를 사용하여 열 이름을 입력할 수 있습니다. ip::text 다음과 같은 hostname || ' ' || container_name 텍스트 데이터 유형으로 평가되는 임의의 SQL 표현식을 메트릭 열 필드에 입력할 수도 있습니다.

열, 창 및 집계 함수 (SELECT)

SELECT행에서 사용할 열과 함수를 지정할 수 있습니다. 열 필드에 다음과 같은 column1 * column2 / column3 열 이름 대신 임의의 표현식을 작성할 수 있습니다.

쿼리 편집기에서 사용할 수 있는 함수는 데이터 소스를 구성할 때 선택한 PostgreSQL 버전에 따라 달라집니다. 집계 함수를 사용하는 경우 결과 세트를 그룹화해야 합니다. 집계 함수를 추가하면 편집기가 자동으로 추가합니다. GROUP BY time

편집기는 쿼리의 이 부분을 단순화하고 통합하려고 합니다.

더하기 버튼을 선택하고 메뉴에서 열을 선택하여 값 열을 더 추가할 수 있습니다. 여러 값 열이 그래프 패널에 별도의 시리즈로 표시됩니다.

데이터 필터링 (WHERE)

필터를 추가하려면 WHERE 조건 오른쪽에 있는 더하기 아이콘을 선택합니다. 필터를 선택하고 제거를 선택하여 필터를 제거할 수 있습니다. 현재 선택한 시간 범위의 필터가 새 쿼리에 자동으로 추가됩니다.

그룹화 기준

시간이나 다른 열을 기준으로 그룹화하려면 GROUP BY 행 끝에 있는 더하기 아이콘을 선택합니다. 제안 드롭다운 목록에는 현재 선택한 테이블의 텍스트 열만 표시되지만 원하는 열을 수동으로 입력할 수 있습니다. 항목을 선택한 다음 제거를 선택하여 그룹을 제거할 수 있습니다.

그룹화를 추가하는 경우 선택한 모든 열에 집계 함수가 적용되어야 합니다. 그룹화를 추가할 때 쿼리 작성기는 집계 함수 없이 모든 열에 집계 함수를 자동으로 추가합니다.

갭 메우기

Amazon Managed Grafana는 시간별로 그룹화할 때 누락된 값을 채울 수 있습니다. time 함수는 두 개의 인수를 받아들입니다. 첫 번째 인수는 그룹화 기준으로 사용할 시간 창이고, 두 번째 인수는 Grafana가 누락된 항목을 채우는 데 사용할 값입니다.

텍스트 편집기 모드 (RAW)

햄버거 아이콘을 선택하고 편집기 모드 전환을 선택하거나 쿼리 아래의 SQL 편집을 선택하여 원시 쿼리 편집기 모드로 전환할 수 있습니다.

참고

원시 쿼리 편집기를 사용하는 경우 쿼리에 최소한 반환된 시간 범위에 대한 필터가 있어야 합니다. ORDER BY time

매크로

쿼리 내에서 매크로를 사용하여 구문을 단순화하고 동적 부분을 허용할 수 있습니다.

매크로 예제 설명
$__time(dateColumn) UNIX 타임스탬프로 변환하고 열 이름을 바꿀 표현식으로 대체됩니다. time_sec 예를 들어, UNIX_TIMESTAMP (날짜 열) 를 time_sec로 지정합니다.
$__timeEpoch(dateColumn) UNIX 타임스탬프로 변환하고 열 이름을 바꿀 표현식으로 대체됩니다. time_sec 예를 들어, UNIX_TIMESTAMP (날짜 열) 를 time_sec로 지정합니다.
$__timeFilter(dateColumn) 지정된 열 이름을 사용하는 시간 범위 필터로 대체됩니다. 예를 들어 FROM_UNIXTIME (1494410783) 과 FROM_UNIXTIME (1494410983) 사이의 날짜 열을 예로 들 수 있습니다.
$__timeFrom() 현재 활성 시간 선택 항목의 시작 부분으로 대체됩니다. 예: FROM_UNIXTIME (1494410783).
$__timeTo() 현재 활성 시간 선택이 끝난 시점으로 대체됩니다. 예: FROM_UNIXTIME (1494410983).
$__timeGroup(dateColumn,'5m') GROUP BY 절에서 사용할 수 있는 표현식으로 대체됩니다. 예: 캐스트 (캐스트 (캐스트 (UNIX_TIMESTAMP (DateColumn)/(서명된 대로 300)), *
$__timeGroup(dateColumn,'5m', 0) 이전 행과 동일하지만 fill 매개 변수를 사용하면 grafana가 해당 시리즈에서 누락된 점을 추가하고 0이 값으로 사용됩니다.
$__timeGroup(dateColumn,'5m', NULL) 위와 동일하지만 누락된 포인트의 값으로는 NULL이 사용됩니다.
$__timeGroup(dateColumn,'5m', previous) 위와 동일하지만 아직 값이 보이지 않으면 해당 시리즈의 이전 값이 채우기 값으로 사용됩니다 (Grafana 5.3+에서만 사용 가능).
$__timeGroupAlias(dateColumn,'5m') $__TimeGroup과 동일하게 대체되지만 열 별칭이 추가되었습니다.
$__unixEpochFilter(dateColumn)

Unix 타임스탬프로 표시되는 시간과 함께 지정된 열 이름을 사용하는 시간 범위 필터로 대체됩니다. 예를 들어, *날짜 열 > 1494410783 및 날짜 열 < 1494497183*

$__unixEpochFrom()`

| 현재 활성 시간 선택 항목 (Unix 타임스탬프) 의 시작 부분으로 대체됩니다. 예: *1494410783*

$__unixEpochTo()

현재 활성 시간 선택 항목 종료 (Unix 타임스탬프) 로 대체됩니다. 예를 들어, *1494497183*

$__unixEpochNanoFilter(dateColumn)

나노초 타임스탬프로 표시되는 시간과 함께 지정된 열 이름을 사용하는 시간 범위 필터로 대체됩니다. 예를 들어, *날짜/열 > 1494410783152415214 및 날짜 열 < 1494497183142514872*

$__unixEpochNanoFrom()

나노초 타임스탬프로 현재 활성화된 시간 선택 항목의 시작 부분으로 대체됩니다. 예를 들어, *1494410783152415214*와 같습니다.
$__unixEpochNanoTo()

나노초 타임스탬프로 현재 활성화된 시간 선택이 끝나는 것으로 대체됩니다. 예를 들어, *1494497183142514872*

$__unixEpochGroup(dateColumn,"5m", [fillmode])

$__TimeGroup과 동일하지만 시간은 유닉스 타임스탬프로 저장됩니다.

테이블 쿼리

쿼리 옵션이 테이블 형식으로 설정된 경우 기본적으로 모든 유형의 SQL 쿼리를 수행할 수 있습니다. 테이블 패널에는 쿼리가 반환하는 모든 열과 행의 결과가 자동으로 표시됩니다.

일반 as SQL 열 선택 구문을 사용하여 테이블 패널 열의 이름을 제어할 수 있습니다.

시계열 쿼리

예를 들어Time series, 그래프 패널에서 사용하기 위해 Format을 로 설정하는 경우 쿼리는 SQL 날짜/시간 또는 Unix Epoch를 나타내는 숫자 데이터 유형을 time 반환하는 이름이 지정된 열을 반환해야 합니다. timemetric 를 제외한 모든 열은 값 열로 취급됩니다. 값 열의 지표 이름으로 사용되는 이름이 지정된 metric 열을 반환할 수 있습니다. 여러 개의 값 열과 이름이 지정된 열을 반환하는 metric 경우 이 열이 시리즈 이름의 접두사로 사용됩니다.

시계열 쿼리의 결과 세트는 시간을 기준으로 정렬해야 합니다.

다음 예제 코드는 metric 열을 보여줍니다.

SELECT $__timeGroup("time_date_time",'5m'), min("value_double"), 'min' as metric FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY time ORDER BY time

다음 코드 예제는 $__TimeGroup 매크로에서 fill 매개 변수를 사용하여 널 값을 대신 0으로 변환하는 방법을 보여줍니다.

SELECT $__timeGroup("createdAt",'5m',0), sum(value) as value, measurement FROM test_data WHERE $__timeFilter("createdAt") GROUP BY time, measurement ORDER BY time

다음 예제 코드는 여러 열을 보여줍니다.

SELECT $__timeGroup("time_date_time",'5m'), min("value_double") as "min_value", max("value_double") as "max_value" FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY time ORDER BY time

템플릿 작성

메트릭 쿼리에 서버, 애플리케이션, 센서 이름 등을 하드코딩하는 대신 변수를 대신 사용할 수 있습니다. 변수는 대시보드 상단의 드롭다운 선택 상자로 표시됩니다. 이 드롭다운 상자를 사용하여 대시보드에 표시되는 데이터를 변경할 수 있습니다.

템플릿 및 템플릿 변수에 대한 자세한 내용은 을 참조하십시오. 템플릿

쿼리 변수

이 유형의 템플릿 변수를 추가하면 드롭다운 선택 상자로 표시되는 측정 이름Query, 키 이름 또는 키 값 등을 반환할 수 있는 PostgreSQL 쿼리를 작성할 수 있습니다.

예를 들어 템플릿 변수 Query 설정에서 이와 같은 쿼리를 지정하면 테이블의 hostname 열에 대한 모든 값을 포함하는 변수를 만들 수 있습니다.

SELECT hostname FROM host

쿼리는 여러 열을 반환할 수 있으며 Grafana는 해당 열을 기반으로 목록을 자동으로 생성합니다. 예를 들어 다음 쿼리는 및 값이 포함된 목록을 반환합니다. hostname hostname2

SELECT host.hostname, other_host.hostname2 FROM host JOIN other_host ON host.city = other_host.city

$__timeFilter(column)쿼리에서와 같이 시간 범위 종속 매크로를 사용하려면 템플릿 변수의 새로 고침 모드를 On Time Range Change로 설정해야 합니다.

SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

또 다른 옵션은 키/값 변수를 만들 수 있는 쿼리입니다. 쿼리는 이름이 __text 및 인 열 두 개를 반환해야 합니다. __value __text열 값은 고유해야 합니다 (고유하지 않은 경우 첫 번째 값이 사용됨). 드롭다운 목록의 옵션에는 텍스트로 친숙한 이름을 텍스트로, id를 값으로 사용할 수 있는 텍스트와 값이 있습니다. 텍스트와 hostname 값을 사용하는 예제 쿼리는 id 다음과 같습니다.

SELECT hostname AS __text, id AS __value FROM host

중첩 변수를 만들 수도 있습니다. 라는 region 변수를 사용하여 hosts 변수에 현재 선택한 지역의 호스트만 표시하도록 할 수 있습니다. 다음 코드 예제는 다음과 같은 쿼리를 보여줍니다. 다중 값 변수인 경우 region 여러 값을 = 비교하는 대신 IN 비교 연산자를 사용하십시오.

SELECT hostname FROM host WHERE region IN($region)

쿼리 변수에서 결과를 __searchFilter 필터링하는 데 사용

쿼리 __searchFilter 필드에 사용하면 사용자가 드롭다운 선택 상자에 입력한 내용을 기반으로 쿼리 결과가 필터링됩니다. 사용자가 아무것도 입력하지 않은 경우 의 기본값은 __searchFilter 입니다%.

참고

Grafana가 대신 해주지 않으므로 __searchFilter 표현식을 따옴표로 묶는 것이 중요합니다.

다음 예제는 쿼리 필드의 __searchFilter 일부로 사용하여 사용자가 드롭다운 선택 상자에 입력하는 hostname 동안 검색을 활성화하는 방법을 보여줍니다.

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

쿼리에 변수 사용

템플릿 변수 값은 템플릿 변수가 multi-value a인 경우에만 인용됩니다.

변수가 다중 값 변수인 경우 여러 값을 = 비교하는 대신 IN 비교 연산자를 사용하십시오.

다음과 같은 두 가지 구문이 있습니다.

$<varname>이름이 지정된 hostname 템플릿 변수를 사용한 예:

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in($hostname) ORDER BY atimestamp ASC

[[varname]]이름이 지정된 템플릿 변수를 사용한 예hostname:

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in([[hostname]]) ORDER BY atimestamp ASC

다중 값 변수에 대한 인용 끄기

Amazon Managed Grafana는 다중 값 변수에 대해 따옴표로 구분된 쉼표로 구분된 문자열을 자동으로 생성합니다. 예: server01 와 를 선택하면 다음과 server02 같은 형식이 지정됩니다. 'server01', 'server02' 인용 기능을 끄려면 변수에 대한 csv 형식 지정 옵션을 사용하십시오.

${servers:csv}

가변 형식 옵션에 대한 자세한 내용은 을 참조하십시오. 템플릿 및 변수

주석

주석을 사용하여 그래프 위에 풍부한 이벤트 정보를 오버레이할 수 있습니다. 대시보드 메뉴/주석 보기를 통해 주석 쿼리를 추가합니다. 자세한 정보는 주석을 참조하세요.

다음 예제 코드는 에포크 값이 있는 시간 열을 사용하는 쿼리를 보여줍니다.

SELECT epoch_time as time, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

다음 예제 코드는 에포크 값이 있는 시간 및 타임엔드 열을 사용하는 지역 쿼리를 보여줍니다.

참고

이 기능은 Grafana v6.6+에서만 사용할 수 있습니다.

SELECT epoch_time as time, epoch_time_end as timeend, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

다음 예제 코드는 네이티브 SQL 날짜/시간 데이터 유형의 시간 열을 사용하는 쿼리를 보여줍니다.

SELECT native_date_time as time, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__timeFilter(native_date_time)
명칭 설명
time 날짜/시간 필드의 이름. 기본 SQL 날짜/시간 데이터 유형 또는 에포크 값이 있는 열일 수 있습니다.
timeend 종료 날짜/시간 필드의 선택적 이름. 기본 SQL 날짜/시간 데이터 유형 또는 에포크 값이 있는 열일 수 있습니다 (Grafana v6.6+).
text 이벤트 설명 필드.
tags 이벤트 태그에 쉼표로 구분된 문자열로 사용할 선택적 필드 이름입니다.

알림

시계열 쿼리는 경고 조건에서 작동해야 합니다. 테이블 형식의 쿼리는 경고 규칙 조건에서 아직 지원되지 않습니다.