Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 시각화] Grafana 연동 (심화 2)

Grafana Variables와 Raw Query

Grafana에서 잘 알려지지는 않았지만 유용하게 사용할 수 있는 기능인 Variable과 Raw Query를 Machbase와 연동하여 사용하는 법을 설명한다. Variables와 Raw Query 기능을 사용하기 위해서는 Machbase 5.5.7 이상, Grafana 6.0 이상을 사용해야 한다. 다음 버전에서는 Grafana 4.5이상에서도 지원될 예정이다.

Grafana Variables

Grafana Dashboard를 사용한다면 조회중에 사용자가 직접 원하는 Tag이나 집계함수를 선택할 수 있다면 편리하겠다는 생각을 누구나 하게된다.
이런 요구를 충족시킬 수 있는 기능이 Grafana Variables 기능이다.
간단히 말하면 panel을 생성할 때 조회할 Column명, 집계함수, 조건 등에 변수를 사용할 수 있게 해주는 것이다.

종류 및 생성방법

Machbase Data source plugin은 Grafana에서 지원하는 variable type 중에서 Ad hoc filters를 제외하고 모두 지원한다.

  1. Dashboard setting에서 Variables를 선택한다.(Dashboard settings로 가는 버튼은 Grafana 6의 경우 화면 상단에 위치한다.)
  2. [Add variable] 버튼을 눌러서 새로운 variable을 생성한다.
  3. Name을 입력하고 variable의 Type을 결정한다.
    Type설명비고Query선택을 위한 항목들을 Query를 통해서 가져온다.
    Query Options 항목에서 Data source를 선택하고 Query를 입력하면 사용할 수 있다.사용법이 복잡하므로 밑에서 따로 설명한다.intervaltime interval을 선택하기 위한 type이다.
    Interval Options의 Values에 쉼표로 구분하여 선택항목을 입력하면 된다.
    Auto option을 설정하면 설정한 Step count만큼 분할되도록 interval을 계산해서 사용한다.
    Min interval은 최소값이다.예: 1m,10m,30m,1h,6h,12h,1d,7d,14d,30dData source 여러 개의 서버를 사용하는 경우 Data source를 서버 별로 설정한 후 변경하면서 조회할 수 있다. Custom사용자가 선택항목을 미리 설정한다.
    Custom options에 쉼표로 구분한 항목들을 입력하면 된다.예: FRONT,LEFT,RIGHT,REARConstant사용자가 변경할 수 없는 variable이다.
    사용자에게 보이지 않도록Hide옵션이 기본값이다. Text box사용자가 직접 입력하도록 하는 variable로 Default value(기본값)만 설정하면 된다. Ad hoc filters특정 DB의 특수 기능을 위한 type지원하지 않음
  4. 필요한 항목들을 입력하고 하단의 [Add]버튼을 누르면 variable이 추가된다.

Query type variable

type이 Query인 variable을 설정하는 화면은 아래와 같다.

  • Query Options
    서버에서 선택항목을 가져오기 위한 정보를 입력하는 부분으로 Data source를 선택해야 Query를 입력할 수 있다.
    항목설명비고Data source선택항목을 가져올 Data source를 선택한다. RefreshQuery를 refresh할 시점을 선택한다. Query실제 사용될 Query문이다. 결과는 Text와 Value로 구성되는데 하나의 값만 있다면 Text와 Value가 같은 것으로 처리된다.
    Text는 선택시 화면에 표시되는 내용이고, Value는 실제로 사용되는 값이다.
    – Query 결과에 Text와 Value라는 컬럼명이 존재하지 않는다면 Value, Text의 순서로 지정된다.
    – Query 결과에 컬럼이 1개라면 위에서 설명한 것처럼 Text와 Value가 같은 것으로 처리된다.
    예: SELECT NAME FROM SAMPLE_CODE Regex결과중에서 원하는 결과만을 사용하고 싶을 때 사용한다.
    예를 들어 결과가 backend_01, backend_02, backend_03, backend_04인 경우,
    Regex에 /.*[01|02]/를 입력하면 선택항목으로는 backend_01, backend_02만 사용된다.정규표현식 사용Sort결과를 나열할 순서를 선택한다. 
  • Value groups/tags (Experimental feature)
    Group 선택을 위한 설정을 하는 부분이다. Tag를 선택하면 해당되는 모든 항목들이 동시에 선택/해제가 된다.
    – Selection options에 있는 multi-value가 활성화가 되어야 제대로 사용할 수 있다.
    – Enabled를 눌러서 활성화를 시켜야 필요한 항목을 입력할 수 있다.
    항목설명비고Tags queryTag 목록을 가져오는 Query를 입력한다.
    예: SELECT CODE FROM SAMPLE_CODE GROUP BY CODE Tag values query선택된 Tag에 해당하는 선택항목을 가져오는 query를 입력한다. 선택된 Tag는 $tag라는 변수로 제공된다.
    예: SELECT NAME FROM SAMPLE_CODE WHERE CODE=’$tag’ 
