【问题标题】:Docker logs retrieval from MongoDB从 MongoDB 检索 Docker 日志
【发布时间】:2016-02-12 15:40:53
【问题描述】:

我想通过 Fluentd 将来自 Docker 的日志存储到 MongoDB 中。 设置非常简单,但我正在努力解决的是如何以正确的顺序从 MongoDB 检索日志并支持分页。

日志文档的结构是

{
  _id: ObjectId(...),
  time: ISODate(...),
  log: "message"
}

日志应该从最新到最旧显示,并支持分页。由于日志已经以正确的顺序到达 - 较旧的日志在较新的日志之前写入。我的做法是:

首页 - db.logs.find().sort({_id: -1}).limit(10) 并保存最后一页 _id
下一页 - db.logs.find({_id: {$lt: lastIdFromPreviousPage).sort({_id: -1}).limit(10)
等等

这里的问题是MongoDB docs说:

ObjectId 值的顺序与生成的关系 时间不严格在一秒以内。

这似乎是个问题 - 如果我尝试查找所有 _id 低于 lastIdFromPreviousPage 的文档,则不能保证在一秒钟内文档按照编写顺序排序。上一页中的一些日志可能会包含在结果中,即使它们已经显示在上一页上。

在 MySQL 中,如果您通过 auto_increment 字段对结果进行排序,则可以保证结果的顺序正确,但是 MongoDB 呢?这里的正确方法是什么?

【问题讨论】:

    标签: javascript mongodb pagination docker fluentd


    【解决方案1】:

    光标为您抽象分页工作。查看 the docs 以获取使用批处理或仅从光标连续读取的示例。

    【讨论】:

    • 我可能应该声明日志将显示在网页上,我的错。为了能够使用相同的游标,我必须在我认为基于文档不支持的单个请求之间存储/序列化它。我错过了什么吗?
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多