无法将 php-fpm 日志记录到标准输出中

问题描述 投票:0回答:2

编辑:因为我看到了反对票并且我理解它们,所以将澄清:该应用程序没有以标准方式记录,也不是我要求改变这一点的。另外,当时作为 k8s 的新手,不知道如何获取其他文件。开发人员无法改变这一点(不记得为什么),但我确实设法使用 fluidD/bit 之类的东西来获取文件。抱歉造成误会。

我有一个包含 2 个容器的 pod:nginx 和 php-fpm。 我正在努力将 php-fpm 日志(确实记录到容器)发送到标准输出,以便我可以在 kibana 上看到它们。

这是 php-fpm 容器内的一些信息表单:

#env | grep -i log
APP_LOG_PATH=php://stdout

# php -i | grep -i log
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.17, Copyright (c) 1999-2018, by Zend Technologies
amqp.login => guest => guest
error_log => no value => no value
log_errors => Off => Off
log_errors_max_len => 1024 => 1024
mail.log => no value => no value
com_binlog_dump => 0
Classes => AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException
opcache.error_log => no value => no value
opcache.log_verbosity_level => 1 => 1
APP_LOG_PATH => php://stdout
$_SERVER['APP_LOG_PATH'] => php://stdout
$_ENV['APP_LOG_PATH'] => php://stdout
Segmentation fault (core dumped)
# 

尝试在 www.conf 中取消注释(这就是日志所在的位置):

php_admin_value[error_log] = /var/www/html/logs/my-app.log
php_admin_flag[log_errors] = on

我唯一能得到的就是与进程相关的信息,比如“重新启动”“启动”等。

我用以下命令重新启动了 php:

kill -USR2 1

但是这样做后无法获得 log_errors => on => on 。

任何帮助都会很棒,谢谢!

php docker logging kubernetes kibana
2个回答
2
投票

在主 php-fpm 配置文件中将

error_log = /dev/stdout
access.log = /dev/stdout
log_level
设置为您需要的级别。可能在
/etc/php/7.2/fpm/php-fpm.conf
或其他地方,具体取决于您的父 docker 镜像。

文档参考


0
投票

我得出的结论是不可能将 PHP-FPM 输出到

stdout
:

PHP-FPM 的文档记录很差,但仍然......

catch_workers_output
布尔
将工作线程 stdout 和 stderr 重定向到主错误日志中。如果未设置,根据 FastCGI 规范,
stdout
stderr
将被重定向到
/dev/null
。默认值:否

来自 PHP - FastCGI 进程管理器 (FPM) - 配置 - catch_workers_output

澄清一下:

  • catch_workers_output = no
    => stdout 和 stderr 将被重定向到
    /dev/null
  • catch_workers_output = yes
    => stdout 和 stderr 将被重定向到使用
    error_log
  • 配置的内容

因此 PHP-FPM 日志不能进入

stdout
,但从逻辑上讲也有意义,因为 PHP-FPM 工作节点可能使用
stdout
将 HTTP 响应发送回 Web 服务器。

我已经在 Symfony 生产部署中写信给

php://output
,并且这是在网站的 HTML“内部”编写的。

对于理解如何研究 PHP-FPM、Docker 和 kubernetes 的输出链接也很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.