Shr*_*eni 4 php debugging ubuntu error-log amazon-ec2
我们将进行部署设置,我们将拥有许多服务器,其中大部分服务器在流量上升时自动添加到负载均衡器.这种设置的问题在于,如果一个开发人员需要拖尾日志来解决问题,他将不得不在每台服务器上打开一个控制台,由于开发人员通常不知道我们可能会使用多少台服务器,因此这很复杂当时有功能.
如果开发人员可以在一台服务器中找到所有日志 - 比如我们的部署服务器,则故障排除变得更加容易.
为此,我考虑使用cron设置从每台FE计算机到部署服务器的推送,该计划将复制我们的部署服务器上的日志.这种方法存在两个问题:
为了解决这个问题,我正在研究一种连接error_log或PEAR Log以将日志直接发送到我们的部署服务器的方法,该服务器会将其实时记录到/ var/log /中的本地位置.
谁知道我怎么配置这个?或者也许是一项服务来实现这一目标?
我们的服务器都是Ubuntu 10.04 LTS,我们在AWS的EC2实例上运行这些服务器.我们的PHP版本是5.3.
您可以做的是登录自定义syslog通道,该通道写入中央日志记录服务器.
php.ini中
error_log = syslog
Run Code Online (Sandbox Code Playgroud)
php框上的syslog-ng.conf
destination php { tcp("10.10.10.10" port(5140)); };
log { source(src); filter(f_php); destination(php); };
Run Code Online (Sandbox Code Playgroud)
这将发送所有PHP记录到一个盒子10.10.10.10
,其中syslog-ng
在端口监听5140
.
在日志框中,您必须打开5140
ec2安全组中的端口
这是一个关于如何设置syslog服务器的好教程
http://praxis.edoceo.com/howto/syslog-ng
编辑:这当然也可以将您的PHP框的其他重要日志源记录到日志服务器..考虑流量日志,系统日志等.
@MichelFeldheim 的答案是起源,但我们对其进行了改进,以处理写入多个日志文件的多个应用程序。
\n\n中央日志服务器
\n\n在中央日志服务器中,安装 syslog-ng 并进行配置:
\n\nsudo apt-get install syslog-ng\n
Run Code Online (Sandbox Code Playgroud)\n\n将以下内容添加到 /etc/syslog-ng/syslog-ng.conf 中:
\n\ndestination d_php { file("$PROGRAM" owner(www-data) group(www-data) perm(0644)); };\nfilter f_php { program("^\\/var\\/log\\/"); };\nlog { source(s_all); filter(f_php); destination(d_php); flags(final); };\n\nsource s_all {\n # ....\n # .... LET THE PREVIOUS CONTENT STAY - add the following line\n tcp(port(5140) keep_alive(yes));\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n重新启动系统日志服务:
\n\nsudo service syslog-ng restart\n
Run Code Online (Sandbox Code Playgroud)\n\n在 FE 服务器上
\n\n在每台FE 服务器上,安装 syslog-ng 并进行配置:
\n\nsudo apt-get install syslog-ng\n
Run Code Online (Sandbox Code Playgroud)\n\n将以下内容添加到每个 FE 服务器上的 /etc/syslog-ng/syslog-ng.conf 中:
\n\ndestination php { tcp("log.example.com" port(5140)); };\nlog { source(s_all); filter(f_php); destination(php); };\nfilter f_php { facility(user); };\n
Run Code Online (Sandbox Code Playgroud)\n\n重新启动系统日志服务器:
\n\nsudo service syslog-ng restart\n
Run Code Online (Sandbox Code Playgroud)\n\n应用程序代码更改:
\n\n现在,应用程序代码可以这样更改。假设每个应用程序都有这样的代码写入单独的文件,并且您希望在中央日志服务器中反映相同的结构:
\n\n// PREVIOUS CODE: using PEAR Log\ninclude \'/usr/share/php/Log.php\';\n$log = Log::singleton(\'file\', \'/var/log/nginx/xxx.log\', \'\', array(), PEAR_LOG_INFO);\n// PREVIOUS CODE: Using error_log\nini_set(\'error_log\' , \'/var/log/nginx/xxx.log\');\n
Run Code Online (Sandbox Code Playgroud)\n\n新代码应如下所示:
\n\n// NEW CODE: using PEAR Log\ninclude \'/usr/share/php/Log.php\';\n$log = Log::singleton(\'syslog\', LOG_USER, \'/var/log/nginx/xxx.log\', array(), PEAR_LOG_INFO);\n// NEW CODE: Using error_log\nini_set(\xe2\x80\x98error_log\xe2\x80\x99, \xe2\x80\x98syslog\xe2\x80\x99);\nopenlog(\'/var/log/nginx/xxx.log\', LOG_NDELAY, LOG_USER);\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您的 FE 服务器和日志服务器都在同一个 EC2 安全组内,则无需打开端口,因为在组内,只要有服务正在侦听,所有端口都可以自由访问。
\n\n这种方法允许您的每个应用程序、模块决定它们是否需要集中日志记录。
\n 归档时间: |
|
查看次数: |
4471 次 |
最近记录: |