linux syslog

1. syslog 定义

在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。

真实的例子:

May 17 13:55:56 192.88.8.121  May 17 05:55:37 2021 HANI %%10 
AUDIT_X/6/AUDIT_IPV4_LOG_X: -Slot=2.1; Protocol(1001)=TCP;SrcIPAddr(1003)=1.1.1.1;SrcPort(1004)=1111;
……

1.1 RFC3195

BSD syslog协议使用UDP协议在网络中传递;
然而UDP是一个不可靠的协议,并且syslog也没有要求接收方有所反馈。
为了解决这个问题,RFC又定义了一个新的规范来可靠的传递syslog消息,它使用TCP协议:

http://www.ietf.org/rfc/rfc3195.txt

到目前为止,RFC3195的应用还是很少见的。

2. syslog 组成

完整的syslog消息由3部分组成,分别是PRI、HEADER和MSG
完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。
由于syslog简单而灵活的特性,syslog不再仅限于 Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用syslog。

例子:

<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
“<30>”是PRI部分,
	PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity)
	
“Oct 9 22:33:20 hlfedora”是HEADER部分,
	HEADER部分包括两个字段,时间和主机名(或IP)。
	
“auditd[1787]: The audit daemon is exiting.”是MSG部分。
	MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的

3. syslog配置

守护进程:syslog
端口:514
配置文件:/etc/rsyslog.conf (centos7系统下)
常见日志文件:

/var/log/dmesg      内核引导信息日志
/var/log/maillog    邮件系统信息日志
/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息
/var/log/messages :记录Linux操作系统常见的系统和服务错误信息
/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况
/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址
/var/log/cron :记录crond计划任务服务执行情况

3.1 3CD 配置syslog 日志服务器

看图:
在这里插入图片描述

4. syslog api

Linux C中提供一套系统日记写入接口,包括三个函数:openlog,syslog和closelog。
调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。

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

	priority参数的格式(severity level|facility code)
	示例:LOG_ERR|LOG_USER

4.1. c api 代码示例:

#include <syslog.h>

int main() {
	setlogmask (LOG_UPTO (LOG_NOTICE));

	openlog ("Hani example log", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);

	syslog (LOG_NOTICE, "Program started by User %d", getuid ());
	syslog (LOG_NOTICE, "Hani is beautiful ok gaga");

	closelog ();
}

结果:

[root@localhost home]# tail /var/log/messages
……
Aug  5 22:50:01 localhost systemd: Started Session 713 of user root.
Aug  5 22:50:01 localhost systemd: Starting Session 713 of user root.
Aug  5 22:50:21 localhost journal: Hani example log[9806]: Program started by User 0
Aug  5 22:50:21 localhost journal: Hani example log[9806]: Hani is beautiful ok gaga
[root@localhost home]#

4.2 syslog 例子2:

#include <syslog.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
	FILE *f = NULL;
	f = fopen ("nowhere", "r");
	if(!f)
		syslog(LOG_ERR|LOG.USER,"oops - %m\n");
		
	exit(0);
}

结果:

[root@localhost linux-]# gcc syslog.c 
[root@localhost linux-]# ./a.out 
[root@localhost linux-]# tail /var/log/messages
……
Oct 14 04:20:01 localhost systemd: Starting Session 1290 of user root.
Oct 14 04:26:20 localhost a.out: oops - No such file or directory
[root@localhost linux-]#

试图打开一个不存在的文件。在文件打开失败后,调用syslog在系统日志中记 录这一事件

参考:
https://www.cnblogs.com/skyofbitbit/p/3674664.html
https://zhuanlan.zhihu.com/p/62793386

猜你喜欢

转载自blog.csdn.net/lqy971966/article/details/119449213