gpt4 book ai didi

python - 将Docker作为syslog-ng目标运行失败

转载 作者:行者123 更新时间:2023-12-02 21:28:50 25 4
gpt4 key购买 nike

我有一台由Vagrant创建的VM,运行的是存量Ubuntu Trusty 64,并为其分配了一个主机CPU。
在该VM中,我有一个运行库存Python 3.4.3的Docker镜像:

FROM python:3.4.3-slim

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

当我执行任意Python脚本时:

import time

while True:
time.sleep(1)

像这样:

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

一切都很好,容器运行了,只是坐在那里做得很少。如果我将打印语句添加到Python脚本,它将按预期发送到stdout。

我还在该VM中安装了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%的VM 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,但使用了100%的主机,因此它受I / O限制,并且VM正在努力地跟上。为此,我尝试在Python脚本中使用并刷新stdin和stdout,但是据我所知,因为它甚至没有创建容器,它并没有达到脚本的目的。

所以我的下一个想法是,必须有我没有尝试过的docker的 -a-d-i-t标志的某种组合,但是我确信我尝试了所有允许的组合都没有用。

我错过了什么?

最佳答案

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


米塞克

关于python - 将Docker作为syslog-ng目标运行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com