博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Syslog linux 日志
阅读量:5036 次
发布时间:2019-06-12

本文共 3963 字,大约阅读时间需要 13 分钟。

 

 

基本的一些概念:

1)syslog的日志为8个等级,从0到7,详细的信息,man syslog就可以了.默认是info.

2)我们的系统日志在/var/log/下面,像messages,secure等等,这里要说明的,不是你有操作,系统就会将其写入到对映的日志里
也就是说想写日志信息到里面,只能通过syslog系统函数.
3)syslog日志系统提供远程日志写入功能,即A机器开放syslog的服务,并开放远程syslog功能,B机器可以将自己的日志信息写入到A机器的日志系统
4)syslog提供facility使用户自定义的来操纵程序写日志.

特殊玩法:

1)如何将消息写入到syslog的日志系统?

可以用logger命令,syslog日志等级有8个,默认是info,这时你用logger为debug(最低)来写日志,syslog服务是不会写日志的.

比如:

cat /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none  /var/log/messages

[root@umail180 etc]# logger -p debug "hello this is a test"

-p选项来指定优先级,logger的默认优先为是info.指定info或更高的优先级都可以被syslog所接收.

*.info;mail.none;authpriv.none;cron.none这里的*表示所有的facility,而none表示对映的facility不被接收

 

2)如何将命令的执行结果写入到syslog的日志系统?

可以用initlog命令.例如:
initlog -c "cat /etc/passwd"

-c选项后面要指定command

这时会把cat /etc/passwd的结果写入到/var/log/message.
其中initlog在sysinit中就有调用,它记录了整个sysinit脚本的启动引导过程,这样我们才会在messages里看到它的引导信息

3)实现syslog的远程写日志功能.

服务端:

这里要打开/etc/sysconfig/syslog文件

更改SYSLOGD_OPTIONS="-m 0"

为SYSLOGD_OPTIONS="-m 0 -r "

重启syslog服务即可,注意更改/etc/sysconfig/syslog和/etc/syslog都要重启syslog服务,因为/etc/init.d/syslog脚本在启动时要加载这两个文件.

默认是开放514的udp端口

netstat -anp|grep syslog
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               3425/syslogd       

客户端:
vi /etc/syslog.conf
增加一条策略,如下:
*.info       @umail180
这里的*代表所有的facility,也就是说所有的级别为info的写日志操作都将写入到远程的umail180服务器,这里的umail180是主机名
有两点要重点说明:
第一点,写本地syslog,和写远程的syslog是两回事,相互不影响
例如: 你有两条策略:
*.info       /var/log/messages
*.info       @umail180
它是即写/var/log/messages,又写umail180的syslog

说明 :系统是先接收到recv请求, 再去写文件,然后调用fsync同步内存到磁盘.最后它调用sendto函数发送到umail180这台服务器的514端口

这时在服务端会收到请求.并写到syslog指定facility的文件中.

第二点,syslog的服务端收到请求,会根据facility将信息写到对映的文件中,这样有利于信息的汇集和管理

例如:
在其它服务器登录这台客户端

当然这时本地的syslog会收到请求,会根据syslog.conf文件的facility将信息写入到/var/log/secure中.

而如果你有也想将信息写入到远程服务器,例如采用下面的配置:
authpriv.*      /var/log/secure
*.info       @umail180

同样远程服务器将收到本地syslog的sendto请求,它将跟据请求的facility,写入的对映的文件中.比如/var/log/secure

这时在远程的/var/log/secure中也记录了一份登录客户端的日志信息.

4)想记录那些鸟人在我服务器上的所有操作,可以用syslog实现吗?
答案是可以的.但要说明白似乎要走些弯弯.
首先并不是所有的操作都会写入到日志中,即使你把级别调到最高也是如此
问题就在于,真正涉及到写syslog的日志的操作,只能是调用syslog函数,而调用syslog函数的命令我们刚才见到两个,logger和initlog
它们各有用处.像ls和cp这种命令是不会调用syslog函数,所以即使你将级别调整到debug,也是无用的.

那好.如何解决上面的问题,先说initlog,我在不调用initlog的情况下,能用syslog记录它的运行结果吗?

这样就可以.

