标准syslog日志格式,syslog限制日志文件大小
http://blog..net/lzyzuixin/article/details/6915399
http://blog.itpub.net/category/35701/55237
一些基本概念:
syslog的日志分为8个等级,从0到7。对于详细信息,man syslog就可以了。默认值为info。
2)我们的系统日志在/var/log/下,比如messages,secure等。这里要说明的是,如果你做了什么事情,系统会将其写入相应的日志中。
也就是说,如果要将日志信息写入其中,只能使用syslog系统功能。
3)syslog日志系统提供远程写日志功能,即A机开通syslog服务和远程syslog功能,B机可以将自己的日志信息写入A机的日志系统。
4)syslog为用户提供了定制操作程序来写日志的工具。
特殊游戏:
1)如何向syslog的日志系统写消息?
您可以使用logger命令。syslog有八个日志级别,默认为info。此时,如果您将logger用作调试工具,syslog服务将不会写入日志。
例如:
cat /etc/syslog.conf
*.信息;mail.noneauthpriv.nonecron.none/var/log/messages
[root @ umail 180 etc]# logger-p debug“您好,这是一个测试”
-p选项指定优先级,记录器的默认优先级是info。指定syslog可以接收信息或更高优先级。
*.信息;mail.noneauthpriv.noneCron.none *此处表示所有设施,none表示没有收到相应的设施。
2)如何将命令的执行结果写入syslog的日志系统?
您可以使用initlog命令。例如:
initlog -c cat /etc/passwd
应该在-c选项后指定命令。
cat /etc/passwd的结果将被写入/var/log/message。
其中,initlog是在sysinit中调用的,它记录了整个sysinit脚本的引导过程,这样我们就可以在消息中看到它的引导信息。
3)实现syslog的远程日志功能。
服务器端:
在此打开/etc/sysconfig/syslog文件
更改SYSLOGD_OPTIONS=-m 0
是SYSLOGD_OPTIONS=-m 0 -r
只需重新启动系统日志服务。请注意,更改/etc/sysconfig/syslog和/etc/syslog将重新启动syslog服务,因为/etc/init.d/syslog脚本将在启动时加载这两个文件。
是默认的udp端口514。
netstat -anpgrep系统日志
UDP 0 0 0 0 0 0 0:514 0 0 0 0 0:* 3425/syslogd
客户:
vi /etc/syslog.conf
添加如下策略:
*.info@umail180
这里的*代表所有设施,也就是说,所有带有level info的日志写操作都会写到远程umail180服务器,其中umail180是主机名。
有两点需要强调:
第一,写本地syslog和写远程syslog是两回事,互不影响。
例如:你有两个策略:
*.信息/变量/日志/消息
*.info@umail180
它是一个写/var/log/messages和umail180的syslog。
描述:系统首先接收recv请求,然后写入文件,然后调用fsync将内存同步到磁盘。最后,它调用sendto函数,并将其发送到umail180服务器的514端口。
此时,服务器将接收请求,并将其写入syslog指定的设备文件中。
其次,syslog的服务器在收到请求时会根据设施将信息写入相应的文件,有利于信息的收集和管理。
例如:
在另一台服务器上登录到此客户端。
当然,此时本地syslog会收到请求,并根据syslog.conf文件的设施将信息写入/var/log/secure。
例如,如果您有并想要将信息写入远程服务器,请使用以下配置:
authpriv。*/var/log/secure
*.info@umail180
类似地,远程服务器将从本地syslog接收一个sendto请求,该请求将使用所请求的工具写入相应的文件,例如/var/log/secure。
此时,remote /var/log/secure还记录了登录客户端的日志信息。
4)如果要记录我服务器上那些鸟人的所有动作,可以用syslog吗?
答案是肯定的。但似乎要经过一番波折才能说清楚。
首先,并不是所有的操作都会写入日志,即使你把级别设置为最高级别。
问题是真正涉及到写syslog日志的唯一操作是调用syslog函数,我们刚刚看到了两个调用syslog函数的命令,logger和initlog。
他们各有各的用处。ls和cp之类的命令是不调用syslog函数的,所以就算你调级别调试也没用。
好的。如何解决以上问题,先说initlog。不调用initlog可以用syslog记录它的运行结果吗?
那很好。
initlog -c /bin/bash
此时,/var/log/message记录了它的运行结果。如果是rpm -qa,信息会很多。
可惜会失去提示。这和PS1有很多相似之处。但是所有的命令都有效。
再来说说logger。这里有一个区别。logger只是将信息写入syslog日志,并不执行这些信息。
要执行这里的命令,还应该将命令写入syslog,然后根据syslog的远程功能,发送到远程syslog服务器。
日志中的结果如下:
6月2日16:12:52
6月2日16:13:30 umail180 bash[24371]:黑客
6月2日16:13:40
6月2日16时13分43秒umail 180 bash[24371]:CD/usr/src/
6月2日16:13:43
6月2日16:13:46 umail 180 bash[24371]:CD red hat/
6月2日16时13分47秒
jun 2 16:28:11 umail 180 bash[24371]:CD SOURCES/
6月2日16:28:11
jun 2 16:28:13 umail 180 bash[24371]:ifconfig eth 0
6月2日16:28:14
jun 2 16:28:15 umail 180 bash[24371]:清除
要在这里更改bash的源程序:
简单描述一下bash的操作流程:
主程序文件是shell.c,它会在profile中做一些设置,包括PS1等。最后,它将在eval.c中运行reader_loop函数,
这个函数接收这些操作指令,然后调用execute_command函数来执行它们。当然,很复杂。这里,只是把
当收到这些指令时,调用syslog函数并将其写入syslog服务的日志就可以了。至于以后怎么处决他们,那不是我们关心的。
我换了两个地方:
eval.c中的reader_loop函数插在143行左右:print _ to _ syslog(current _ command);
Print_to_syslog是我的自定义函数。
我在print_cmd.c源程序中加入了这个函数。
如下所示:
打印到系统日志(命令)
COMMAND *命令;
{
命令_字符串_索引=0;
openlog (bash ,LOG_PID,LOG _ local 5);
syslog (LOG_INFO, %sn ,make _ command _ string(command));
close log();
}
这里的openlog的LOG_LOCAL5是facility,是在syslog.conf中定制的。
这里的syslog是一个系统函数,所以头文件syslog.h应该添加到print_cmd.c文件中。
把bash源程序放进去。/configure;制造;Make install就可以了。
最后,将您想要监视的用户的bash分配给新的bash文件。
例如,将以下内容添加到syslog.conf:
local5。*@umail180
只需在远程syslog服务器中添加一个与上面对应的。
local5。*/var/log/operator
呵呵。所以你可以坐在电脑前看/var/log/operator,欣赏服务器上所有写手的表演。
对于概念性学习,man检查syslog和syslog.conf以及openlog。
这些都很有用。