【发布时间】:2017-06-06 01:38:59
【问题描述】:
背景
作为日志处理和存储的一部分,需要将它们存储起来,并发送到kafka,以方便其他程序使用。
如下所示的设置,填充error_log文件以及发送到日志到stdout。
现在进行测试,它使用 2 个不同的程序进行了测试,这些程序使用来自 stdout、logger 和一个 java 生产者的日志。但几乎没有观察到差异。
设置为 httpd.conf 的一部分,用于 ErrorLog
-
Java
ErrorLog "| /usr/bin/tee -a /var/log/httpd/error_log | java -cp producer.jar stdin.producer.StdInProducer /CustomProducer/config.json >> /producer_init.log 2>&1"` -
记录器
ErrorLog "| /usr/bin/tee -a /var/log/httpd/error_log | /usr/bin/logger -u /tmp/apache_log.socket"
httpd 启动时,会产生以下进程,每个进程对应于上面给出的相应设置。 (pid、用户、时间等详细信息被删除以避免混乱)
流程
-
Java
ps auxxww | grep producer
导致以下输出
/bin/sh -c /usr/bin/tee -a /var/log/httpd/error_log | java -cp producer.jar stdin.producer.StdInProducer /CustomProducer/config.json >> /producer_init.log 2>&1
java -cp producer.jar stdin.producer.StdInProducer /CustomProducer/config.json
/bin/sh -c /usr/bin/tee -a /var/log/httpd/error_log | java -cp producer.jar stdin.producer.StdInProducer /CustomProducer/config.json >> /producer_init.log 2>&1
java -cp producer.jar stdin.producer.StdInProducer /CustomProducer/config.json
-
记录器
ps auxxww | grep logger
当使用记录器相关设置时,上面的命令给出以下输出
/bin/sh -c /usr/bin/tee -a /var/log/httpd/error_log | /usr/bin/logger -u /tmp/apache_log.socket
/usr/bin/logger -u /tmp/apache_log.socket
问题
对于记录器,我可以看到一个正在运行的进程 BTW 是正确的,但是当我在 conf 文件中使用 Java 设置时,它会为生产者创建 2 个这样的进程。这是怎么回事?
运行 48 小时后的进程计数
63
它每小时都会启动新进程。每小时发生的唯一其他过程是文件error_log 的轮换。这是使用logrotate 完成的,它使用copytruncate 选项。这通过将数据从文件复制到另一个文件然后截断原始文件来保持文件描述符相同。
【问题讨论】:
-
有人可以解释下投票的原因吗?