编辑:因为我看到了反对票并且我理解它们,所以将澄清:该应用程序没有以标准方式记录,也不是我要求改变这一点的。另外,当时作为 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-fpm 配置文件中将
error_log = /dev/stdout
、access.log = /dev/stdout
和 log_level
设置为您需要的级别。可能在 /etc/php/7.2/fpm/php-fpm.conf
或其他地方,具体取决于您的父 docker 镜像。
我得出的结论是不可能将 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 的输出链接也很有帮助。