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 MBDocker 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 #0cygnus-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