initlog -c /bin/bash

这时/var/log/message就记录下它操作的结果.如果是rpm -qa,那就会有一大批的信息.

但遗憾的是,它会丢了PROMPT.就是PS1那一大堆东西.但所有的命令都有效.

再来说说logger.这里有一点要区分,logger只是写信息到syslog的日志中,它是不执行那些信息的.

这里要执行命令,也要将命令写到syslog中,再根据syslog的远程功能,发送到远端的syslog服务器.
在日志中将是这样的结果:
Jun  2 16:12:52 umail180 bash[24371]: ls --color=tty -l
Jun  2 16:13:30 umail180 bash[24371]: hacker
Jun  2 16:13:40 umail180 bash[24371]: ls --color=tty
Jun  2 16:13:43 umail180 bash[24371]: cd /usr/src/
Jun  2 16:13:43 umail180 bash[24371]: ls --color=tty
Jun  2 16:13:46 umail180 bash[24371]: cd redhat/
Jun  2 16:13:47 umail180 bash[24371]: ls --color=tty
Jun  2 16:28:11 umail180 bash[24371]: cd SOURCES/
Jun  2 16:28:11 umail180 bash[24371]: ls --color=tty
Jun  2 16:28:13 umail180 bash[24371]: ifconfig eth0
Jun  2 16:28:14 umail180 bash[24371]: ls --color=tty
Jun  2 16:28:15 umail180 bash[24371]: clear

这里要改下bash的源程序:
简单说下bash的运行流程:
主程序文件是shell.c,它会做一些profile中的设定,包括PS1等等,最后它会运行eval.c中的reader_loop函数,
这个函数接收这些操作指令.再调用execute_command函数执行之,当然它后面非常复杂,这里只要把
这些指令接收进来,再调用syslog函数写到syslog服务的日志中就OK了.至于后面怎么执行,那不是我们关心的.

我改了两个地方:

eval.c中的reader_loop函数,大概在143行插入了:print_to_syslog(current_command);
print_to_syslog是我自定义的函数.
这个函数,我加到了print_cmd.c源程序中.
如下:
print_to_syslog(command)
     COMMAND *command;
{
  command_string_index = 0;
  openlog ("bash", LOG_PID, LOG_LOCAL5);
  syslog (LOG_INFO, "%s\n", make_command_string(command));
  closelog();
}

这里的openlog的LOG_LOCAL5是facility,这个是在syslog.conf中自定义的.

这里的syslog是系统函数,所以要在print_cmd.c文件中加入头文件syslog.h.

把bash的源程序再./configure;make;make install就行了.

最后把想要监控的用户的bash指定到新的bash文件就可以了.

例如在 syslog.conf中添加下面的样子:
local5.*      @umail180

在远端的syslog服务器中添加和上面对映的就行了.

local5.*      /var/log/operator

 

呵呵.这样你就可以坐在电脑前看着/var/log/operator,欣赏所有服务器上操作者的表演了.

有关于概念上的学习,man查看下syslogsyslog.conf,还有 openlog
这些都是很有用的.

 

转载于:https://www.cnblogs.com/diyunpeng/archive/2011/12/27/2303549.html

你可能感兴趣的文章
微软 SqlHelper代码、功能、用法介绍:高效的组件
查看>>
丰子恺-《豁然开朗》
查看>>
JavaScript 对象
查看>>
原生js轮播图(面向对象)
查看>>
数据分析软件及spss简单操作
查看>>
自定义通信协议
查看>>
Unity3d--Space Shooter(官方教程)--学习感想(3)
查看>>
java中Collections.sort()方法实现集合排序
查看>>
nodejs笔记之事件循环
查看>>
JVM之垃圾收集器
查看>>
Windows下R画图举例
查看>>
php-fpm 重启 nginx单独配置 重启
查看>>
JS正则表达式RegExp 对象
查看>>
Springboot
查看>>
go语言之进阶篇值语义和引用语义
查看>>
go语言之进阶篇无缓冲channel
查看>>
linux 常见命令
查看>>
func_get_args 笔记
查看>>
hdu 2881(LIS变形)
查看>>
关于break,continue,goto,return语句区别详解(所有语言通用的语法知识)
查看>>