cygnus-ngsi docker¶
コンテンツ :
始める前に¶
Docker がインストールされ、実行されている必要があります。公式スタートガイドをチェックしてください。
イメージを取得¶
ソースからのビルド¶
fiware-cygnus
リポジトリをクローンすることから始めます :
$ git clone https://github.com/telefonicaid/fiware-cygnus.git
ディレクトリを変更 :
$ cd fiware-cygnus
次のコマンドを実行 :
$ sudo docker build -f docker/cygnus-ngsi/Dockerfile -t cygnus-ngsi .
しばらく時間がかかることがあります、完了したら、Docker で利用可能なイメージを確認するには、次のように入力します :
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
cygnus-ngsi latest 6a9e16550c82 10 seconds ago 462.1 MB
centos 6 273a1eca2d3a 2 weeks ago 194.6 MB
Docker Hub イメージの使用¶
最初からイメージを作成する代わりに、hub.docker.com からイメージをダウンロードすることができます :
$ docker pull fiware/cygnus-ngsi
上記と同じ方法でリストすることができます :
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
cygnus-ngsi latest 6a9e16550c82 10 seconds ago 462.1 MB
centos 6 273a1eca2d3a 2 weeks ago 194.6 MB
イメージを使用¶
そのまま¶
cygnus-ngsi のイメージ (最初から作成したもの、hub.docker.comからダウンロードしたもの) は、NGSI のような通知を受け取り、さまざまなストレージにそれらを保持する役割を担う Cygnus エージェントを実行します : MySQL (iot-mysql
ホストで実行) 、MongoDB と STH (iot-mongo
ホストで実行)、CKAN (iot-ckan
ホストで実行)、HDFS (iot-hdfs
ホストで実行中)、Carto (https://<your_user>.cartodb.com
のクラウドサービス)
ターミナルで次のように入力してこのイメージのコンテナを開始します :
$ docker run cygnus-ngsi
直後に、cygnus-ngsi のロギング・トレースが表示されます(MySQL の例) :
+ exec /usr/lib/jvm/java-1.7.0/bin/java -Xmx20m -Dflume.root.logger=INFO,console -cp '/opt/apache-flume/conf:/opt/apache-flume/lib/*:/opt/apache-flume/plugins.d/cygnus/lib/*:/opt/apache-flume/plugins.d/cygnus/libext/*' -Djava.library.path= com.telefonica.iot.cygnus.nodes.CygnusApplication -f /opt/apache-flume/conf/agent.conf -n cygnus-ngsi
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/apache-flume/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apache-flume/plugins.d/cygnus/lib/cygnus-ngsi-0.13.0_SNAPSHOT-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/apache-flume/plugins.d/cygnus/libext/cygnus-common-0.13.0_SNAPSHOT-jar-with-dependencies.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
time=2016-05-05T09:57:55.150UTC | lvl=INFO | corr= | trans= | srv= | subsrv= | function=main | comp= | msg=com.telefonica.iot.cygnus.nodes.CygnusApplication[166] : Starting Cygnus, version 0.13.0_SNAPSHOT.5200773899b468930e82df4a0b34d44fd4632893
...
...
time=2016-05-05T09:57:56.287UTC | lvl=INFO | corr= | trans= | srv= | subsrv= | function=main | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.nodes.CygnusApplication[286] : Starting a Jetty server listening on port 8081 (Management Interface)
2番目のターミナルのシェルで、実行中のコンテナをチェックすることができます :
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ce0f09f5676 cygnus-ngsi "/cygnus-entrypoint. About a minute ago Up About a minute 5050/tcp, 8081/tcp focused_kilby
上のコンテナの IP アドレスを確認するには、次のようにします :
$ docker inspect 9ce0f09f5676 | grep \"IPAddress\"
"IPAddress": "172.17.0.13",
2番目のターミナルのシェルで、コンテナの IP アドレスが取得されたら、Cygnus のバージョンを確認します :
$ curl "http://172.17.0.13:8081/v1/version"
{"success":"true","version":"0.13.0_SNAPSHOT.5200773899b468930e82df4a0b34d44fd4632893"}
さらに、NGSIライクの通知エミュレーションを送信することもできます。cygnus-ngsiの通知例を確認してください :
$ ./notification.sh http://172.17.0.13:5050/notify
* About to connect() to 172.17.0.13 port 5050 (#0)
* Trying 172.17.0.13... connected
* Connected to 172.17.0.13 (172.17.0.13) port 5050 (#0)
> POST /notify HTTP/1.1
> Host: 172.17.0.13:5050
> Content-Type: application/json
> Accept: application/json
> User-Agent: orion/0.10.0
> Fiware-Service: default
> Fiware-ServicePath: /
> Content-Length: 460
>
< HTTP/1.1 200 OK
< Transfer-Encoding: chunked
< Server: Jetty(6.1.26)
<
* Connection #0 to host 172.17.0.13 left intact
* Closing connection #0
cygnus-ngsi のターミナルで次のような内容が出力されます (MySQL の例) :
time=2016-05-05T10:01:22.111UTC | lvl=INFO | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=getEvents | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.handlers.NGSIRestHandler[249] : Starting internal transaction (8bed4f8d-c47f-499a-a70d-365883584ac7)
time=2016-05-05T10:01:22.113UTC | lvl=INFO | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=getEvents | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.handlers.NGSIRestHandler[265] : Received data ({ "subscriptionId" : "51c0ac9ed714fb3b37d7d5a8", "originator" : "localhost", "contextResponses" : [ { "contextElement" : { "attributes" : [ { "name" : "temperature", "type" : "centigrade", "value" : "26.5" } ], "type" : "Room", "isPattern" : "false", "id" : "Room1" }, "statusCode" : { "code" : "200", "reasonPhrase" : "OK" } } ]})
time=2016-05-05T10:01:31.687UTC | lvl=INFO | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=processNewBatches | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.sinks.NGSISink[342] : Batch accumulation time reached, the batch will be processed as it is
time=2016-05-05T10:01:31.689UTC | lvl=INFO | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=processNewBatches | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.sinks.NGSISink[396] : Batch completed, persisting it
time=2016-05-05T10:01:31.708UTC | lvl=INFO | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=persistAggregation | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.sinks.NGSIMySQLSink[501] : [mysql-sink] Persisting data at OrionMySQLSink. Database (default), Table (Room1_Room), Fields ((recvTimeTs,recvTime,fiwareServicePath,entityId,entityType,attrName,attrType,attrValue,attrMd)), Values (('1462442482115','2016-05-05T10:01:22.115','/','Room1','Room','temperature','centigrade','26.5','[]'))
time=2016-05-05T10:01:32.050UTC | lvl=ERROR | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=processNewBatches | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.sinks.NGSISink[411] : Persistence error (Communications link failure. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.)
time=2016-05-05T10:01:32.051UTC | lvl=INFO | corr=8bed4f8d-c47f-499a-a70d-365883584ac7 | trans=8bed4f8d-c47f-499a-a70d-365883584ac7 | srv=default | subsrv=/ | function=processNewBatches | comp=cygnus-ngsi | msg=com.telefonica.iot.cygnus.sinks.NGSISink[423] : TTL exhausted, finishing internal transaction (8bed4f8d-c47f-499a-a70d-365883584ac7)
エラーは心配しないでください。正常です。次のセクションをご覧ください。
コンテナを次のようにして停止できます :
$ docker stop 9ce0f09f5676
9ce0f09f5676
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
特定の構成の使用¶
上記のように、イメージと共に配布されるデフォルトの設定は、テストに適していない特定の値が設定されています。具体的には :
- MySQL:
- これは、MySQL の履歴コンテキストデータを構築する場合にのみ機能します
- MySQL のエンドポイント
iot-mysql
ですが CYGNUS_MYSQL_HOST 環境変数によって変更できます - MySQL のポートは
3306
ですが、CYGNUS_MYSQL_PORT 環境変数で変更できます - MySQL のユーザは
mysql
ですが、CYGNUS_MYSQL_USER 環境変数で変更できます - MySQL のパスワードは
mysql
ですが、CYGNUS_MYSQL_PASS 環境変数で変更できます
- Mongo と STH :
- Mongo は、Mongo の履歴コンテキストデータを構築するためにのみ機能します
- STH は、STH の履歴コンテキストデータを構築する場合にのみ機能します
- ホストとポートを含む Mongo と STH のエンドポイントは
iot-mongo:27017
ですが、CYGNUS_MONGO_HOSTS 環境変数で変更できます - Mongo と STH のユーザは
mongo
ですが、CYGNUS_MONGO_USER 環境変数で変更できます - Mongo と STHのパスワードは
mongo
ですが、CYGNUS_MONGO_PASS 環境変数で変更できます
- CKAN:
- これは、CKAN の 履歴コンテキストデータを構築するためにのみ機能します
- CKAN のエンドポイントは
iot-ckan
ですが、CYGNUS_CKAN_HOST 環境変数で変更できます - CKAN のポートは
80
ですが、CYGNUS_CKAN_PORT 環境変数で変更できます - CKAN の ssl は
false
ですが、CYGNUS_CKAN_SSL 環境変数で変更できます - CKAN の api_key は ``ですが、CYGNUS_CKAN_API_KEY 環境変数によって変更できます
- HDFS:
- これは、HDFS の履歴コンテキストデータを構築する場合にのみ機能します
- HDFS のエンドポイントは
iot-hdfs
ですが、CYGNUS_HDFS_HOST 環境変数で変更できます - HDFS のポートは
50070
ですが、CYGNUS_HDFS_PORT 環境変数で変更できます - HDFS のユーザは
hdfs
ですが、CYGNUS_HDFS_USER 環境変数で変更できます - HDFS のトークンは空ですが、CYGNUS_HDFS_TOKEN 環境変数で設定できます
- Carto:
- これは、Carto の履歴コンテキストデータを構築する場合にのみ機能します
- Carto のユーザは
carto
ですが、CYGNUS_CARTO_USER 環境変数で変更できます - Carto のキーは
carto
ですが、CYGNUS_CARTO_KEY 環境変数で変更できます
- Log4j構成ファイル :
- ロギング・レベルは
INFO
ですが、CYGNUS_LOG_LEVEL 環境変数で変更できます - ロギングアペンダは
console
ですが、CYGNUS_LOG_APPENDER 環境変数で変更できます
- ロギング・レベルは
Docker ファイルの編集¶
最も簡単な方法は、docker/cygnus-ngsi
下の Dockerfile
および/または agent.conf
の両方を編集することで、最初から cygnus-common のイメージを構築します。
docker イメージを完全に制御できます。
環境変数¶
環境変数に関連付けられたこれらのパラメータは、-e
オプションを使用してコマンドラインで簡単に上書きすることができます。たとえば、log4j ロギング・レベルを変更する場合は、次のコマンドを実行します :
$ docker run -e CYGNUS_LOG_LEVEL='DEBUG' cygnus-ngsi
または、空でない MySQL ユーザとパスワードを構成する場合は次のようにします :
$ docker run -e CYGNUS_MYSQL_USER='myuser' -e CYGNUS_MYSQL_PASS='mypass' cygnus-ngsi
ボリュームの使用¶
もう1つの可能性は、ボリューム(-v
オプション)を持つコンテナを起動し、そのコンテナ内のコンフィギュレーション・ファイル全体をファイルのローカル・バージョンでマップすることです :
$ docker run -v /absolute/path/to/local/agent.conf:/opt/apache-flume/conf/agent.conf cygnus-ngsi
もちろん、ボリュームと環境変数を組み合わせて上書きすることもできます :
$ docker run -v /absolute/path/to/local/agent.conf:/opt/apache-flume/conf/agent.conf -e LOG_LEVEL='DEBUG' cygnus-ngsi