linux系统日志记录syslog

一、介绍
syslog是linux系统的一套日志框架,syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统

二、函数接口
头文件
#include “syslog.h”

打开日志
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

severity level:

Priority Level               Description
LOG_EMERG                    An emergency situation
LOG_ALERT                    High-priority problem, such as database corruption
LOG_CRIT                     Critical error, such as hardware failure
LOG_ERR                      Errors
LOG_WARNING                  Warning
LOG_NOTICE                   Special conditions requiring attention
LOG_INFO                     Informational messages
LOG_DEBUG                    Debug messages 

facility value(转自syslog.h头文件):

#define LOG_KERN        (0<<3)  
#define LOG_USER        (1<<3)  
#define LOG_MAIL        (2<<3)  
#define LOG_DAEMON      (3<<3)  
#define LOG_AUTH        (4<<3)  
#define LOG_SYSLOG      (5<<3)  
#define LOG_LPR         (6<<3)  
#define LOG_NEWS        (7<<3)  
#define LOG_UUCP        (8<<3)  
#define LOG_CRON        (9<<3)  
#define LOG_AUTHPRIV    (10<<3)
#define LOG_FTP         (11<<3)

命令行接口
logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。

logger 语法
logger [options] [messages]

options (选项)
-d, –udp 使用数据报(UDP)而不是使用默认的流连接(TCP)
-i, –id 逐行记录每一次logger的进程ID
-f, –file file_name记录特定的文件
-h, –help 显示帮助文本并退出
-n, –server 写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程
-P, –port port_num 使用指定的UDP端口。默认的端口号是514
-p, –priority priority_level指定输入消息的优先级,优先级可以是数字或者指定为 ” facility.level” 的格式。默认级别是 “user.notice”
-s, –stderr 输出标准错误到系统日志。
-t, –tag tag 指定标记记录
-u, –socket socket 写入指定的socket,而不是到内置系统日志例程。
-V, –version 现实版本信息并退出

messages:写入log文件的内容消息,可以与-f配合使用。

三、配置
1、配置文件位置::/etc/syslog.conf
2、配置成日志服务器的断开514
3、守护进程:syslog
4、日志文件保存位置:
/var/log/dmesg 内核引导信息日志
/var/log/message 标准系统错误信息日志
/var/log/maillog 邮件系统信息日志
/var/log/cron 计划任务日志
/var/log/secure 安全信息日志
可以修改/etc/syslog.conf换到其他路径
5、配置文件说明:
配置文件中每行表示一个项目,格式为:facility.level action
由两个部分组成:
第一部分:选择条件(可以有一个或者多个条件),分为两个字段。
选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)隔开。
第二部分:操作动作;
常见facility:

kern                内核信息;
user                用户进程信息;
mail                电子邮件相关信息;
daemon          	后台进程相关信息;
authpriv            包括特权信息如用户名在内的认证活动;
cron                计划任务信息;
syslog          	系统日志信息
lpr             	打印服务相关信息。
news            	新闻组服务器信息
uucp                uucp 生成的信息
local0----local7    本地用户信息

重要级:

重要级是选择条件的第二个字段,它代表消息的紧急程度。
按严重程度由低到高排序:

debug       不包含函数条件或问题的其他信息
info        提供信息的消息
none        没有重要级,通常用于排错
notice      具有重要性的普通条件
warning     预警信息
err         阻止工具或某些子系统部分功能实现的错误条件
crit        阻止某些工具或子系统功能实现的错误条件
alert       需要立即被修改的条件
emerg       该系统不可用
不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、 “err”、“crit”、“alert”和“emerg”都包括在内。

日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。

syslog 主要支持以下活动:

file               指定文件的绝对路径
terminal 或 prin   完全的串行或并行设备标志符
@host(@IP地址)    远程的日志服务器

四、日志回滚
logrotate 用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”;
根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过一个叫做crond的守护进程来执行,logrotate 还可以用于压缩日志文件,以及发送日志到指定的E-mail
logrotate 的配置文件是 /etc/logrotate.conf,主要参数如下表:

参数 功能

compress                通过gzip 压缩转储以后的日志
nocompress              不需要压缩时,用这个参数
copytruncate            用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate          备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate                不建立新的日志文件
delaycompress           和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress         覆盖 delaycompress 选项,转储同时压缩。
errors address          专储时的错误信息发送到指定的Email 地址
ifempty                 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty              如果是空文件的话,不转储
mail address            把转储的日志文件发送到指定的E-mail 地址
nomail                  转储时不发送日志文件
olddir directory        转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir                转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript     在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript    在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily                   指定转储周期为每天
weekly                  指定转储周期为每周
monthly                 指定转储周期为每月
rotate count            指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list      不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig .rpmsave

size size               当日志文件到达指定的大小时才转储,可以指定bytes(缺省)以及KB(sizek)或者MB (sizem).

系统对 logrotate 的执行和操作:
在/etc/cron.daily/路径下,有一个logrotate的shell脚本,所以cron程序会每天调用一次logrotate程序,然后logrotate程序回去检查日志文件是否符合回滚条件,并执行相应动作。
执行操作:/usr/sbin/logrotate /etc/cron.daily/logrotate.conf;

在/etc/logrotate.conf文件中,有如下选项:

 #RPM packages drop log rotation information into this directory
include /etc/logrotate.d

#这个选项说明在执行logrotate程序时,同时执行/etc/logrotated目录下的所有脚本。

执行动作示例:每月清除/var/log/wtmp目录中的相关内容:

/var/log/wtmp {
    
    
monthly
create 0664 root root
rotate 1
}

五、操作示例
1、c程序示例

在这里插入代码片

2、命令行操作示例

向syslog文件/var/log/messages中记录日志信息
logger hello guoguo
查看
tail -n 1 messages
记录特定的标记(tag)
logger -t TAG hello guoguo
查看
tail -n 1 messages

猜你喜欢

转载自blog.csdn.net/u010835747/article/details/121902306