ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [공식 문서 정리] InfluxDB 시작하기
    레거시/레거시-influxdb 2020. 5. 2. 15:09
    반응형

    InfluxDB 시작하기

    InfluxDB 공식 문서를 토대로 만든 문서입니다. 아직 설치가 되지 않았다면, 여기를 클릭해서 설치를 먼저 진행해주세요.

    Contents

    1. 개요
    2. database 만들기
    3. 데이터 저장 및 탐색하기
    4. 결론

    개요

    지난 장 "InfluxDB 설치하기"에 이어 간단한 InfluxDB 튜토리얼을 진행해봅시다.

    What?

    이 튜토리얼은 influx라는 CLI를 활용하여 다음 순으로 진행됩니다.

    1. 데이터베이스 목록 보기
    2. 데이터베이스 만들기
    3. 데이터베이스 접속하기
    4. 데이터 저장하기
    5. 뎅치터 탐색하기

    Why?

    이렇게 함으로써 어떻게 InfluxDB와 통신할 수 있는지 알아볼 수 있습니다. 이런 CLI로 통신하는 방법 외에 InfluxDB API를 이용하여(HTTP REST API) 통신하는 방법도 있습니다만, 이 장에서는 다루지 않습니다.

    How?

    역시 도커를 활용합니다. 터미널에 다음을 입력하세요.

    # 프로젝트 루트 경로 확인
    $ pwd
    /Users/a1101320/Studies/gitbook-influxdb-official
    
    # 도커 컴포즈 파일 있는 디렉토리로 이동
    $ cd infra
    
    # 컨테이너 가동
    $ docker-compose up --build -d
    Creating network "infra_default" with the default driver
    Creating infra_influxdb_1 ... done
    
    # 컨테이너 상태 확인
    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    eb036da7c93e        influxdb            "/entrypoint.sh infl…"   20 seconds ago      Up 19 seconds       0.0.0.0:8086->8086/tcp   infra_influxdb_1
    
    # 컨테이너 접속
    $ docker exec -it eb bash
    
    # influx cli 접속
    root@eb036da7c93e:/# influx
    Connected to http://localhost:8086 version 1.8.0
    InfluxDB shell version: 1.8.0
    >

    도커로 진행하지 않으시는 분들은 여기를 참고해서 진행해주세요.

    database 만들기

    먼저 데이터베이스 목록들을 확인하는 명령어를 알아보도록 하겠습니다. 터미널에 다음을 입력하세요.

    # InfluxDB 내 존재하는 데이터베이스 목록 확인
    > show databases
    name: databases
    name
    ----
    _internal
    NOAA_water_database

     

    1장 "InfluxDB 설치하기"를 진행했다면, 위의 화면처럼 데이터베이스 목록이 보여야 합니다. 실습 데이터를 저장하는 작업을 하지 않았다면 "_internal"이라는 데이터베이스만 존재할 것입니다. SQL에 익숙하신 분들이라면, "database"라는 개념을 알 것입니다. 간단하게 서비스 별로 관리하는 큰 저장소 정도로 파악하시면 될 것 같습니다. 이제 데이터베이스를 한 번 만들어보도록 하죠. 터미널에 다음 명령어를 입력해주세요.

    # 데이터 베이스 생성
    # create database <db_name>
    > create database mydb

     

    터미널에 아무것도 일어나지 않았죠? 이제 다시 한 번 데이터베이스 목록 보기 명령어를 실행시켜봅시다.

    > show databases
    name: databases
    name
    ----
    _internal
    NOAA_water_database
    mydb

     

    가장 밑에 저희가 생성한 "mydb" 데이터베이스가 생성된 것을 확인할 수 있습니다. 우리가 만든 데이터베이스에 데이터를 저장하고 탐색하기 위해서는 데이터베이스별로 접속해야만 합니다. 다음 명령어를 입력해주세요.

    # 데이터 베이스 접속
    # use <db_name>
    > use mydb
    Using database mydb

     

    데이터 저장 및 탐색하기

    이제 데이터베이스를 저장하고 탐색하는 "쿼리"를 작성할 준비가 끝났습니다.

     

    먼저 데이터 스토어가 무엇인지 간략하게 알아보도록 하겠습니다. InfluxDB의 데이터는 "cpu_load" 또는 "온도"와 같이 측정값을 포함하는 "time series"(시계열) 데이터를 저장합니다. time series 데이터는 측정 치표의 각 개별 표본에 대해 0개 이상의 수 많은 point를 가지게 됩니다. Point들은 "timestamp", "measuremnt", 0개 이상의 key-value "field", 값에 대한 메타 데이터를 포함하는 "tag"로 구성되어 있습니다.

     

    개념적으로 "measurement"는 SQL에서 "table"과 유사합니다. "measurement"는 주요 인덱스는 "시간"입니다. "tag"와 "field"는 SQL에서 "column"입니다. "tag"는 인덱싱할 수 있지만 "field"는 불가능합니다. 차이점은 Scheme를 항상 먼저 정의해야 하는 SQL과 달리 InfluxDB를 사용하면 수백만 개의 measurement를 가질 수 있습니다. 또한 null 값이 저장되지 않습니다.

    Point를 InfluxDB CLI 프로토콜을 사용하여, 기록되며 다음과 같은 형식을 따릅니다.

    <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]

     

     

    예를 들어 InfluxDB에 다음과 같은 형식이 작성될 수 있습니다.

    cpu,host=serverA,region=us_west value=0.64
    payment,device=mobile,product=Notepad,method=credit billed=33,licenses=3i 1434067467100293230
    stock,symbol=AAPL bid=127.46,ask=127.48
    temperature,machine=unit42,type=assembly external=25,internal=37 1434067467000000000

     

     

    이제 데이터를 한 번 저장해봅시다. 터미널에 다음 명령어를 입력해주세요.

    > INSERT cpu,host=serverA,region=us_west value=0.64

     

     

    위의 명령어는 cpu라는 measurement에 host=serverA, region=us_west, value=0.64라는 값 즉, 각 key(host, region, value)에 value을 저장하는 것입니다. 한 번 measurement 목록을 확인해보겠습니다. 터미널에 다음 명령어를 입력해주세요.

    > show measurements
    name: measurements
    name
    ----
    cpu

     

     

    이처럼 SQL과 달리 따로 스키마를 저장하지 않아도 해당 데이터가 들어오면 InfluxDB는 measurement를 만들어냅니다. 이제 데이터를 한 번 쿼리해보겠습니다. 터미널에 다음을 입력하세요.

     

    > SELECT "host", "region", "value" FROM "cpu"
    name: cpu
    time                host    region  value
    ----                ----    ------  -----
    1587944004199068600 serverA us_west 0.64

     

    "time"이라는 필드가 특별히 지정하지 않아도 저장했던 시간에 맞춰 값이 생성된 것을 확인할 수 있습니다. 다른 데이터를 저장해 보겠습니다. 터미널에 다음을 입력해주세요.

    > INSERT temperature,machine=unit42,type=assembly external=25,internal=37

     

    이번엔 다른 쿼리문을 작성해보겠습니다. SQL에 익숙하신 분이라면, 친숙한 명령어일 것입니다.

    > SELECT * FROM "temperature"
    name: temperature
    time                external internal machine type
    ----                -------- -------- ------- ----
    1587944463753427200 25       37       unit42  assembly

     

    이번 장에서는 다루지 않습니다만, InfluxDB는 다양한 기능과 키워드들이 존재합니다. 추후 다른 장에서 자세하게 살펴봅니다. 추가적으로 살펴보자면, InfluxDB는 Go로 작성되었습니다. Go로 작성된 것 답게 Regex (정규 표현식)이 Go 스타일을 따릅니다. 다음처럼 말이죠.

    > SELECT * FROM /.*/ LIMIT 1
    name: cpu
    time                external host    internal machine region  type value
    ----                -------- ----    -------- ------- ------  ---- -----
    1587944004199068600          serverA                  us_west      0.64
    
    name: temperature
    time                external host internal machine region type     value
    ----                -------- ---- -------- ------- ------ ----     -----
    1587944463753427200 25            37       unit42         assembly

     

    위 명령어는 데이터메이스에 존재하는 모든 measurement의 데이터 1개를 가져오는 쿼리문입니다. InfluxDB에 더 많은 기능 및 명령어들을 알아보고 싶다면, Writing Data, Querying Data, Key Conecept를 참고하세요. 물론 이어지는 저의 튜토리얼들을 순서대로 참고하셔도 좋습니다.

    결론

    이렇게 해서 InfluxDB에 대한 간단한 튜토리얼이 끝났습니다. 이번 장에서 알았던 내용들을 큼지막하게 정리하면 다음과 같습니다.

    • InfluxDB는 Time Series Database입니다.
    • InfluxDB는 SQL과 유사한 개념이 많습니다.
      • database = database
      • measurement = table
      • field, tag = column
    • 반대로 다음과 같은 차이점도 존재합니다.
      • 스키마를 먼저 선언할 필요가 없다. (data 저장시, measurement가 알아서 정의됨.)
      • null은 저장하지 않습니다.
    • InfluxDB는 Go로 작성되어 있으며 정규표현식은 Go스타일을 따릅니다.
    • database 생성과, 생성된 목록들을 확인할 수 있습니다.
    • data의 저장과 쿼리를 할 수 있습니다.

    후 생각보다 많은 것들을 한꺼번에 배웠네요. 다음 장부터는 InfluxDB의 주요 개념들에 대해서 조금 더 찬찬히 공부해보도록 하겠습니다.

Designed by Tistory.