容器PHP程序标准输出到日志服务

容器与中间件容器服务技术服务知识库
问题描述

日志采集模式是标准输出stdout,nginx日志配置输出stdout可以正常接收,容器中PHP程序输出日志到/dev/stdout,日志服务无法收到

问题原因
  1. 在LNMP容器中,会只收集1号进程的标准输出,日志服务将1号进程的标准输出拉取日志中记录,
  2. 用户启动的php程序无法将日志写入到1号进程,fopen('/proc/self/fd/2', "w")动作会报错failed to open stream: Permission denied

图片

  1. 使用fopen('php://stdout', "w")方式只能支持CLI方式,无法打印到1号进程https://www.php.net/manual/en/features.commandline.io-streams.php
解决方案

使用error_log函数把日志写出来/proc/1/fd/2

  1. error_log使用示例代码
<?php
echo "Hello World!\n";
$txt = "Bill Gates\n";
error_log($txt,0);
$txt = "Steve Jobs\n";
error_log($txt,0);
fclose($myfile);
?>
  1. 然后把php.ini 的日志位置更改成 /proc/1/fd/2

图片

  1. 日志收集的效果

图片 图片

51
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论