如何将 docker stats 写入日志?

如何将 docker stats 写入日志?

我正在使用 docker 日志插件将日志发送到存储。现在我不仅想存储应用程序日志,还想存储每隔几秒收集的 docker 容器统计信息(stats 命令输出:CPU、MEM 等)。

有没有办法配置 docker/docker-compose 将容器的统计信息写入与日志相同的输出?

答案1

尚未找到将容器统计信息包含到容器日志中的内置方法,但是我们的部分解决方案可能会帮助您实现部分目标:

我们在 Docker 主机上有一个 CRON 作业,每分钟执行一次此脚本,从而生成按时间倒序排列的容器统计信息日志:

#!/bin/bash
# statshot.sh

MAX_LINES=1440
CONTAINER_NAME=my_container
LOG=~/${CONTAINER_NAME}.stats.log

# docker stats-heading + stats to new log
docker stats --no-stream | grep -e 'CONTAINER' -e ${CONTAINER_NAME} | ts '[%Y-%m-%d %H:%M]' > ${LOG}_

# append lines from running log to new log
# (pre-touch incase it does not exist yet)
touch ${LOG}
grep ${CONTAINER_NAME} ${LOG} | head -${MAX_LINES} >> ${LOG}_

# replace running log with new log
mv ${LOG}_ ${LOG}

每分钟运行一次,在 1440 行之后结束,这为我们提供了容器生命体的 24 小时历史记录。

根据您的需要(包括容器日志中的统计信息),主机上生成的日志文件可以仅包含单个/当前统计信息行,但写入容器可以读取的位置,并且容器中相应的 CRON 作业会将其回显到控制台

*反向顺序是想要包含 Docker 统计标头的副作用,但使用更简单的脚本和更少的文件 I/O... 欢迎任何有关进一步减少文件 I/O 的脚本建议

相关内容