-->

如何设置PHP登录去到远程服务器?(How do I set up PHP Logging to g

2019-07-04 03:41发布

我们将部署安装,我们将有许多服务器,其中大部分自动添加到负载平衡器,当流量上升。 这种设置的问题在于,如果个人开发者需要尾日志解决的东西,他将不得不打开每个服务器,它是由复杂的事实,开发商往往不知道在一个控制台多少服务器,我们可能在当时的功能。

如果开发者可以在一个服务器上的所有日志 - 说我们的部署服务器,则故障排除变得更容易。

为了实现这个,我是用一个cron将复制我们的部署服务器上的日志,从每个FE机推建立到部署服务器的思考。 有两个问题的方法:

  • 有1分钟的滞后,因为crons不能被更频繁地运行。
  • 每个FE机器上的cron将会有设置同步到部署服务器上的特定位置,但在前面,我不知道这样FE服务器将存在多少。

为了解决这个问题,我在看的方式来连接的error_log,或梨登录到日志直接发送到我们的部署服务器,将其记录在实时它位于/ var /日志本地位置/ ..

任何人都知道我该怎么配置呢? 或者,也许它完成这项服务?

我们的服务器都的Ubuntu 10.04 LTS,我们正在运行在AWS EC2实例这些服务器。 我们的PHP版本是5.3。

Answer 1:

你可以做的是登录到其写入中央日志服务器的自定义系统日志通道。

php.ini中

error_log = syslog

在PHP箱的syslog-ng.conf是否

destination php { tcp("10.10.10.10" port(5140)); };
log { source(src); filter(f_php); destination(php); };

这将发送所有PHP记录到一个盒子10.10.10.10其中syslog-ng是端口监听5140

在你的日志中,您必须打开端口5140的EC2安全组中

以下是如何建立一个系统日志服务器上的一个很好的教程

http://praxis.edoceo.com/howto/syslog-ng

编辑:这当然也将有可能登录的你的php箱等重要日志源的日志服务器以及..流量日志,系统日志等等,等等的思考



Answer 2:

从@MichelFeldheim答案是起源,但我们改进后它来处理多个应用程序写入多个日志文件。


中央日志服务器

中央日志服务器 ,安装syslog-ng的,因此配置它:

sudo apt-get install syslog-ng

以下内容添加到/etc/syslog-ng/syslog-ng.conf:

destination d_php { file("$PROGRAM" owner(www-data) group(www-data) perm(0644)); };
filter f_php { program("^\/var\/log\/"); };
log { source(s_all); filter(f_php); destination(d_php); flags(final); };

source s_all {
        # ....
        # .... LET THE PREVIOUS CONTENT STAY - add the following line
        tcp(port(5140) keep_alive(yes));
};

重新启动syslog服务:

sudo service syslog-ng restart

在FE服务器

在每个FE服务器 ,安装syslog-ng的,因此配置它:

sudo apt-get install syslog-ng

添加到/etc/syslog-ng/syslog-ng.conf在每个FE服务器的以下情况:

destination php { tcp("log.example.com" port(5140)); };
log { source(s_all); filter(f_php); destination(php); };
filter f_php { facility(user); };

重新启动系统日志服务器:

sudo service syslog-ng restart

更改应用程序代码

现在, 应用程序代码可以由此改变。 假设每个应用程序都有这样的写作到一个单独的文件中的代码,并要体现在中央日志服务器相同的结构:

// PREVIOUS CODE: using PEAR Log
include '/usr/share/php/Log.php';
$log = Log::singleton('file', '/var/log/nginx/xxx.log', '', array(), PEAR_LOG_INFO);
// PREVIOUS CODE: Using error_log
ini_set('error_log' , '/var/log/nginx/xxx.log');

新代码应该是这样的:

// NEW CODE: using PEAR Log
include '/usr/share/php/Log.php';
$log = Log::singleton('syslog', LOG_USER, '/var/log/nginx/xxx.log', array(), PEAR_LOG_INFO);
// NEW CODE: Using error_log
ini_set(‘error_log’, ‘syslog’);
openlog('/var/log/nginx/xxx.log', LOG_NDELAY, LOG_USER);

如果您FE服务器和日志服务器都是一样的EC2安全组中,那么就没有必要打开端口,因为组内,所有端口都可以自由访问,只要一个服务被倾听。

这种方法可以让你的每个应用,模块,以决定他们是否希望中央记录或没有。



文章来源: How do I set up PHP Logging to go to a remote server?