使用 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 安装的默认设置。

我遵循了以下描述的过程:https://github.com/telefonicaid/fiware-cygnus/blob/master/doc/cygnus-ngsi/installation_and_administration_guide/install_with_docker.md

所有端口都是正确的并且已经过测试。

我已经将 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 案例中使用的完全相同?尽量确保您使用的是完全相同的软件。