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 以外的所有功能

2. level 指定syslog优先级:

syslog 级别如下:(按严重程度由高到低的顺序列出了所有可能的优先级。) 
emerg 或 panic   该系统不可用(最紧急消息) 
alert            需要立即被修改的条件(紧急消息) 
crit             阻止某些工具或子系统功能实现的错误条件(重要消息) 
err              阻止工具或某些子系统部分功能实现的错误条件(出错消息) 
warning          预警信息(警告消息) 
notice           具有重要性的普通条件(普通但重要的消息) 
info             提供信息的消息(通知性消息) 
debug            不包含函数条件或问题的其他信息(调试级-信息量最多) 
none             没有重要级,通常用于排错(不记录任何日志消息) 
*                所有级别,除了none

3. 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,调试信息

4. 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讯息

5. 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 等.

6. 例子:

//其中*是通配符,代表任何设备;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 不接受来自远程系统的信息。

2. 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守护进程没有停工偷懒。

2. iptables防火墙或TCPWrappers

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

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

netstat -antup |grep 514

3. 重启syslog服务

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

systemctl restart rsyslog.service

4. 配置客户端

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

方法一:

编辑客户机上的/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<stdio.h>
#include<stdlib.h>
#include <syslog.h>
#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
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Linux rsyslog是一种高性能的日志管理工具,它可以收集、处理和转发各种类型的日志数据。它支持多种日志协议和格式,包括syslog、JSON、XML等。rsyslog还提供了强大的过滤、分析和转换功能,可以帮助管理员更好地管理和监控系统日志。同时,rsyslog还支持多种输出方式,包括文件、数据库、网络等,可以满足不同场景下的需求。 ### 回答2: Linux rsyslog是一种高性能的系统日志管理工具,可以用于收集、存储和分析各种系统事件和错误消息。 rsyslog的主要功能包括:日志的收集和传输、过滤和处理、存储和归档、以及实时监控和告警。 在日志的收集和传输方面,rsyslog支持多种协议,比如UDP、TCP、TLS和REL TCP等,可以从远程服务器、网络设备和应用程序等多个来源收集日志,并将其传输到指定的目的地。 rsyslog的过滤和处理功能很强大,可以根据配置文件中定义的规则,对收集到的日志进行过滤、分类和处理。这些规则可以根据日志的来源、内容和级别等进行设置,以实现针对性的日志管理。 存储和归档是rsyslog的重要功能之一,它可以将收集到的日志按照指定的方式和格式保存到本地文件或者远程存储服务器上。同时,rsyslog还支持归档和压缩等操作,帮助用户有效管理和存储大量的日志数据。 实时监控和告警是rsyslog的关键特性之一,通过实时监控日志的产生和变化,用户可以迅速发现系统中的异常情况,并及时采取措施。同时,rsyslog还支持通过邮件、短信或者其他方式发送告警通知,及时通知用户发生的重要事件和错误。 总之,Linux rsyslog是一款功能强大的系统日志管理工具,其灵活的配置和高性能的特性,使得它成为了广泛应用于各种Linux环境中的首选工具。 ### 回答3: Linux rsyslog是一种强大而灵活的系统日志管理工具。它是Linux操作系统中的标准日志处理程序,可用于收集、处理和存储系统日志。rsyslog支持各种日志协议,包括Syslog、TCP、UDP和TLS,并支持日志的过滤、转发和存储。 rsyslog的功能非常丰富,使管理员能够对日志进行详细的配置和控制。它可以实现日志的中央化管理,通过配置服务器和客户端,将分散在多台计算机上的日志集中到一个地方进行集中存储和分析。这对于大型网络环境下的集中日志管理非常有用。 rsyslog还支持灵活的日志过滤功能,可以根据不同的条件过滤和筛选日志。管理员可以根据需求设置过滤规则,将特定类型或级别的日志集中处理或存储,从而提高系统安全性和效率。 此外,rsyslog还支持插件和模块的扩展。它可以通过插件来支持各种日志格式和处理方式,例如JSON、数据库、邮件等。管理员可以根据自己的需求选择适合的插件来实现定制化的日志处理功能。 总之,rsyslog是一个功能强大且高度可配置的系统日志管理工具,通过它,管理员可以方便地收集、处理和存储系统日志。它的灵活性和可扩展性使其成为Linux系统中不可或缺的一部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值