当前位置: 首页 > 科技观察

浅谈Linux下的syslog守护进程

时间:2023-03-18 19:01:08 科技观察

【引用自Muhui_Zi的博客】syslog是Linux下默认的日志守护进程。任何希望生成日志信息的程序都可以通过syslog接口来实现。同时,几乎所有的网络设备都可以通过syslog协议以UDP的形式向远程服务器传输日志信息。远程接收日志服务器必须通过syslogd监听UDP端口514,并根据syslog.conf配置文件的配置进行处理。.配置文件/etc/rsyslog.conf指定syslogd如何根据设备和消息的严重性报告消息。在这里你只需要有个大概的了解,下面会说到这些东西。关于配置文件:在CentOS之前的版本中,配置文件是/[etc/syslog.conf],不清楚是哪个版本的,但是从CentOS6.5开始,配置文件名改为[/etc/rsyslog.conf】。syslog支持日志分类输出到特定文件,但是有几个限制:1.syslog日志输出支持分类,但是不支持每个进程单独输出到一个文件(因为syslog不是日志库生成的完整集合);2、syslog输出的日志文件位置不是任意的,默认限制在[/var/log/]目录下。如果指定到其他位置,则视为无效;在这个文件中,抛出了大部分的评论信息,主要内容基本上是这样的格式:从前到后,依次为:[service.priorityactionfield]。其中[Service.Priority]统称为选择标准,如下图所示。条件选择是为了对服务进行分类,方便syslog管理日志输出。在同时一行的配置中,允许出现多选条件,多选条件之间用;隔开。service(facility),用于指定syslog的功能,主要包括:kern内核信息,首先通过klogd传递;用户用户进程;邮寄邮件;后台进程;authpriv授权信息;syslog系统日志;lpr打印信息;news新闻组信息;uucp信息cron计划和uucp生成的任务信息。marksyslog内部函数用于生成时间戳local0----local7和自定义程序,例如使用local5作为ssh函数*通配符代表除mark之外的所有函数优先级(级别),指定syslog的优先级,从高开始tolow:emergorpanic系统不可用(最紧急消息)alert需要立即修改的条件(紧急消息)crit阻止某些工具或子系统功能实现的错误条件(关键消息)err块工具或错误条件(errormessages)implementedbysomesubsystemsandsomefunctionswarning警告消息(warningmessages)noticegeneralconditionsofimportance(commonbutimportantmessages)infoinformationalmessages(notificationmessages)debug不包含函数条件或其他关于问题的信息(debuglevel-信息量最大的)none无重要性级别,通常用于故障排除(不记录任何日志消息ges)*所有级别,除了noneaction:1./var/log/lastlog:logeveryusage用户最近的登录时间,所以当用户登录时,会显示上次登录时间,你要注意到这个时候,如果不是你最后一次登录时间,就说明你的账号可能被封了,有人盗用了。这个文件可以用/usr/bin/lastlog命令读取。2、/var/run/utmp:记录每个用户登录系统的时间,who、users、finger等命令都会查看这个文件。3./var/log/wtmp:记录每个用户签入和签出的时间,最后一个命令会查看这个文件。该文件还记录了关机和重启的动作。4./var/log/secure:登录系统5./var/log/maillog:记录sendmail和pop等相关信息。6./var/log/cron:记录crontab相关信息,定时器信息7./var/log/dmesg:/bin/dmesg会显示这个文件,就是开机时的屏幕信息。8./var/log/xferlog:记录那些地址到ftp得到那些文件。9./var/log/messages:大部分系统信息都记录在这里,包括登录、校验密码、登录失败n、ftp、su等调用syslog的守护进程:syslog也是一个守护进程,准确的说应该是rsyslog,位于/etc/rc.d/init.d/rsyslog,这个是启动syslog的脚本当我们修改启动日志文件后,需要使用【servicersyslogrestart】命令重启服务。Syslog不仅用来记录本地文件的日志信息,还可以作为日志服务器接收远程系统的信息。启动该服务有两个常用选项:-r:使用当前主机作为日志服务器,在端口514上侦听传入的UDP数据包,并接收来自远程系统的信息。如果没有此选项,则不会从远程系统接收到任何信息。-h:使当前日志服务器能够传输日志信息。如何配置中央日志服务器:1、编辑/etc/sysconfig/rsyslog(CentOS6.5之前的文件叫syslog),可以在启动选项的时候声明启动服务。-r:如前所述,表示允许接收外部日志信息;-m**:将默认时间戳标签信息的频率改为自己指定的值【eg:-m240,表示日志文件每240分钟增加一行时间戳信息】;-x:表示中央日志服务器不想解析其他机器的FQDN(完全限定域名,指的是主机名+完整路径);SYSLOGD_OPTIONS="-r-x-m240-c5"2、重启rsyslog服务servicersyslogrestart3。关闭防火墙(iptables),允许514端口的连接通过;4.在客户端配置syslog。方法一:在客户端的syslog配置文件中,对相关配置行进行操作action部分使用“@”字符指向中央日志服务器,而不是指向本地的/var/log/.....#Logallthemailmessagesinoneplace.mail.*@192.168.3.24方法二:在DNS中定义一台机器,随机命名,这里以“loghost”为例,然后将客户端的配置文件改为如下形式。这样以后如果更换了日志服务器,就不用一个一个修改客户端的syslog配置文件了。#Logallthemailmessagesinoneplace.mail.*@loghost配置客户端后需要重新启动。syslog函数接口:#includevoidopenlog(constchar*ident,intoption,intfacil-ity);#ident:记录哪个进程,也就是进程名#option常用选项:LOG_CONS:LOG_PID:打印每条日志信息包含当前进程的PID#facil-ity常用选项:LOG_USER:每条打印的日志信息包含级别当前用户信息voidsyslog(intpriority,constchar*format,...);#format:输出日志信息的参数List,用法类似printfvoidcloselog(void);测试用例:#include#includeintmain(intargc,char*argv[]){openlog(argv[0],LOG_CONS|LOG_PID,LOG_USER);intcount=0;while(count<5){syslog(LOG_INFO,"%d,loginfotest...",count);count++;}closelog();return0;}为了同时测试配置文件,在syslog配置中增加一行文件如下:user.*/var/log/0.1#该文件默认只能放在/var/log下,放在其他目录下重启rsyslog服务无效;执行原程序,可以在/var/log/看到0.log文件,打开文件,内容如下:[root@www~]#cat/var/log/0.logApr723:13:12www./test_log[4063]:0,loginfotest...Apr723:13:12www./test_log[4063]:1,loginfotest...Apr723:13:12www./test_log[4063]:2,loginfotest。..Apr723:13:12www./test_log[4063]:3,loginfotest...Apr723:13:12www./test_log[4063]:4,loginfotest...这里看一个简单的例子就够了。我看到网上很多人都在讨论怎么办使用syslog为特定进程输出日志文件,目前还没有很好的解决办法。配置文件中虽然提供了local0~local7的自定义服务,但并不完善,很多情况下无法真正实现。我们的宗旨。这里要说的是,Linux下的syslog似乎并没有为用户的每个进程提供日志输出。Syslog只是作为一个完整的服务管理机制。它针对一类服务,用于作为日志服务器,实现对整个系统网络中日志的维护(对日志的维护实际上是对整个计算机群的维护)。同时,在实际项目中,并没有将syslog作为一套完整的日志管理工具来使用。Linux下提供了很多完善的日志库工具,比如log4cplus、zlog等。