Linux rsyslog

rsyslog:

在大多数据的Linux发行版中,rsyslog是一个预先安装的标准日志后台进程。

在 客户端/服务端 的系统配置中,rsyslog 能扮演两个角色;

  1. 作为一个日志服务器能从其它设备收集日志信息,
  2. 作为一个日志客户端,rsyslog发送自己内部日志信息到远程日志服务器

linux日志管理:

内核信息 -> klogd -> syslogd -> /var/log/messages等文件 
其他信息 -> syslogd -> /var/log/messages等文件 
syslog配置文件 -> /etc/syslog.conf

配置文件格式:

facility.level    action

facility.level为选择条件,分为两个字段,之间用一个小数点(.)分隔。action和facility.level之间使用TAB隔开。

前一字段是一项服务,后一字段是一个优先级。

选择条件其实是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。

在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)把它们分隔开。

action字段所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是可以使 syslogd 生成后处理信息。

  1. facility 指定 syslog 功能,主要包括以下这些:
kern     内核信息,首先通过 klogd 传递; 
user     用户进程; 
mail     邮件; 
daemon   后台进程; 
authpriv 授权信息; 
syslog   系统日志; 
lpr      打印信息; 
news     新闻组信息; 
uucp     由uucp生成的信息 
cron     计划和任务信息。 
mark     syslog 内部功能用于生成时间戳 
local0—-local7   与自定义程序使用,例如使用 local5 做为 ssh 功能
*        通配符代表除了 mark 以外的所有功能
  1. level 指定syslog优先级:
syslog 级别如下:(按严重程度由高到低的顺序列出了所有可能的优先级。) 
emerg 或 panic   该系统不可用(最紧急消息) 
alert            需要立即被修改的条件(紧急消息) 
crit             阻止某些工具或子系统功能实现的错误条件(重要消息) 
err              阻止工具或某些子系统部分功能实现的错误条件(出错消息) 
warning          预警信息(警告消息) 
notice           具有重要性的普通条件(普通但重要的消息) 
info             提供信息的消息(通知性消息) 
debug            不包含函数条件或问题的其他信息(调试级-信息量最多) 
none             没有重要级,通常用于排错(不记录任何日志消息) 
*                所有级别,除了none
  1. Application 中定义level:
0: LOG_EMERG,紧急情况 
1: LOG_ALERT,高优先级故障,例如数据库崩溃 
2: LOG_CRIT,严重错误,例如硬件故障 
3: LOG_ERR,错误 
4: LOG_WARNING,警告 
5: LOG_NOTICE,需要注意的特殊情况 
6: LOG_INFO,一般信息 
7: LOG_DEBUG,调试信息
  1. kernel中定义level(使用printk函数设定level):
0: KERN_EMERG, 系统无法使用 
1: KERN_ALERT, 必须立即执行 
2: KERN_CRIT, 紧急状态 
3: KERN_ERR, 错误状态 
4: KERN_WARNING, 警告状态 
5: KERN_NOTICE, 正常状态且十分重要 
6: KERN_INFO, 报告 
7: KERN_DEBUG, debug-level讯息
  1. action:
/var/log/lastlog : 记录每个使用者最近签入系统的时间, 因此当使用者签入时, 就会显示其上次签入的时间, 您应该注意一下这个时间, 若不是您上次签入的时间, 表示您的帐号可能被人盗用了. 此档可用 /usr/bin/lastlog 指令读取. /var/run/utmp : 记录每个使用者签入系统的时间, who, users, finger 等指令会查这个档案. 
/var/log/wtmp : 记录每个使用者签入及签出的时间, last 这个指令会查这个档案. 这个档案也记录 shutdown 及 reboot 的动作. 
/var/log/secure : 登录系统的信息 
/var/log/maillog : 记录 sendmail 及 pop 等相关讯息. 
/var/log/cron : 记录 crontab 的相关讯息 ,定时器的信息 
/var/log/dmesg : /bin/dmesg 会将这个档案显示出来, 它是开机时的画面讯息. 
/var/log/xferlog : 记录那些位址来 ftp 拿取那些档案. 
/var/log/messages : 系统大部份的讯息皆记录在此, 包括 login, check password , failed login, ftp, su 等.
  1. 例子:
//其中*是通配符,代表任何设备;none表示不对任何级别的信息进行记录。 
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages 
//将authpriv的任何级别的信息记录到/var/log/secure文件中,这主要是一些和认、权限使用相关的信息。 
authpriv.* /var/log/secure 
//将mail设备中的任何级别的信息记录到/var/log/maillog文件中,这主要是和电子邮件相关的信息。 
mail.* -/var/log/maillog 
//将cron设备中的任何级别的信息记录到/var/log/cron文件中,这主要是和系统中定期执行的任务相关的信息。 
cron.* /var/log/cron 
//将任何设备的emerg级别的信息发送给所有正在系统上的用户。 
*.emerg * 
//将uucp和news设备的crit级别的信息记录到/var/log/spooler文件中。 
uucp,news.crit /var/log/spooler 
//将和系统启动相关的信息记录到/var/log/boot.log文件中。 
local7.* /var/log/boot.log 
//“mail.*”将发送所有的消息,“mail.!info”把info优先级的消息排除在外。 
mail.*;mail.!info /var/log/mail   
//下面的规则指定Facility为mail,Severity为err以上级别的日志写入/var/log/mail.err文件,而err以下级别的日志则被忽略: 
mail.err                        /var/log/mail.err 
//facility和level可以使用通配符,也可以指定多个,用逗号隔开: 
auth,authpriv.*                 /var/log/auth.log 
//Facility和level的组合可以有多个,用分号隔开,文件前面加一个减号表示日志不立即写入文件,而是在缓冲中积攒到一定的条件再写,这样 可以提高性能,但是当机可能会丢失数据: 
*.*;auth,authpriv.none          -/var/log/syslog 
//可以把syslog消息通过UDP发送到syslog服务器的514端口: 
*.err    @192.168.0.1 
//发生错误时,在控制台打屏: 
*.err    /dev/console

