容器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. 日志收集的效果

图片 图片

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

所属团队号:
相关资源
火山引擎 EMR 基于 Proton 的存算分离实践
EMR 团队针对这些挑战自研了 Proton 加速引擎,深度优化对象存储读写能力,与 Hive/Spark/Trino 等计算引擎集成后,在不改变用户使用习惯的前提条件下,可提供对象存储数据集的透明加速服务。在离线场景下,其性能基本持平存算一体架构。本次分享将介绍 Proton 技术能力和最佳实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论