【问题标题】:Fluentd-ui: Can I receive / catch data from fiware orion contextbroker which are pushed to mongoDB?Fluentd-ui:我可以从推送到 mongoDB 的 fiware orion contextbroker 接收/捕获数据吗?
【发布时间】:2018-02-01 14:48:55
【问题描述】:

几周以来我一直在为这个问题苦苦挣扎,希望您能帮助我解决这个问题。

在我的 Ubuntu 服务器 (16.04) 上,我安装了 Docker。 安装了三个 docker 容器:

  • contextBroker(来自 docker image fiware/orion),监听端口:0.0.0.0:1026->1026/tcp
  • mongoDB(来自 docker image mongo),监听端口:27017/tcp
  • fluentd-ui(来自 docker image dvladnik/fluentd-ui),监听端口:0.0.0.0:9292->9292/tcp, 0.0.0.0:24224->24224/tcp

目前,contextBroker 正在将一些 json 格式的数据推送到 mongoDB,这很好。

我是从 fluentd-ui 开始的,所以我真的很陌生。

我想要什么?

我正在尝试使用 fluentd-ui 获取从 contextBroker 推送到 mongoDB 的这些数据。 Fluentd-ui 应该从 contextBroker 获取这些数据,以便我可以进一步处理这些数据。我正在尝试将这些数据推送到另一个数据库,因为我必须用它做其他事情(可能又是一个 mongoDB,但另一个)或/也将这些数据推送到 elasticsearch / Kibana(我必须做一些分析)。

这个想法是,contextBroker 仍在将数据推送到原始 mongoDB,而且 fluentd 可以以某种方式从 contextBroker 接收这些数据。

这甚至可能吗? 对我来说,当 fluentd 用作“中间人”时也可以,但它仍应将数据推送到 mongoDB其他地方(elasticsearch 等)。

我是如何运行容器的?

MongoDB:

sudo docker run --log-driver=fluentd --log-opt tag=docker.mymongodb --name mymongodb -d mongo

上下文代理:

sudo docker run -d --name cbdocker --link mymongodb:mymongodb --log-driver=fluentd --log-opt tag=docker.mycontextbroker -p 1026:1026 fiware/orion -dbhost mymongodb -logLevel DEBUG

我尝试了什么?

我试过了:

<source>
  type forward
  port 24224
</source>

<match docker.*>
  type stdout
</match>

上面只打印 mongodb 和 contextbroker 本身的日志。但不是推送的数据(我还添加了 mongodb,只是为了检查它是否也可以这样工作)

我认为这是有道理的,但我必须订阅上下文代理,但我应该怎么做呢? fluentd可以做到这一点吗?你认为我必须做一个像 Java 应用程序这样的事情,它订阅 contextBroker 并且 fluentd 监听这个应用程序还是有更好的解决方案?


如果我能收到这些数据,我真的会很高兴,这样我就可以先将它们打印在一个简单的日志文件中(其余的我可以稍后检查)。

非常感谢您!

【问题讨论】:

  • 我不知道 fluentd-ui 所以也许我在说些废话 :) 但是...你为什么要直接从 Orion MongoDB 使用上下文数据?我的意思是,Orion 数据库仅供 Orion 内部使用(持久性等)。您应该使用 Orion 提供的 NGSIv2 API(同步或使用订阅/通知机制)来使用 Orion 上下文数据。请注意,数据库模型可能会在 Orion 版本之间发生变化(因此会破坏您的集成),而 API 始终是向后兼容的。

标签: mongodb docker fiware-orion fluentd


【解决方案1】:

如果您想要在应用程序中接收数据然后登录或执行更复杂的操作,您可以使用 Orion subscriptions 机制。

使用 Orion 的订阅机制,您可以在特定上下文发生更改时收到通知,然后接收例如所有上下文信息。

例如:

curl -v localhost:1026/v2/subscriptions -s -S --header 'Content-Type:  application/json' \
  -d @- <<EOF
{
  "description": "A subscription to get info about Room1",
  "subject": {
    "entities": [
      {
        "id": "Room1",
        "type": "Room"
      }
    ],
    "condition": {
      "attrs": [
        "pressure"
      ]
    }
  },
  "notification": {
    "http": {
      "url": "http://localhost:1028/accumulate"
    },
    "attrs": [
      "temperature"
    ]
  },
  "expires": "2040-01-01T14:00:00.00Z",
  "throttling": 5
}
EOF

在前面的示例中,您告诉 Orion Context Broker 每次“Room”类型的“Romo1”上下文的“压力”属性发生变化时通知您,然后只向您发送“温度”信息。

如果您想向您发送所有信息,您可以将“通知”字段中的“属性”字段留空,然后 Orion 会向您发送整个上下文信息。

最后,您必须在字段 notification.url 中指明要通知的应用程序的 URL。请记住,如果 Orion 在 Docker 容器内工作,它应该能够看到您的应用程序。例如,您应该在与 Orion 相同的 docker 网络中运行您的应用程序。

我建议您阅读 Orion 的 documentation 关于订阅的内容,以便深入了解。很好很清晰。

遗憾的是,我没有使用 fluentd-ui 的经验,所以我不知道您是否可以使用这种机制直接与 Orion 连接。

希望对你有所帮助。

【讨论】:

  • 我不推荐使用“节流”。此外,如果您实际上不需要订阅到期,请考虑删除“到期”。除此之外,@EmilianoViotti 的答案看起来很完美! :)
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 2016-09-06
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多