使用 Docker-compose 安装的 Cygnus-ngsi 不会在 MongoDB 中保存数据
Cygnus-ngsi installed with Docker-compose does not save data in MongoDB
我在 Ubuntu 18.04 机器上安装了 Orion、MongoDB 和 Cygnus-ngsi 以及 docker-compose。我使用的图片是:fiware/orion:latest, fiware/cygnus-ngsi:latest and mongo:3.6.
它们是使用以下命令安装的:docker-compose -f reflexwaterDocker.yaml up
我没有安装问题。所有容器都UP。 Orion 保存到 MongoDB。天鹅座 API 正在工作。
我创建了对 Orion 实体的订阅,一切正常。但是当我更新实体时,orion 执行 mongo,但 Cygnus 不保留历史数据。
opt/apache-flume/conf
中的 agent.conf 文件配置正确。我正在使用 docker-compose 安装的默认设置。
所有端口都是正确的并且已经过测试。
我已经将 Cygnus 与 Orion 一起使用并且 MongoDB 手动安装,我没有遇到任何问题。而且,我在那里设置了一个 agent_conf 和一个 cygnus_instance.conf。使用 docker,按照文档中的逐步说明,无需配置 cygnus_instance.conf。它甚至不存在于 opt/apache-flume/conf
文件夹中。
有谁知道 Cygnus 不保留数据会发生什么情况?还是您经历过并成功解决了这个问题?
我的 docker-compose 对于 Cygnus-ngsi 看起来像这样:
image: fiware/cygnus-ngsi:latest
hostname: cygnus
container_name: cygnus
networks:
- default
depends_on:
- mongo
expose:
- "5050"
- "5080"
ports:
- "5050:5050"
- "5080:5080"
environment:
- CYGNUS_SERVICE_PORT=5050
- CYGNUS_AGENT_NAME=cygnus-ngsi
- CYGNUS_MONGO_SERVICE_PORT=5050
- CYGNUS_DEFAULT_SERVICE=def_serv
- CYGNUS_DEFAULT_SERVICE_PATH=reflexWater
- CYGNUS_MONGO_HOSTS=localhost:27017
- CYGNUS_MONGO_USER=""
- CYGNUS_MONGO_PASS=""
- CYGNUS_MONGO_ENABLE_ENCODING=false
- CYGNUS_MONGO_ENABLE_GROUPING=false
- CYGNUS_MONGO_ENABLE_NAME_MAPPINGS=false
- CYGNUS_MONGO_DATA_MODEL=dm-by-entity
- CYGNUS_MONGO_ATTR_PERSISTENCE=column
- CYGNUS_MONGO_DB_PREFIX=db_
- CYGNUS_MONGO_COLLECTION_PREFIX=col_
- CYGNUS_MONGO_ENABLE_LOWERCASE=false
- CYGNUS_MONGO_BATCH_TIMEOUT=30
- CYGNUS_MONGO_BATCH_TTL=10
- CYGNUS_MONGO_DATA_EXPIRATION=0
- CYGNUS_MONGO_COLLECTIONS_SIZE=0
- CYGNUS_LOG_LEVEL=DEBUG
- CYGNUS_SKIP_CONF_GENERATION=false
我运行命令:docker logs cygnus
Cygnus 尝试根据日志保存数据:
time=2020-05-03T01:18:27.683Z | lvl=INFO | corr=fda0c4fc-8cdb-11ea-ad11-0242ac120003 | trans=f1674faf-aa5a-4ca8-a62a-2136378f6d08 | srv=default |subsrv=/ | comp=cygnus-ngsi | op=persistAggregation | msg=com.telefonica.iot.cygnus.sinks.NGSIMongoSink[235] : [mongo-sink] Persisting data at NGSIMongoSink. Database: db_default, Collection: col_/_Room1_Room, Data: [Document{{temperature=279, recvTime=Sun May 03 01:18:27 UTC 2020}}]
但我也注意到了以下错误:
time=2020-05-03T01:18:28.553Z| lvl=WARN|corr=fda0c4fc-8cdb-11ea-ad11-0242ac120003 |trans=f1674faf-aa5a-4ca8-a62a-2136378f6d08 | srv=default| subsrv=/ | comp=cygnus-ngsi | op=createCollection|msg=com.telefonica.iot.cygnus.backends.mongo.MongoBackendImpl[192] : Error in collection col_/_Room1_Room creating index ex=Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='""', source='db_default', password=<hidden>, mechanismProperties=<hidden>}
据我了解,由于 MongoDB 的凭据,它不会持续存在。但我没有使用 MongoDB 银行的用户名和密码。
那么,它会是什么呢?
我不明白这个错误,我什至找不到合理的错误解释。
已经在 docker 上使用过 cygnus 的人可以给我一些解决方法的指导。
谢谢
考虑到这一点
I've used Cygnus with Orion and MongoDB manually installing, and I had no problem
我想说这个问题在某种程度上与 docker 部署有关。此外,寻找踪迹:
Exception authenticating MongoCredential
也许 CYGNUS_MONGO_USER=""
和 CYGNUS_MONGO_PASS=""
env vars 没有正确处理(我猜是 entrypoint.sh 或类似的脚本),这导致了问题。
为了调试它,我建议您比较 Cygnus agents.conf/cygnus_instance.conf 文件在工作情况(手动安装)和失败情况(docker)中的情况。也许差异可以提供对问题的一些见解。在 docker 的情况下,文件可能不在 opt/apache-flume/conf
但它们应该在某个地方(在容器内部或作为卷安装在托管系统中)。
另一个相关问题:您制作的用于手动工作的 Cygnus 版本 与 您在 docker 案例中使用的完全相同?尽量确保您使用的是完全相同的软件。
我在 Ubuntu 18.04 机器上安装了 Orion、MongoDB 和 Cygnus-ngsi 以及 docker-compose。我使用的图片是:fiware/orion:latest, fiware/cygnus-ngsi:latest and mongo:3.6.
它们是使用以下命令安装的:docker-compose -f reflexwaterDocker.yaml up
我没有安装问题。所有容器都UP。 Orion 保存到 MongoDB。天鹅座 API 正在工作。
我创建了对 Orion 实体的订阅,一切正常。但是当我更新实体时,orion 执行 mongo,但 Cygnus 不保留历史数据。
opt/apache-flume/conf
中的 agent.conf 文件配置正确。我正在使用 docker-compose 安装的默认设置。
所有端口都是正确的并且已经过测试。
我已经将 Cygnus 与 Orion 一起使用并且 MongoDB 手动安装,我没有遇到任何问题。而且,我在那里设置了一个 agent_conf 和一个 cygnus_instance.conf。使用 docker,按照文档中的逐步说明,无需配置 cygnus_instance.conf。它甚至不存在于 opt/apache-flume/conf
文件夹中。
有谁知道 Cygnus 不保留数据会发生什么情况?还是您经历过并成功解决了这个问题?
我的 docker-compose 对于 Cygnus-ngsi 看起来像这样:
image: fiware/cygnus-ngsi:latest
hostname: cygnus
container_name: cygnus
networks:
- default
depends_on:
- mongo
expose:
- "5050"
- "5080"
ports:
- "5050:5050"
- "5080:5080"
environment:
- CYGNUS_SERVICE_PORT=5050
- CYGNUS_AGENT_NAME=cygnus-ngsi
- CYGNUS_MONGO_SERVICE_PORT=5050
- CYGNUS_DEFAULT_SERVICE=def_serv
- CYGNUS_DEFAULT_SERVICE_PATH=reflexWater
- CYGNUS_MONGO_HOSTS=localhost:27017
- CYGNUS_MONGO_USER=""
- CYGNUS_MONGO_PASS=""
- CYGNUS_MONGO_ENABLE_ENCODING=false
- CYGNUS_MONGO_ENABLE_GROUPING=false
- CYGNUS_MONGO_ENABLE_NAME_MAPPINGS=false
- CYGNUS_MONGO_DATA_MODEL=dm-by-entity
- CYGNUS_MONGO_ATTR_PERSISTENCE=column
- CYGNUS_MONGO_DB_PREFIX=db_
- CYGNUS_MONGO_COLLECTION_PREFIX=col_
- CYGNUS_MONGO_ENABLE_LOWERCASE=false
- CYGNUS_MONGO_BATCH_TIMEOUT=30
- CYGNUS_MONGO_BATCH_TTL=10
- CYGNUS_MONGO_DATA_EXPIRATION=0
- CYGNUS_MONGO_COLLECTIONS_SIZE=0
- CYGNUS_LOG_LEVEL=DEBUG
- CYGNUS_SKIP_CONF_GENERATION=false
我运行命令:docker logs cygnus
Cygnus 尝试根据日志保存数据:
time=2020-05-03T01:18:27.683Z | lvl=INFO | corr=fda0c4fc-8cdb-11ea-ad11-0242ac120003 | trans=f1674faf-aa5a-4ca8-a62a-2136378f6d08 | srv=default |subsrv=/ | comp=cygnus-ngsi | op=persistAggregation | msg=com.telefonica.iot.cygnus.sinks.NGSIMongoSink[235] : [mongo-sink] Persisting data at NGSIMongoSink. Database: db_default, Collection: col_/_Room1_Room, Data: [Document{{temperature=279, recvTime=Sun May 03 01:18:27 UTC 2020}}]
但我也注意到了以下错误:
time=2020-05-03T01:18:28.553Z| lvl=WARN|corr=fda0c4fc-8cdb-11ea-ad11-0242ac120003 |trans=f1674faf-aa5a-4ca8-a62a-2136378f6d08 | srv=default| subsrv=/ | comp=cygnus-ngsi | op=createCollection|msg=com.telefonica.iot.cygnus.backends.mongo.MongoBackendImpl[192] : Error in collection col_/_Room1_Room creating index ex=Exception authenticating MongoCredential{mechanism=SCRAM-SHA-1, userName='""', source='db_default', password=<hidden>, mechanismProperties=<hidden>}
据我了解,由于 MongoDB 的凭据,它不会持续存在。但我没有使用 MongoDB 银行的用户名和密码。
那么,它会是什么呢? 我不明白这个错误,我什至找不到合理的错误解释。
已经在 docker 上使用过 cygnus 的人可以给我一些解决方法的指导。
谢谢
考虑到这一点
I've used Cygnus with Orion and MongoDB manually installing, and I had no problem
我想说这个问题在某种程度上与 docker 部署有关。此外,寻找踪迹:
Exception authenticating MongoCredential
也许 CYGNUS_MONGO_USER=""
和 CYGNUS_MONGO_PASS=""
env vars 没有正确处理(我猜是 entrypoint.sh 或类似的脚本),这导致了问题。
为了调试它,我建议您比较 Cygnus agents.conf/cygnus_instance.conf 文件在工作情况(手动安装)和失败情况(docker)中的情况。也许差异可以提供对问题的一些见解。在 docker 的情况下,文件可能不在 opt/apache-flume/conf
但它们应该在某个地方(在容器内部或作为卷安装在托管系统中)。
另一个相关问题:您制作的用于手动工作的 Cygnus 版本 与 您在 docker 案例中使用的完全相同?尽量确保您使用的是完全相同的软件。