[ 一日30分 인생승리의 학습법] [InfluxDB] InfluxDB 입문 (설치 / 사용법 /Tick Stack / 시계열 데이터베이스 / Flux)

회사에서 기본 rdbms 성능 이슈로 InfluxDB를 도입하기로 했고 관련 업무를 내가 담당하게 되어 공부를 시작했다.

 



일단 InfluxDB는 시계열 데이터 베이스이다. 


시계열 데이터 베이스 TSDB
시계열 데이터 베이스는 일정한 주기를 가지고 수집되는 대량의 데이터(시계열 데이터)를 처리하는데 최적화된 DB
시계열 데이터의 예시로는 기상정보, 주식정보 등이 있는데 데이터가 실시간으로 쌓이는 대형 서비스 회사에서도 데이터 모니터링용으로 많이 사용한다고 한다.
멜론에서도 InfluxDB + Telegraf + Grafana 로 모니터링 시스템을 구축한 관련 자료가 있었다.

 

https://www.slideshare.net/yuseungmin/custom-dev-ops-monitoring-system-in-melon

 

 

기존 RDBMS (Postgresql)과 시계열 데이터베이스 (Timescale)을 성능 비교한 글이 있었는데
2017년 글이고 그새 얼마나 달라졌을진 모르겠지만 확실한건 계속해서 TSDB의 사용량은 늘어나고 있다.

 

 

 



요약하자면 10억행의 데이터를 insert할때 postgresql에서는 40시간이, timescale에서는 3시간이 걸렸다고 한다.
쿼리 성능으로는 일반 쿼리는 postgresql이 더 빨랐지만 시간에 따른 정렬이나 시간에 따른 집계같은 시간 관련 쿼리에서는 timescale이 더 빨랐다고 한다.


이 정도 성능 차이라면 도입해볼만 한 것 같다.

 

 

Tick Stack

시계열 데이터를 저장하고 작업하는 용도로 influxdb를 사용하는데 이때 함께 사용하면 좋을 도구들이 있다.
influxdata사에서 제공하는 조합이 바로 tick stack이다.

 

 

 

 

  • Telegraf : Metrics와 Events를 수집하고 Reporting 하는 Module
  • InfluxDB : Time Series Database
  • Chronograf : 시각화 도구
  • kapacitor : Real-time 스트리밍 데이터 전송 알람 엔진 > influxdb를 모니터링하다가 미리 설정한 시점에 알림(mail, slack 등) 발생시켜줌

 

이 조합도 유명하지만 chronograf를 grafana로 대체해 사용하는 조합도 많다.

 

 

InfluxDB

InfluxDB는 방대한 시계열 데이터 작업 처리하기 위해 Go 언어로 개발된 오픈 소스 TSDB이다.

공식 문서가 굉장히 잘 되어 있어서 꼼꼼히 읽어보기만해도 익히기 좋다.

InfluxDB를 통해 우리는 이런 작업을 할 수 있다.

 

  • 데이터를 수집하고 쓰기
  • 데이터를 쿼리해오기
  • 데이터를 가공하기
  • 데이터를 시각화하기
  • 모니터링과 알림 주기

 

- InfluxDB의 특징

  • 하나의 데이터 포인트마다 timestamp를 식별자로 가짐 (시간 데이터에 최적화) 
  • CR(ud) DB : 시계열 데이터를 저장하고 조회하는데 최적화된 DB, 수정 삭제 가능하나 권장 안함
  • RESTful API 제공 
  • Schemaless Design : 따로 테이블 생성 과정 필요 없음
  • 중복 데이터 자동 인식 저장
  • 데이터 보존 주기 (RP) 설정 가능

 

- RDBMS 와 InfluxDB 용어 비교

RDBMS InfluxDB
Database Bucket
Table Measurement
Indexed Column Tag Key
UnIndexed Column Field Key

 

 

- InfluxDB 데이터 구조

Line Protocal 구조

 

 

InfluxDB는 데이터 한 줄이 하나의 Point를 이룬다.

이 point들이 쌓이고 쌓여 Line Protocal 구조를 이룬다.

 