사용법

Variables를 생성하면 Dashboard의 상단에서 Variable을 선택(입력)할 수 있게 된다.(Variable을 변경하면 Dashboard는 자동적으로 refresh된다.)
Panel 생성시에 Variable을 사용했다면 화면이 refresh 될 때마다 선택된 Variable들을 적용해서 Query를 수행한다.
Panel 생성시에 Column이나 Interval등 입력이 가능한 부분에 $ + Variable Name (예: $varname) 또는 [[ + Variable Name + ]] (예: [[varname]])의 형태로 입력한다.

직접 설정한 Variable외에 기본적으로 제공되는 Variable은 아래와 같다.(이 Variable들은 [[varname]]의 형태는 지원하지 않는다.)

Variable설명비고
$__fromDashboard에서 Refresh를 할 때 사용되는 Time range중에서 시작시간의 millisecond 단위의 Timestamp 
$__from_nanoDashboard에서 Refresh를 할 때 사용되는 Time range중에서 시작시간의 nanosecond 단위의 TimestampMachbase만 지원
$__toDashboard에서 Refresh를 할 때 사용되는 Time range중에서 종료시간의 millisecond 단위의 Timestamp 
$__to_nanoDashboard에서 Refresh를 할 때 사용되는 Time range중에서 종료시간의 nanosecond 단위의 TimestampMachbase만 지원
$__intervalX축의 time interval (Grafana 형식)
Grafana의 설명에 따르면 대략 (from – to) / resolution 으로 계산된다.
예: 10s, 10m 등
$__interval_unitX축의 time interval의 단위 (msec, sec, min 등)Machbase만 지원
$__interval_valueX축의 time interval의 값 ($__interval을 분해해서 unit과 value로 지원)Machbase만 지원
  • 주의 : 변수명에서 _가 2개임
예시 및 주의사항


위의 화면의 경우 아래와 같은 Query로 변경되어 수행된다.

SELECT TO_TIMESTAMP(DATE_TRUNC('msec', TIME, 500)) AS _TIME_, AVG(VALUE)
FROM TAG
WHERE ((NAME='ETAG_C01')
AND (TIME BETWEEN FROM_TIMESTAMP(1563865797000000000) AND FROM_TIMESTAMP(1563866697001000000)))
GROUP BY _TIME_
ORDER BY 1 ASC
항목입력(Variable)변환비고
SELECT$test3(VALUE)AVG(VALUE) 
every$test1500msQuery로 변환될 때 unit과 value로 나뉘어서 적용된다.(value: 500, unit: msec)
적용: DATE_TRUNC(‘msec‘, TIME, 500)
Filter[[test2]]ETAG_C01따옴표는 Filter 처리 과정에서 붙여진 것으로 variable이 아니어도 적용이 된다.
다른 항목들에서는 따옴표도 사용자가 처리해야 한다.
주의사항
  • 사용자에게 입력을 맞기는 것이므로 선택에 따라 전혀 엉뚱한 결과가 나오거나 Query에서 오류가 발생해서 결과가 나오지 않을 수도 있다.
  • Filter 항목의 경우 Column 유형에 따라서 따옴표를 자동으로 붙이지만 다른 항목들은 따옴표가 필요한 경우 사용자가 직접 붙여주어야 한다.(예: ‘$varname’)
  • Limit의 경우 variable을 입력해도 적용이 되지 않는다.
  • Selection options에서 multi-value가 설정된 경우 선택된 값들은 쉼표(,)로 연결된 문자열로 변환된다.(예: 1,2,3)
    이때 따옴표를 사용하려면 사용될 값에 따옴표가 있도록 Query를 구성해야 한다.(예: SELECT ””||NAME||”” AS VALUE, NAME AS TEXT FROM SAMPLE_CODE)
  • Machbase에서는 nanosecond 단위의 Timestamp를 사용해야 한다. (예: $__from_nano, $__to_nano)
  • interval type의 variable에서 auto를 사용하는 경우 Min interval 값에 주의해야 한다. 이 값이 너무 크게 설정되면 계산된 interval 값이 모두 무시될 수 있다.
  • variable은 Dashboard에 있는 모든 panel에 적용된다.

