Docker의 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는 다음과 같습니다.
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 및 자동 생성된 비밀번호는 다음과 같습니다.
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을 사용하여 만듭니다.
$ 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로 그래프 작성
이런 식으로 화면에서 설정을 하여 그래프를 쉽게 만들 수 있습니다.
Reference
이 문제에 관하여(Docker의 InfluxDB와 Grafana로 dweet.io의 데이터 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masato/items/eab9f76f21cbfd7c9b92텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)