구조를 보면 제일 먼저 테이블을 명시해주고 구분자와 공백을 준 후 세개의 컬럼을 나열한다.

  • Tag Key : 인덱싱된 컬럼, 무조건 String 타입, 생략 가능
  • Field Key : 인덱싱 되지 않은 일반 컬럼, 하나의 measurement에 꼭 하나 이상의 Field Key 필요,  (Float / Integer / String / Boolean 타입 가능)
  • Time Key : 데이터 입력시 생략하면 UTC기준 now( ), 기본 microseconds 단위를 사용, 단위 변경도 가능

여기서 Field Value는 기본이 Float타입이다. 만약 Integer형으로 넣고 싶다면 432i 이런식으로 뒤에 i를 붙여주면 된다.

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

- InfluxDB 설치

설치 방법으로는 docker 설치local 설치가 있다.
설치 후 기본 포트인 8086으로 접속해주면 된다.
공식 문서에 잘 설명되어 있으니 참고하면 된다.

 

  $ docker search influxdb

  $ docker pull influxdb

  $ docker run -p 8086:8086 \
      -v influxdb:/var/lib/influxdb \
      -e DOCKER_INFLUXDB_INIT_MODE=upgrade \
      -e DOCKER_INFLUXDB_INIT_USERNAME=my-user \        — 사용할 ID
      -e DOCKER_INFLUXDB_INIT_PASSWORD=my-password \    — 사용할 PW
      -e DOCKER_INFLUXDB_INIT_ORG=my-org \            — 사용할 조직명
      -e DOCKER_INFLUXDB_INIT_BUCKET=my-bucket \  — 초기 생성할 버킷명
      influxdb
 
  $ docker exec -it influxdb /bin/bash

 

 

- InfluxDB 사용

  • InfluxDB UI
  • InfluxDB CLI
  • Restful API 
    + java client

설치 후 사용하는 방법으로는 url 접속 후 사용하는 influxdb ui가 있고
cmd에서 사용하는 cli와 restful api 가 있다.

또 자바를 통해 사용하는 influxdb client java 라이브러리가 있는데 추후 블로깅 예정이다.

 

 

 

 

이게 기본 ui로 influxdb query 하는 방법이다.
influxdb ui에서는 query builder라는 간단한 select 쿼리를 바로 만들어주는 툴을 제공한다.

weather라는 db의 forecast라는 테이블에서 windseepd 컬럼을 가져오기로 한다.


influxdb는 시계열 데이터베이스고 시간 range가 중요하다.
가져올 시간의 범위를 설정해주고 submit을 누르면 쿼리의 결과를 그래프로 볼 수 있다.

 

 

 

 

view raw data 를 하면 그래프가 아닌 실제 데이터를 볼 수 있다.

여기의 _time이 실제 데이터를 입력할 때 들어간 timestamp이다.

 

 

 

 


여기서 또 알아둬야할 부분이 이 부분이다.
query builder를 사용하면 이 aggregateWindow( ) 함수가 반드시 포함된다.
aggregateWindow( )는 window period로 지정된 만큼 aggregate 하는 함수이다.

 

Window and aggregate data in InfluxDB with Flux | InfluxDB Cloud Documentation (influxdata.com)

 

이 대로 한다면
12시간 전부터의 날씨, 기상 예보, 풍속 데이터를 1분씩 잘라 평균(mean)을 내서 그래프로 그려라 라는 쿼리가 만들어진다.

 

 

 

 

이를 실제 쿼리문으로 본다면 이렇다.

 

원래  influxDB에는 기존 SQL문과 비슷한 형태의 InfluxQL이라는 언어가 있었다.
하지만 이는 join 등 함수 사용에 제한이 많아 InfluxDB 2.0 버전부터는 Flux라는 언어가 새로 등장했다.

이 쿼리문이 바로 Flux인데 이를 해석해보면 이렇다.

 

from(bucket: "weather")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "forecasts")
  |> filter(fn: (r) => r["_field"] == "windspeed")
  |> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
  |> yield(name: "mean")
weather라는 bucket에서
저 기간의 시간 범위로
measurement는 forecast이고 
field는 windspeed인 데이터를
1m마다 잘라 평균을 내서 
"mean"이라는 이름의 테이블로써 결과를 보여줘라

 

이 Flux는 역시 공식 문서에 설명이 너무 잘 되어 있어서 원하는 걸 찾아 쓰면 된다.




