【问题标题】:Can't get php-fpm logs into stdout无法将 php-fpm 日志输入标准输出
【发布时间】:2019-03-30 08:46:18
【问题描述】:

编辑:因为我看到了反对票并且我理解他们,所以我会澄清:该应用程序没有记录标准方式,也不是我改变它的呼吁。另外,当时作为k8s的新手,不知道如何获取其他文件。开发人员无法改变这一点(不记得为什么),但我确实设法用 fluentD/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。

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

【问题讨论】:

  • 你使用哪个 docker 镜像?
  • 嗨,我们使用:php:7.1-fpm-alpine
  • 将 /usr/local/etc/php-fpm.d/docker.conf 中的 access.log 更改为 access.log = /proc/self/fd/1 并重启 php-fpm 实例。
  • 刚刚检查过,它已经这样设置了。也许它与在那里运行的应用程序代码有关。我可以在容器内的 random-name.log 中看到 php-fpm 日志,如果我执行 kubelog pod-name -c fpm 也是如此,但无法将其取出,因此我可以通过 kibana 共享它。
  • 原始设置为 2 (stderr)

标签: php docker logging kubernetes kibana


【解决方案1】:

在主 php-fpm 配置文件中将 error_log = /dev/stdoutaccess.log = /dev/stdoutlog_level 设置为您需要的任何级别。可能在 /etc/php/7.2/fpm/php-fpm.conf 或其他位置,具体取决于您的父 docker 映像。

Documentation Reference

【讨论】:

  • 谢谢你,会尝试并回复你。
  • 还是不行,从 fpm 看到一些日志,但不是全部。我需要查看所有内容,以检查该应用程序的运行情况,而无需执行 kubectl log 或进入其中。再次感谢!
  • 您是否缺少访问日志?答案更新为将access.log 也设置为/dev/stdout
  • 当我设置 access.log = /dev/stdout 时,fpm 容器崩溃了。
【解决方案2】:

事实证明,开发人员需要在应用中更改一些与它的日志记录方式相关的内容。

一旦完成,多亏了这里的建议,我将能够获取日志。

干杯

【讨论】:

  • 发生了什么变化?
  • 这并没有为您的原始问题提供任何解决方案。
  • 这不是在我们这边来修复,而是在开发方面。
  • 是的,对不起。我编辑了 OP。开发人员无法更改应用记录的方式,但我们确实设法使用 fluentbit 获取自定义日志文件。
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 2021-01-13
  • 2018-05-22
  • 2019-09-05
  • 2021-10-31
  • 2013-09-18
  • 2018-04-02
  • 2016-09-24
相关资源
最近更新 更多