Raw Query

Machbase Data source plugin에서 지원하는 입력형식은 규격화 되어있다. 범용성이 뛰어나게 만들었다고는 하지만 사용자의 모든 요구를 충족시켜줄 수는 없다.
이런 문제때문에 사용자가 직접 Query문을 작성할 수 있는 기능이 추가되었다.

사용법

설정화면에서 연필모양의 icon(Toggle text edit mode)을 누르면 Query를 입력할 수 있는 화면으로 전환된다. 이곳에 사용할 Query문을 입력하면 된다.

일반적인 방법으로 Query문을 입력하면 항상 정해진 결과만 조회할 수 있기 때문에 Grafana의 Time range 및 자동으로 계산되는 X축 time interval을 적용하기 위해서는 앞에서 설명한 Grafana variable을 사용해서 Query문을 작성해야 한다. Grafana에서 기본적으로 제공하는 variable들은 Machbase에서 사용하기에는 불편하기 때문에 아래의 variable들을 추가로 지원한다.

  • $__from_nano
  • $__to_nano
  • $__interval_unit
  • $__interval_value

graph에 사용되는 Query의 첫번째 컬럼은 반드시 nanosecond 단위의 Timestamp여야 한다.

예시 및 주의사항
SELECT TO_TIMESTAMP(DATE_TRUNC('sec', _arrival_time, 1)) AS _TIME_, AVG(D1), AVG(D2)
FROM SAMPLE_TABLE
WHERE NAME = 'ETAG_C00'
GROUP BY _TIME_
ORDER BY 1 ASC
DURATION FROM $__from_nano TO $__to_nano

위의 Query는 가장 일반적인 유형이다.
이 경우 X축 time interval은 1초 간격이고, AVG(D1)과 AVG(D2)라는 2개의 그래프가 그려진다.

위의 예를 조금 발전시키면 아래와 같이도 적용할 수 있다.

SELECT TO_TIMESTAMP(DATE_TRUNC('$__interval_unit', _arrival_time, $__interval_value)) AS _TIME_, $aggr(D1), $aggr(D2)
FROM SAMPLE_TABLE
WHERE NAME = '$name'
GROUP BY _TIME_
ORDER BY 1 ASC
DURATION FROM $__from_nano TO $__to_nano

X축의 time interval이 Grafana에서 time range에 따라서 자동으로 계산해주는 값을 사용하도록 변경되었다. ($__interval_unit, $__interval_value)
사용자 variable로 aggr과 name을 추가해서 사용자가 집계함수(AVG, SUM, MIN, MAX 등)와 집계조건을 선택할 수 있도록 했다.

주의사항
  • graph의 경우 Query의 첫번째 컬럼은 반드시 nanosecond 단위의 timestamp여야 한다.(TO_TIMESTAMP()함수를 사용하면 된다.)
  • _arrival_time을 지원하지않는 Tag 테이블의 경우에는 DURATION을 사용하면 안된다.(BETWEEN ~ AND ~ 를 사용)
  • Tag 테이블의 경우 Rollup을 사용하는 경우와 Tag 테이블을 직접 사용하는 경우가 Query문이 다르다.
  • 직접 Query를 입력한 series를 Same as의 Target으로 사용하면 안된다.


아래 링크를 통해 세계 1위 마크베이스 TSDB 무료 다운로드 받을 수 있습니다.

 

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을