세미나를 준비하며 자료를 잘 정리해둬서 오랜만에 블로그를 써본다.
회사에 다니며 많은 걸 접하고 배우고 있다.

잘 기록해둬야 잊지 않을텐데..
다시 블로그를 열심히 하자... 화이팅~

[출처] https://datamoney.tistory.com/287

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
1135 [ 一日30分 인생승리의 학습법] [git] [초보용] Git 되돌리기( Reset, Revert ) 졸리운_곰 2023.05.07 5
1134 [ 一日30分 인생승리의 학습법] 피그마 사용법과 협업하기(개발자 시점) file 졸리운_곰 2023.04.25 7
1133 [ 一日30分 인생승리의 학습법] ChatGPT를 비롯한 대화형 AI 서비스에서 더 좋은 결과물을 얻게 해주는 프롬프트 엔지니어링 (Prompt Engineering) file 졸리운_곰 2023.04.10 40
1132 [ 一日30分 인생승리의 학습법] 딥러닝 관련 강의, 자료, 읽을거리들에 대한 모음입니다. 졸리운_곰 2023.04.02 11
1131 [ 一日30分 인생승리의 학습법] 확실히 알아두면 만사가 편해지는 머신러닝 10가지 알고리즘 file 졸리운_곰 2023.04.01 7
1130 [ 一日30分 인생승리의 학습법] [머신러닝] 분류 알고리즘 한 페이지 정리(로지스틱회귀, SVM, KNN, file 졸리운_곰 2023.04.01 6
1129 [ 一日30分 인생승리의 학습법] ChatGPT로 10분만에 웹사이트 만들기 : 링크 및 자료 모음 졸리운_곰 2023.04.01 13
1128 [ 一日30分 인생승리의 학습법] AI Code Helper chatgpt vscode 플러그인 plugin file 졸리운_곰 2023.04.01 6
1127 [ 一日30分 인생승리의 학습법] 데이터 활용 시대의 필수 역량, 데이터 리터러시 제대로 하는 3가지 방법 file 졸리운_곰 2023.03.30 4
1126 [ 一日30分 인생승리의 학습법] 데이터 리터러시(Data Literacy)를 올리는 방법 file 졸리운_곰 2023.03.30 4
1125 [ 一日30分 인생승리의 학습법] 도커를 이용해 쉽게 IRC 서버 구축하기 file 졸리운_곰 2023.03.25 6
1124 [ 一日30分 인생승리의 학습법] IRC 사용법 졸리운_곰 2023.03.25 4
1123 [ 一日30分 인생승리의 학습법] [서비스] IRC 서버 구축 방법 졸리운_곰 2023.03.25 5
1122 [ 一日30分 인생승리의 학습법] 베이그런트(Vagrant) 튜토리얼, 개발 환경 공유와 가상 머신 관리를 위한 커맨드라인 도구 졸리운_곰 2023.03.10 6
1121 [ 一日30分 인생승리의 학습법] 나만 알고싶은 Vagrant 사용법 file 졸리운_곰 2023.03.10 11
1120 [ 一日30分 인생승리의 학습법] */ git 사용자 이름/패스워드 Repository별 저장 졸리운_곰 2023.03.05 3
1119 [ 一日30分 인생승리의 학습법] 10 Awesome Github Repos Every Developer Must Know file 졸리운_곰 2023.02.08 9
1118 [ 一日30分 인생승리의 학습법] iOS 인증서(Certification) 애플 개발자 프로그램(Apple Developer Program) 등록을 완료했다면, 개발자 인증서(Certification)을 설정하는 방법에 대해 알아봅니다. file 졸리운_곰 2023.01.23 7
» [ 一日30分 인생승리의 학습법] [InfluxDB] InfluxDB 입문 (설치 / 사용법 /Tick Stack / 시계열 데이터베이스 / Flux) file 졸리운_곰 2023.01.17 5
1116 [ 一日30分 인생승리의 학습법] [노트북] 윈도우 컴퓨터용 PDF 강의 및 회의 필기 7가지 프로그램 소개 (대학생, 대학원생, 직장인, 입력, 삼성, 펜s) file 졸리운_곰 2023.01.07 16
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED