Linux系统上的rsyslog服务

项目中运用到了syslog的远程打印,初次接触,抽空了解如下。

Linux中用来实现日志功能的服务为rsyslog,在centOS5及更早版本中使用的是syslog,rsyslog是syslog的增强版本。rsyslog一般默认都会安装且设置为自动启动。服务控制命令为:

$ service rsyslog restart(或start、stop)

rsyslog的配置文件为/etc/rsyslog.conf,日志消息则保存在/var/log/中,如/var/log/messages记录系统的正常日志消息,/var/log/dmesg记录系统内核相关的日志消息,/var/log/messages/secure记录安全相关的消息。我们可以使用tail-f命令实时监控日志文件内容。

rsyslog通过facility(程序模块)概念来定义日志消息的来源,以方便对日志进行分类的。facility有以下几种:

1.kern:内核消息
2.user: 用户级消息
3.mail: 邮件系统消息
4.daemon: (后台)系统服务消息
5.auth: 认证系统消息
6.syslog: 日志系统自身消息
7.authpriv: 权限系统消息
8.cron: 定时任务消息
9.news: 新闻系统消息
10.uucp: uucp系统消息
11.ftp: ftp服务消息
12.local 1~7: 自定义日志设备

除了日志来源之外,对于同一来源产生的日志消息还进行了优先级别划分,优先级分为:

1.none: 什么都不记录
2.emer: 系统已不可用
3.alert: 必须立即进行处理
4.crit: 严重错误
5.error: 错误
6.warning: 警告
7.notice: 正常消息,但是较为重要
8.info: 正常信息
9.debug: debug信息
日志级别,从上到下,级别从低到高,记录的信息越来越多。

rsyslog配置文件位于/etc/rsyslog.conf,其配置规则为:

facility.priority	log_location(日志位置/执行的操作)

比如:

mail.*		-/var/log/maillog	#-表示写日志时不需要等到上次的数据已经写到磁盘了
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

如上,*表示任何facility,而info则表示小于等于info级别的日志,也就是debug和info日志。
如果需要将日志发送至一个同一的日志服务器,则可以配置为:

*.*		@172.16.200.58	#使用UDP协议发送,默认端口时514
*.*		@@172.16.200.57	#使用TCP协议发送,默认端口是514

忽略日志:

*.*			~

^号后跟可执行脚本或程序的绝对路径:

*.*			^/myhome/test.sh

举一个发送到另一个服务器的例子: 采用UDP协议,将所有系统日志送给远程日志服务器。
/etc/rsyslog.conf

Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
*.*     @172.16.200.72

重启rsyslog服务:

$ service rsyslog restart

此时在系统执行su命令且故意输入错误密码,在目标机172.16.200.72通过tcpdump可以捕获到对应的数据包:
在这里插入图片描述
多测试一步,将tcpdump捕获的数据保存在.cap文件,然后用Windows的wireshark打开:

$ tcpdump -i eth1 port 514 -nn -w syslog_udp.cap

用wireshark打开后可见相关数据信息:
在这里插入图片描述
在代码中使用rsyslog服务也十分简单,只需要openlog(),syslog()和closelog()。一个简单的实例代码:

#include <stdio.h>
#include <syslog.h>
int main(int argc, char* argv[])
{
	char buf[1024] = {'\0'};

	openlog("my_rsyslog_test", LOG_CONS | LOG_PID, LOG_USER);
	
	while (fgets(buf, sizeof(buf), stdin)) {
		syslog(LOG_INFO, "%s\n", buf);
		bzeor(buf, sizeof(buf));
	}

	closelog();
	return 0;
}

编译运行:
在这里插入图片描述
1、void openlog(char* ident, int option, int facility);
(1)ident: 标记字符串
(2)option: 下列值与运算的结果

LOG_CONS 如果发送系统记录器时出现错误,则直接写入系统控制台
LOG_NDELAY 立即打开连接(通常,在记录第一条消息时打开连接)
LOG_NOWAIT 要等待在记录主题时创建的子进程
LOG_ODELAY 连接的打开延迟到调用syslog()
LOG_PERROR 打印到stderr
LOG_PID 每条消息包含PID

(3)facility: 对应上述的日志来源类型

LOG_AUTH security/authorization messages
LOG_AUTHPRIV security/authorization messages (private)
LOG_CRON clock daemon (cron and at)
LOG_DAEMON system daemons without separate facility value
LOG_FTP ftp daemon
LOG_KERN kernel messages (these can’t be generated from user processes)
LOG_LOCAL0~LOG_LOCAL7 reserved for local use
LOG_LPR line printer subsystem
LOG_MAIL mail subsystem
LOG_NEWS USENET news subsystem
LOG_SYSLOG messages generated internally by syslogd(8)
LOG_USER generic user-level messages(default)
LOG_UUCP UUCP subsystem

2、void syslog(int priority, char* format, …)
(1)priority: 对应上述的日志优先级,取值有:

LOG_EMERG system is unusable
LOG_ALERT action must be taken immediately
LOG_CRIT critical conditions
LOG_ERR error conditions
LOG_WARNING warning conditions
LOG_NOTICE normal, but significant, condition
LOG_INFO informational message
LOG_DEBUG debug-level message

(2)format和…: 这个就不用说了

3、void closelog()
关闭rsyslog连接,没啥好说的。

由运行结果可得,上述代码对应在/etc/rsyslog.conf的匹配规则为:
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值