如何跟踪所有Docker容器的日志?

用户名

我可以通过以下操作跟踪单个泊坞窗容器的日志:

docker logs -f container1

但是,如何在同一屏幕上显示多个容器的日志?

docker logs container1 container2 

不起作用。它给出一个错误:

“docker logs” requires exactly 1 argument(s).

谢谢。

马特

docker logs命令无法流式传输多个日志文件。

记录驱动程序

您可以使用默认驱动程序以外的其他日志驱动程序之一json来将日志发送到一个公共点。systemdjournaldsyslog驱动程序将很容易在大多数系统上工作。其他任何集中式日志系统也可以工作。

请注意,syslog在Docker守护程序上进行配置意味着该docker logs命令无法再查询日志,它们只会存储在您的syslog放置它们的位置。

一个简单daemon.json的系统日志:

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "tcp://10.8.8.8:514",
    "syslog-format": "rfc5424"
  }
}

撰写

docker-compose 能够流传输其在项目下控制的所有容器的日志。

API

您可以编写通过API附加到每个容器并通过websocket传输日志的工具。两个Java库是docker -clientdocker -java

哈克

或运行多个docker logs并在node.js中调整输出:

const { spawn } = require('child_process')

function run(id){
  let dkr = spawn('docker', [ 'logs', '--tail', '1', '-t', '--follow', id ])
  dkr.stdout.on('data', data => console.log('%s: stdout', id, data.toString().replace(/\r?\n$/,'')))
  dkr.stderr.on('data', data => console.error('%s: stderr', id, data.toString().replace(/\r?\n$/,'')))
  dkr.on('close', exit_code => {
    if ( exit_code !== 0 ) throw new Error(`Docker logs ${id} exited with ${exit_code}`)
  })
}

let args = process.argv.splice(2)
args.forEach(arg => run(arg))

哪个转储docker logs写入数据

○→ node docker-logs.js 958cc8b41cd9 1dad69882b3d db4b844d9478
958cc8b41cd9: stdout 2018-03-01T06:37:45.152010823Z hello2
1dad69882b3d: stdout 2018-03-01T06:37:49.392475996Z hello
db4b844d9478: stderr 2018-03-01T06:37:47.336367247Z hello2
958cc8b41cd9: stdout 2018-03-01T06:37:55.155137606Z hello2
db4b844d9478: stderr 2018-03-01T06:37:57.339710598Z hello2
1dad69882b3d: stdout 2018-03-01T06:37:59.393960369Z hello

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章