将Docker作为系统日志目标运行失败

2024-06-12 04:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个流浪者创建的虚拟机运行股票ubuntutrusty64,有一个主机CPU分配给它。 在这个虚拟机中,我有一个运行stock Python 3.4.3的Docker映像:

FROM python:3.4.3-slim

ENTRYPOINT ["/usr/local/bin/python"]

当我执行任意Python脚本时:

^{pr2}$

像这样:

sudo docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py

一切都很好,集装箱运行,只是坐在那里做很少的事。如果我在Python脚本中添加print语句,它将按预期发送到stdout。在

我也在那个虚拟机中安装了syslog ng,我的目的是使用我的容器化Python作为syslog ng目的地:

source s_foo {
  unix-stream("/dev/log");
};

destination d_foo {
  program("'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py'");
};

log {
  source(s_foo);
  destination(d_foo);
};

但是当我重新加载配置时,syslog ng消耗了虚拟机大约20%的CPU和主机的100%的CPU,而且容器永远不会被创建(运行sudo docker ps -a不会生成容器)。运行sudo syslog-ng-ctl stats告诉我它正在尝试执行程序:

dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;dropped;0
dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;processed;2
dst.program;d_foo#0;'docker run -i -v /etc/alloy_listener/scripts:/scripts:ro alloy_listener /scripts/test.py';a;stored;0

我的感觉是,因为syslog ng占用了20%的CPU,而主机的CPU却占了100%,这是一个I/O绑定,VM在努力跟上。为此,我尝试在Python脚本中使用和刷新stdin和stdout,但据我所知,因为它甚至没有创建容器,所以还没有达到脚本的程度。在

所以我的下一个想法是肯定有一些docker的-a-d-i,和{}标志的组合,我没有尝试过,但我确信我已经尝试过每一个允许的组合,但都没有用。在

我错过了什么?在


Tags: dockerrunpytest脚本rofooscripts
1条回答
网友
1楼 · 发布于 2024-06-12 04:24:21

如果您在前台启动syslog ng(syslog ng binary-Fedv),您会看到syslog ng在一个循环中启动和停止程序目标,这将导致100%的CPU旋转。 但在本地调查问题后,您应该将程序目标用作(不带'): 程序(“sudo docker run-i-v/scripts:/scripts python test/scripts/测试.py“)

比尔, 米切克

相关问题 更多 >