Docker의 InfluxDB와 Grafana로 dweet.io의 데이터 시각화

Tutum에서 제공하는 Grafana, Elasticsearch 및 Grafana의 Docker 이미지를 사용하여 IoT용 데이터스토어 및 시각화 플랫폼을 구축합니다. MQTT 브로커의 Mosca와 아직 작동하지 않으므로 더미 데이터 흙 t. 이오의 데이터를 InfluxDB 클라이언트 사용 데이터베이스로 가져옵니다. dweet.io + InfluxDB + Grafana의 게시물을 참고하여 캘리포니아의 아보가도 과수원의 센서 데이터를 dweet.io에서 가져옵니다.

InfluxDB 컨테이너



IoT 데이터스토어로 InfluxDB를 사용합니다. Docker 이미지는 tutum/influxdb입니다.
$ docker pull tutum/influxdb
$ docker run --name influxdb \
  -d \
  -p 8083:8083 \
  -p 8086:8086 \
  --expose 8090 \
  --expose 8099 \
  -e PRE_CREATE_DB="influxdb"  \
  tutum/influxdb

브라우저에서 확인합니다. username과 password는 다음과 같습니다.
  • uesrname: 루트
  • password 루트




  • curl에서 레코드의 등록과 취득의 테스트를 합니다.
    $ curl -X POST -d '[{"name":"foo","columns":["val"],"points":[[23]]}]' 'http://localhost:8086/db/influxdb/series?u=root&p=root'
    

    레코드를 쿼리해 봅니다. time과 sequence_number는 자동으로 들어갑니다.
    $ curl -G 'http://localhost:8086/db/influxdb/series?u=root&p=root&pretty=true' --data-urlencode "q=select * from foo"
    [
        {
            "name": "foo",
            "columns": [
                "time",
                "sequence_number",
                "val"
            ],
            "points": [
                [
                    1423550210688,
                    10001,
                    23
                ]
            ]
        }
    ]
    

    Elasticsearch 컨테이너



    Elasticsearch는 Grafana 대시보드 구성 정보를 저장합니다. Docker 기본 이미지는 tutum/elasticsearch입니다. 이번 Docker 호스트의 환경은 IPv6가 무효가 되어 있기 때문에 Docker Hub Registry로부터 취득한 이미지는 기동에 실패해 버립니다. IPv6을 비활성화하기 위해 Nginx 구성 파일을 수정하여 Docker 이미지를 다시 만듭니다.
    $ mkdir -p ~/docker_apps/es
    $ cd !$
    

    sed에서 IPv6 설정을 주석 처리하여 Dockerfile을 만듭니다.

    Dockerfile
    FROM tutum/elasticsearch
    RUN sed -i  '/listen \[::\]:9200/s/\(listen \[::\]:9200.*\)/#\1/' /etc/nginx/sites-enabled/default
    

    이미지를 빌드하고 컨테이너를 시작합니다.
    $ docker build masato/elasticsearch .
    $ docker run \
      --name es \
      -d \
      -p 9200:9200 \
      -e ELASTICSEARCH_USER=admin \
      -e ELASTICSEARCH_PASS=mypass \
      masato/elasticsearch
    

    curl에서 Elasticsearch 시작을 확인합니다.
    $ curl admin:[email protected]:9200
      "status" : 200,
      "name" : "Madcap",
      "version" : {
        "number" : "1.3.2",
        "build_hash" : "dee175dbe2f254f3f26992f5d7591939aaefd12f",
        "build_timestamp" : "2014-08-13T14:29:30Z",
        "build_snapshot" : false,
        "lucene_version" : "4.9"
      },
      "tagline" : "You Know, for Search"
    }
    

    Grafana 컨테이너



    Grafana의 Docker 기본 이미지는 tutum/grafana입니다. Elasticsearch와 마찬가지로 Nginx의 IPv6 설정을 주석 처리합니다. Docker 이미지를 빌드할 프로젝트의 디렉토리를 만듭니다.
    $ mkdir -p ~/docker_apps/grafana
    $ cd !$
    

    Dockerfile을 만듭니다. sed에서 Nginx의 IPv6 설정을 주석 처리합니다.

    Dockerfile
    FROM tutum/grafana
    RUN sed -i '/listen \[::\]:80/s/\(listen \[::\]:80.*\)/#\1/' /etc/nginx/sites-enabled/default
    

    이미지를 빌드하고 컨테이너를 시작합니다. 환경 변수에 InfluxDB의 IP 주소 및 데이터베이스 이름과 같은 연결 정보를 지정합니다.
    $ docker build -t masato/grafana .
    $ docker run --name grafana \
      -d \
      -p 8080:80 \
      -e INFLUXDB_HOST=10.1.3.67 \
      -e INFLUXDB_PORT=8086 \
      -e INFLUXDB_NAME=dweet  \
      -e INFLUXDB_USER=root \
      -e INFLUXDB_PASS=root \
      -e ELASTICSEARCH_HOST=10.1.3.67 \
      -e ELASTICSEARCH_PORT=9200 \
      -e ELASTICSEARCH_USER=admin \
      -e ELASTICSEARCH_PASS=mypass \
      masato/grafana
    

    로그를 검토하여 자동 생성된 암호를 확인합니다.
    $ docker logs grafana
    => Creating basic auth for "admin" user with random password
    Adding password for user admin
    => Done!
    ========================================================================
    You can now connect to Grafana with the following credential:
    
        admin:DUx0iSs3Zd10
    
    ========================================================================
    => Configuring InfluxDB
    => InfluxDB has been configured as follows:
       InfluxDB ADDRESS:  10.1.3.67
       InfluxDB PORT:     8086
       InfluxDB DB NAME:  sensortag
       InfluxDB USERNAME: root
       InfluxDB PASSWORD: root
       ** Please check your environment variables if you find something is misconfigured. **
    => Done!
    => Found Elasticsearch settings.
    => Set Elasticsearch url to "http://admin:[email protected]:9200".
    => Done!
    => Starting and running Nginx...
    

    브라우저에서 확인합니다. username 및 자동 생성된 비밀번호는 다음과 같습니다.
  • username: admin
  • password: DUx0iSs3Zd10

  • htp://10.1.3.67:8080


    InfluxDB 클라이언트 컨테이너



    dweet.io + InfluxDB + Grafana 참조하여 캘리포니아의 아보가도 과수원의 실제 데이터를 사용하여 테스트합니다. InfluxDB의 Python 클라이언트 influxdb-python를 사용하여 InfluxDB에 레코드를 등록합니다. Docker의 기본 이미지는 google/python-runtime을 사용합니다.
    $ mkdir -p ~/docker_apps/dwingest
    $ cd !$
    

    pip로 설치할 패키지를 지정합니다.

    requirements.txt
    influxdb
    

    Dockerfile을 만듭니다. ENTRYPOINT에 실행할 Python 스크립트와 인수를 지정합니다.

    Dockerfile
    FROM google/python-runtime
    ENTRYPOINT ["/env/bin/python", "/app/dwingest.py","10.1.3.67","AvocadoGrove","aiHotWaterTemp_degreesF","20"]
    

    테스트를 위해 InfluxDB 데이터베이스와 사용자를 curl을 사용하여 만듭니다.
  • database: dweet
  • username: dweet
  • password: dweet
  • $ curl -X POST 'http://10.1.3.67:8086/db?u=root&p=root' -d '{"name": "dweet"}'
    $ curl -X POST 'http://10.1.3.67:8086/db/dweet/users?u=root&p=root' \
      -d '{"name": "dweet", "password": "dweet"}'
    

    작업 컨테이너를 시작하고 dweet.io에서 쿼리하면서 InfluxDB에 등록합니다.
    $ docker run --rm --name dwingest dwingest
    2015-02-10T07:12:27 Using InfluxDB host at 10.1.3.67:8086
    2015-02-10T07:12:27 ================================================================================
    2015-02-10T07:12:27 Querying thing AvocadoGrove with key aiHotWaterTemp_degreesF every 10 sec
    2015-02-10T07:12:27 --------------------------------------------------------------------------------
    2015-02-10T07:12:27 Starting new HTTP connection (1): 10.1.3.67
    2015-02-10T07:12:28 Ingested value: 95.661
    2015-02-10T07:12:38 --------------------------------------------------------------------------------
    2015-02-10T07:12:38 Resetting dropped connection: 10.1.3.67
    2015-02-10T07:12:38 Ingested value: 95.691
    2015-02-10T07:12:48 --------------------------------------------------------------------------------
    2015-02-10T07:12:49 Resetting dropped connection: 10.1.3.67
    2015-02-10T07:12:49 Ingested value: 95.691
    ...
    

    Grafana로 그래프 작성



    이런 식으로 화면에서 설정을 하여 그래프를 쉽게 만들 수 있습니다.

    좋은 웹페이지 즐겨찾기