InfluxDB, ElasticSearch 및 Grafana 용 docker-compose.yml

온습도 센서의 DHT11로 계측한 온도와 습도를 대시보드에 표시하기 위한 환경을 준비합니다. 이전 dweet.io에서 아보가도 과수원 데이터를 가져올 때 Docker 컨테이너로 구축 이 때는 컨테이너를 개별적으로 작성했기 때문에 컨테이너의 기동이 번잡했습니다. Docker Compose를 사용하면 하나의 YAML로 설정을 정리하고 docker-compose up 하는 것만으로 간단합니다. 또 정의한 서비스명이 각각의 /etc/hosts (으)로 설정해 줍니다. 환경 변수에 설정하는 호스트명은 이 서비스명을 사용할 수 있으므로 IP 주소를 inspect 해 하드 코드 할 필요가 없습니다.

프로젝트 만들기



적절한 디렉토리를 만들고 docker-compose.yml을 작성하기 만하면됩니다. 이 디렉토리에는 InfluxDB의 볼륨이 연결됩니다.
$ cd ~/influx_apps
$ tree
.
└── docker-compose.yml

docker-compose.yml



아래의 docker-compose.yml을 작성하여 influxdb, elasticsearch 및 grafana 서비스를 정의합니다. 모두 Tutum이 Docker 이미지를 제공합니다.
  • tutum/influxdb
  • tutum/elasticsearch
  • tutum/grafana

  • Grafana 포트만 다른 서비스와 충돌하기 때문에 Docker 호스트는 80에서 변경하여 8080에 매핑합니다.

    ~/influx_apps/docker-compose.yml
    influxdb:
      restart: always
      image: tutum/influxdb
      volumes:
        - ./influxdb:/data
      environment:
        - PRE_CREATE_DB=influxdb
      ports:
        - "8083:8083"
        - "8086:8086"
    elastic:
      restart: always
      image: tutum/elasticsearch
      volumes:
        - ./elastic:/usr/share/elasticsearch/data
      environment:
        - ELASTICSEARCH_USER=admin
        - ELASTICSEARCH_PASS=mypass
      ports:
        - "9200:9200"
    grafana:
      restart: always
      image: tutum/grafana
      ports:
        - "8080:80"
      environment:
        - INFLUXDB_PROTO=http
        - INFLUXDB_HOST=influxdb
        - INFLUXDB_PORT=8086
        - INFLUXDB_NAME=dht11
        - INFLUXDB_USER=root
        - INFLUXDB_PASS=root
        - ELASTICSEARCH_PROTO=http
        - ELASTICSEARCH_HOST=elastic
        - ELASTICSEARCH_PORT=9200
        - ELASTICSEARCH_USER=admin
        - ELASTICSEARCH_PASS=mypass
    

    전경에서 시작



    컨테이너를 함께 시작합니다. 기동 순서를 확인하고 싶기 때문에 포그라운드에서 테스트 기동합니다.
    $ cd ~/influx_apps
    $ docker-compose up
    

    InfluxDB 테스트



    컨테이너 bash를 실행하여 InfluxDB 버전을 확인합니다. 0.8.8 를 사용하고 있습니다.
    $ docker exec -it influxapps_influxdb_1 bash
    $ influxdb -v
    InfluxDB v0.8.8 (git: afde71e) (leveldb: 1.15)
    

    Reading and Writing Data 에 쓰여진 것처럼 테스트 데이터를 투입해 봅니다. Docker 호스트에서 curl로 확인합니다.
    $ curl -X POST -d '[{"name":"foo","columns":["val"],"points":[[23]]}]' 'http://localhost:8086/db/influxdb/series?u=root&p=root'
    

    레코드를 쿼리해 봅니다. POST하지 않은 데이터의 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": [
                [
                    1433443454781,
                    10001,
                    23
                ]
            ]
        }
    ]
    

    원격으로 브라우저에서 Docker 호스트에 액세스하여 InfuxDB 관리 화면을 표시합니다.



    ElasticSearch 테스트



    Docker 호스트에서 ElasticSerch 시작 확인을 겸하여 버전을 표시합니다. 1.3.9 를 사용하고 있습니다.
    $ curl admin:mypass@localhost:9200
    {
      "status" : 200,
      "name" : "Abner Jenkins",
      "version" : {
        "number" : "1.3.9",
        "build_hash" : "0915c7306e6264ba21a6cb7609b93545ccc32ef1",
        "build_timestamp" : "2015-02-19T12:34:48Z",
        "build_snapshot" : false,
        "lucene_version" : "4.9"
      },
      "tagline" : "You 
    

    Grafana 테스트



    Grafana는 2015/04/20에 2.0이 출시되고 있습니다만, 이번 이미지는 1.9.1 를 사용하고 있습니다.
    $ docker exec -it influxapps_grafana_1 bash
    $ echo $GRAFANA_VERSION
    1.9.1
    

    Grafana의 관리 화면에 액세스하기 위해 무작위로 생성 된 암호를 표준 출력 로그에서 확인하십시오.
  • login: admin
  • password: 5jG0HLZ09sZQ
  • ...
    grafana_1 | => Creating basic auth for "admin" user with random password
    grafana_1 | Adding password for user admin
    grafana_1 | => Done!
    grafana_1 | ========================================================================
    grafana_1 | You can now connect to Grafana with the following credential:
    grafana_1 |
    grafana_1 |     admin:5jG0HLZ09sZQ
    grafana_1 |
    grafana_1 | ========================================================================
    grafana_1 | => Configuring InfluxDB
    grafana_1 | => InfluxDB has been configured as follows:
    grafana_1 |    InfluxDB ADDRESS:  influxdb
    grafana_1 |    InfluxDB PORT:     8086
    grafana_1 |    InfluxDB DB NAME:  dht11
    grafana_1 |    InfluxDB USERNAME: root
    grafana_1 |    InfluxDB PASSWORD: root
    grafana_1 |    ** Please check your environment variables if you find something is misconfigured. **
    grafana_1 | => Done!
    grafana_1 | => Found Elasticsearch settings.
    grafana_1 | => Set Elasticsearch url to "http://admin:mypass@elastic:9200".
    grafana_1 | => Done!
    grafana_1 | => Starting and running Nginx...
    

    원격으로 Grafana 대시보드를 브라우저에서 엽니다. 일반적으로 80 포트이지만 다른 서비스와 충돌하므로 Docker 호스트는 8080으로 매핑됩니다.



    백그라운드에서 시작



    제대로 작동하는 것처럼 컨테이너를 중지하고 볼륨도 삭제한 다음 백그라운드에서 시작합니다.
    $ docker-compose stop
    Stopping influxapps_grafana_1...
    Stopping influxapps_elastic_1...
    Stopping influxapps_influxdb_1...
    

    컨테이너를 삭제합니다.
    $ docker-compose rm
    Going to remove influxapps_grafana_1, influxapps_elastic_1, influxapps_influxdb_1
    Are you sure? [yN] y
    Removing influxapps_influxdb_1...
    Removing influxapps_elastic_1...
    $ sudo rm -fr influxdb/ elastic/
    

    백그라운드에서 시작합니다.
    $ docker-compose up -d
    Creating influxapps_influxdb_1...
    Creating influxapps_elastic_1...
    Creating influxapps_grafana_1...
    

    브라우저에서 관리 화면의 BASIC 인증에 필요한 Grafana 암호는 docker-compose logs 명령으로 확인합니다.
    $ docker-compose logs grafana
    

    좋은 웹페이지 즐겨찾기