자바스크립트를 활성화 해주세요

h044 Powershel로 InfluxDB에 포스트 레포트 기록하기

 ·  ☕ 4 min read

동기

나 또는 우리 조직이, 현재 어느만큼 나아가고 있는 지를 통계치를 관찰함으로써 파악하려는 욕구는 지금까지 많은 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/ 에서 직접 다운받아서 설치하는 방법도 있습니다.

1
Expand-Archive -Force C:\path\to\archive.zip C:\where\to\extract\to

실행

다음의 명령어로 실행버전을 확인할 수 있습니다.

버전 확인

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에 입력할 수도 있습니다.

1
curl -i -XPOST 'http://localhost:8086/write?db=tkim' --data-binary "meas_test,place=garden value=20.64"

influxdb에 invoke-restmethod로 데이타 입력

이 예제에서는 powershell 언어를 사용하여 입력하므로 Invoke-RestMNethod를 다음과 같이 이용해서 호출합니다.

1
2
$response = Invoke-RestMethod 'http://localhost:8086/write?db=tkim' -Method POST `
    -Body "meas_test,place=garden value=22.64"

입력 확인

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'

reference

공유하기

tkim
글쓴이
tkim
Software Engineer