容器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
相关资源
字节跳动 EB 级湖仓一体分析服务 LAS 的实践与展望
火山引擎湖仓一体分析服务 LAS 是面向湖仓一体架构的 Serverless 数据处理分析服务,提供一站式的海量数据存储计算和交互分析能力,完全兼容 Spark、Presto、Flink 生态,在字节跳动内部有着广泛的应用。本次演讲将介绍 LAS 在字节跳动内部的发展历程和大规模应用实践,同时介绍 LAS 在火山引擎上的发展规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论