Docker日志从MongoDB中检索

Docker logs retrieval from MongoDB

本文关键字:检索 MongoDB 日志 Docker      更新时间:2023-09-26

我想通过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文档说:

ObjectId值的顺序与生成之间的关系时间并不是一秒钟之内就能完成的。

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

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

光标为您提取分页工作。查看文档中使用批处理的示例,或者只是从光标中连续读取。