调用 syslogd 守护程序

  1. rsyslogd -r

日志服务器接收日志信息,rsyslogd 将会监听从 514 端口上进来的 UDP 包,缺省情况下 syslog 不接受来自远程系统的信息。

  1. rsyslogd -h

日志服务器传送日志信息,缺省时,syslogd 将忽略使其从一个远程系统传送日志信息到另一个系统的/etc/rsyslog.conf 输入项。

配置一个中央日志服务器

  1. 编辑配置文件
vi /etc/sysconfig/rsyslog

修改字段:

SYSLOGD_OPTIONS="-r-x-m240" 

含义:

“-r”:允许接受外来日志消息

“-x”:如果因为关于其他机器的DNS记录项不够齐全或其他原因不想让中央日志服务器解析其他机器的FQDN

“-m240”:把默认的时间戳标记消息(–MARK–)出现频率改成比较有实际意义的数值,每隔240分钟(每天6次)在日志文件里增加一行时间戳消息。

日志文件里的“–MARK–”消息可以让你知道中央日志服务器上的 syslog守护进程没有停工偷懒。

  1. iptables防火墙或TCPWrappers

请确保它们允许514号端口上的连接通过。syslog守护进程514号端口。

输入Linux命令:查看是否成功

netstat -antup |grep 514
  1. 重启syslog服务

修改只有重启后才会生效。执行以下命令:

systemctl restart rsyslog.service
  1. 配置客户端

让客户机把日志消息发往一个中央日志服务器:

方法一:

编辑客户机上的/etc/rsyslog.conf文件,在有关配置行的操作动作部分用一个“@”字符指向中央日志服务器。

方法二:

在DNS里定义一个名为“loghost”的机器,然后对客户机的syslog配置文件进行修改(这个办法的好处是:当你把中央日志服务器换成另一台机器时,不用再修改每一个客户机上的syslog配置文件)

接下来,重新启动客户机上的syslog服务让修改生效。让客户机在往中央日志服务器发送日志消息的同时继续在本地进行日志工作仍有必要,起码在调试客户机的时候不必到中央日志服务器查日志,在中央日志服务器出问题的时候还可以帮助调试。

方法三:

调用与系统日志相关的函数:

openlog, syslog, closelog 一套系统日志写入接口。

syslog编程

三个函数的原型和说明:

void   openlog(   char   *ident,   int   option,   int     facility)void   syslog(   int   priority,   char   *format,   ...)void   closelog(   void   )

priority是facility及level的组合,其后参数的用法类似printf。
option:用于openlog()的option参数可以是以下几个的组合:

LOG_CONS : 如果送到system logger时发生问题,直接写入系统console。
LOG_NDELAY : 立即开启连接(通常,连接是在第一次写入讯息时才打开的)。
LOG_PERROR : 将讯息也同时送到stderr
LOG_PID : 将PID含入所有讯息中
facility:该参数用来指定何种程式在记录讯息,这可让设定档来设定何种讯息如何处理。
LOG_AUTH : 安全/授权讯息(别用这个,请改用LOG_AUTHPRIV)
LOG_AUTHPRIV : 安全/授权讯息
LOG_CRON : 时间守护神专用(cron及at)
LOG_DAEMON : 其它系统守护神
LOG_KERN : 核心讯息
LOG_LOCAL0到LOG_LOCAL7 : 保留
LOG_LPR : line printer次系统
LOG_MAIL : mail次系统
LOG_NEWS : USENET news次系统
LOG_SYSLOG : syslogd内部所产生的讯息
LOG_USER(default) : 一般使用者等级讯息
LOG_UUCP : UUCP次系统

level:决定讯息的重要性. 以下的等级重要性逐次递减:

LOG_EMERG : 系统无法使用
LOG_ALERT : 必须要立即采取反应行动
LOG_CRIT : 重要状况发生
LOG_ERR : 错误状况发生
LOG_WARNING : 警告状况发生
LOG_NOTICE : 一般状况,但也是重要状况
LOG_INFO : 资讯讯息
LOG_DEBUG : 除错讯息

syslog的使用实例:
在/etc/syslog.conf下加入一行localN.* pathname
例 local5.* /root/Desktop/test.log
重新启动

systemctl restart rsyslog.service

使用syslog

#include
#include
#include 
#define SYSNAME "wohawoha"
void Info(void)
{
 openlog("info",LOG_PID,LOG_LOCAL5);/*注意这里的数字5与第一条里面提到的local5.*里的5必须相同,并且这个数字的范围为0--7*/
 syslog(LOG_INFO, "hello %s","woring");
}

void Woring(void)
{
 openlog("woring",LOG_PID,LOG_LOCAL5);
 syslog(LOG_WARNING, "hello %s","test");
}

int main()
{
 Info();
 Woring();
 closelog();
 return 0;
}

进入目录查看内容
例如:进入/root/Desktop/test.log这个文件查看里面的内容

Dec 13 12:31:21 localhost info[11750]: hello woring
Dec 13 12:31:21 localhost woring[11750]: hello test

你可能感兴趣的:(linux,服务器)