php利用syslog做日志备份或消息发送

php如何将日志写进syslog

CentOS 6开始,日志服务由syslogd变成了rsyslogd,在配置rsyslogd前需要了解下系统日志的8个级别:

0 EMERG(紧急):可能导致系统不可用的情况
1 ALERT(警报):必须马上解决的问题
2 CRIT(严重错误):比较严重的情况
3 ERR(错误):运行出现错误
4 WARNING(警告):可能会影响系统功能的情况
5 NOTICE(注意):普通提示信息,不影响系统
6 INFO(普通信息):一般信息
7 DEBUG(调试):程序调试用

一 客户端配置
1、安装rsyslog

1、安装rsyslog
[root@localhost ~]# rpm -qa | grep rsyslog
rsyslog-7.4.7-12.el7.x86_64
[root@localhost ~]# yum install rsyslog
[root@localhost ~]# vi /etc/rsyslog.conf
*.* @192.168.1.106:514
注:日志默认使用udp协议,使用@@则使用tcp协议。

二 服务器配置

服务器端修改/etc/rsyslog.conf文件以及/etc/sysconfig/rsyslog文件。

1、修改/etc/rsyslog.conf
[root@localhost ~]# vi /etc/rsyslog.conf
#Provides UDPsyslog reception
$ModLoad imudp
$UDPServerRun514
#### GLOBAL DIRECTIVES ####
#从远程客户端接收的日志写入到以它们IP命名的单个文件夹中
$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
或者归类的更加详细
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template DynamicFile,"/var/log/gxmlogs/%$YEAR%/%$MONTH%/%$DAY%/%fromhost-ip%-test.log"
*.* ?DynamicFile
以打开日志服务监听,输入netstat –lunp可见rsyslog监听于514端口(默认端口)


2、修改/etc/sysconfig/rsyslog
[root@localhost ~]# vi /etc/sysconfig/rsyslog  #文件中,需修改
SYSLOGD_OPTIONS="-m240 -r"
其中-r表示接受外部日志的写入。


3、防火墙允许514端口,并重启防火墙,关闭selinux


4、重启日志服务
[root@localhost ~]# systemctl stop  rsyslog.service    #关闭日志服务
[root@localhost ~]# systemctl start  rsyslog.service     #开启日志服务


5、客户端可以用logger测试测试:
使用logger命令发送日志进行测试,
[root@localhost ~]# logger –p user.info “teststr”
发送日志到本机,本机会进行转发到日志服务器,在/var/log/messages中查看发送的日志。


6、在客户端/etc/bashrc结尾处加上以下内容,这样系统执行的命令会记录到/var/log/messages日志中,便于测试
# vi /etc/bashrc     
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'

# source /etc/bashrc

php代码

//param 1   为发送日志的标识
//param 2  LOG_PID 进程
//param 3   LOG_LOCAL4 配置文件里的日志保存模块名
openlog("EDR.".$report_modle, LOG_PID | LOG_PERROR, LOG_LOCAL4);

//param1   发送的日志级别
//param2   发送的内容
syslog(LOG_INFO, "LOG MESSAGE: " . json_encode($report_data));

closelog();

syslog 默认字节有大小限制,UDP 2k,TCP 32k

可以调节发送内容的大小

希望rsyslog能发送到日志服务器的消息长度超过默认的2k,可以设置$MaxMessageSize

方法:

在$ModLoad imtcp前,设置:

$MaxMessageSize 32k

此配置包括发送和接收,所以rsyslog客户端、服务端都要设置。

你可能感兴趣的:(Php,Linux)