동기
나 또는 우리 조직이, 현재 어느만큼 나아가고 있는 지를 통계치를 관찰함으로써 파악하려는 욕구는 지금까지 많은 BI툴들을 나타나게 했습니다. 통계치는 csv포맷, json포맷등의 텍스트파일을 이용할 수도 있고, mysql, mssql과 같은 RDBMS를 이용할 수도 있고, redis, mongodb와 같은 key-value store(또는 nosql)을 사용해서 구현할 수도 있습니다.
우리는 이전 포스트 H040 포스트의 문자수, 라인수등 통계치를 구하는 스크립트
에서 간단한 통계치를 구하는 스크립트를 작성해 보았습니다.
이 문서에서는 이 스크립트에서 구한 데이터를 저장매채이기를 자처하는 데이터베이스 influxDB로 통계치를 저장해 봅니다.
influxdb
- https://www.influxdata.com/ 공식 홈페이지입니다.
- time seriese database, 한국어로는
시계열
이라고 부르기도 하더군요.
설치
influxdb를 로컬에 설치하는 방법은 여러가지가 있습니다만, 가장 간단하다고 생각되는 방법은 scoop
을 사용하는 것이었습니다. scoop으로 하는 가장 큰 이유는, scoop uninstall
명령어로 삭제할 때에 고민할 것이 없어서 편하다는 것이 첫 번째 이유이고, 사용자의 profile 디렉토리 밑에 프로그램이 설치되기 때문에 다른 유저에 방해되지 않는 다는 점이 매력적이었기 때문이었습니다.
PS C:\Users\Administrator>scoop search influxdb
'main' bucket:
influxdb (1.8.1)
PS C:\Users\Administrator>scoop install influxdb
Installing 'influxdb' (1.8.1) [64bit]
influxdb-1.8.1_windows_amd64.zip (59.3 MB) [==================================================================] 100%
Checking hash of influxdb-1.8.1_windows_amd64.zip ... ok.
Extracting influxdb-1.8.1_windows_amd64.zip ... done.
Linking ~\scoop\apps\influxdb\current => ~\scoop\apps\influxdb\1.8.1
Creating shim for 'influx'.
Creating shim for 'influx_inspect'.
Creating shim for 'influx_stress'.
Creating shim for 'influx_tsm'.
Creating shim for 'influxd'.
Persisting influxdb.conf
'influxdb' (1.8.1) was installed successfully!
PS C:\Users\Administrator> which influx
C:\Users\Administrator\scoop\shims\influx.exe
# which 명령어는 gow(gnu on windows) 패키지에 딸린 linux 명령어 입니다. 역시 설치도 scoop install gow
로 합니다.
# 다른 설치 방법으로는 공식 사이트 https://portal.influxdata.com/downloads/ 에서 직접 다운받아서 설치하는 방법도 있습니다.
|
|
실행
다음의 명령어로 실행버전을 확인할 수 있습니다.
버전 확인
PS C:\Users\Administrator> influx.exe -version
InfluxDB shell version: 1.8.1
설정파일
설정파일은 어디에 있는지, 그냥 userprofile 디렉토리에서 찾아보았습니다.
cd $env:USERPROFILE
dir -recurse influxdb.conf
발견된 influxdb.conf파일을 에디터로 열어봅니다.
code c:\Users\Administrator\scoop\apps\influxdb\1.8.1\influxdb.conf
열어보니 친숙한 포맷이네요. toml 포맷입니다.
# toml 공식 사이트에서도 확인할 수 있었습니다.
mkdir C:\InfluxDB\meta
mkdir C:\InfluxDB\data
mkdir C:\InfluxDB\wal
meta section
[meta]
# Where the metadata/raft database is stored
# dir = "/var/lib/influxdb/meta"
dir = "C:\\InfluxDB\\meta"
data section
[data]
# The directory where the TSM storage engine stores TSM files.
# dir = "/var/lib/influxdb/data"
dir = "C:\\InfluxDB\\data"
# The directory where the TSM storage engine stores WAL files.
# wal-dir = "/var/lib/influxdb/wal"
wal-dir = "C:\\InfluxDB\\wal"
http section
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true
# The bind address used by the HTTP service.
bind-address = ":8086"
# Determines whether HTTP request logging is enabled.
log-enabled = true
logging section
info는 너무 출력이 많아서, error로 바꾸어 실행합니다.
[logging]
level = "error"
실행
--config
옵션을 주어 실행합니다.
influxd --config "c:\Users\Administrator\scoop\apps\influxdb\1.8.1\influxdb.conf"
8888888 .d888 888 8888888b. 888888b.
888 d88P" 888 888 "Y88b 888 "88b
888 888 888 888 888 888 .88P
888 88888b. 888888 888 888 888 888 888 888 888 8888888K.
888 888 "88b 888 888 888 888 Y8bd8P' 888 888 888 "Y88b
888 888 888 888 888 888 888 X88K 888 888 888 888
888 888 888 888 888 Y88b 888 .d8""8b. 888 .d88P 888 d88P
8888888 888 888 888 888 "Y88888 888 888 8888888P" 8888888P"
influx db만들기
많은 rdbms에서도 있는 것처럼 여기에서도 create database
명령으로 database를 생성합니다.
PS C:\Users\Administrator\scoop\apps> influx
Connected to http://localhost:8086 version 1.8.1
InfluxDB shell version: 1.8.1
> create database tkim
> show databases
name: databases
name
----
_internal
tkim
> use tkim
Using database tkim
InfluxDB 기본 커맨드
다음은 influxdb의 레코드 format입니다.measurement,tagname=tagvalue key1=value1,key2=value2
influx는 table이라는 용어 대신에 measurement 라는 용어를 사용합니다. 필드는 따로 schema를 정의하지 않고 key=value의 형식으로 입력합니다. 여기에서는 meas_test라는 measurement에 place와 value라는 키를 사용해 입력해 봅니다.
- select * from tkim # db의 레코드 모두 출력하기
- insert meas_test,place=garden value=20.64 # db에 레코드 입력하기
- delete from tkim # db의 레코드 모두 지우기
influxdb에 curl로 데이타 입력
influx shell을 사용하여 입력할 수도 있지만, API endpiont를 제공하므로 이를 이용하여 DB에 입력할 수도 있습니다.
|
|
influxdb에 invoke-restmethod로 데이타 입력
이 예제에서는 powershell 언어를 사용하여 입력하므로 Invoke-RestMNethod
를 다음과 같이 이용해서 호출합니다.
|
|
입력 확인
db에 값이 잘 들어갔는 지 살펴봅니다. 잘 들어가 있네요
PS C:\Users\Administrator\scoop\apps> influx
Connected to http://localhost:8086 version 1.8.1
InfluxDB shell version: 1.8.1
> use tkim
Using database tkim
> select * from meas_test
name: meas_test
time place value
---- ----- -----
1595249431005084700 garden 22.64
1595249535839145900 garden 22.64
>
query 상세
SELECT * FROM "meas_test" where place='garden'
SELECT value FROM "meas_test" where place='garden'