最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Syslog配置及使用简介

来源:动视网 责编:小OO 时间:2025-09-24 07:19:54
文档

Syslog配置及使用简介

Syslog配置及使用简介目录Syslog配置及使用简介11.Syslog简介12.Syslog协议12.1.syslog体系结构12.2.syslog包格式23.Syslog配置33.1概览33.2选择符33.3动作44.C语言中的syslog44.1openlog44.2syslog44.3closelog54.4setlogmask.5例子65.参考文献61.Syslog简介Syslog常被称作系统日志,在80年代作为sendmail的一部分而发布,由于其可用性,现在已成为用来在in
推荐度:
导读Syslog配置及使用简介目录Syslog配置及使用简介11.Syslog简介12.Syslog协议12.1.syslog体系结构12.2.syslog包格式23.Syslog配置33.1概览33.2选择符33.3动作44.C语言中的syslog44.1openlog44.2syslog44.3closelog54.4setlogmask.5例子65.参考文献61.Syslog简介Syslog常被称作系统日志,在80年代作为sendmail的一部分而发布,由于其可用性,现在已成为用来在in
Syslog配置及使用简介

目录

Syslog配置及使用简介    1

1.    Syslog简介    1

2.    Syslog协议    1

2.1. syslog体系结构    1

2.2. syslog包格式    2

3.    Syslog配置    3

3.1 概览    3

3.2选择符    3

3.3 动作    4

4.    C语言中的syslog    4

4.1 openlog    4

4.2 syslog    4

4.3 closelog    5

4.4 setlogmask    6

4.5例子    6

5.    参考文献    6

1.Syslog简介

Syslog常被称作系统日志,在80年代作为sendmail的一部分而发布,由于其可用性,现在已成为用来在internet中传递日志信息的事实上的标准。这些传递日志的程序或数据库同时也被称作syslog。Syslog是主从式的协议,syslog发送端发送一些小的文字信息到syslog接收端,接收端根据配置文件把收到的信息进行存储或者处理,或者再次进行转发。

    Syslog通常被用作系统信息管理,由于其已在大多数系统上实现,所以它可以把不同类型主机上的信息集中整合到一起。但是它仍然有许多缺陷,表现在下面几个方面:Syslog的传输是通过UDP或者TCP传输,安全性并不可靠。一般可以通过ssl加密壳来完成加密;syslog的实时性不好,只能通过更改配置加以改进。所以syslog主要用在安全性要求不高,实时性不强的地方。

2.Syslog协议

syslog使用UDP协议作为它的传输层协议,其默认使用UDP端口514。

2.1. syslog体系结构

syslog模糊了发送方、接收方,设备、中继以及收集器的区别,一台设备可以同时是某种日志信息的中继、也可以是另外某种信息的收集器,同时可以作为发送者发送日志:

●发送方发送日志信息至某个主机,并不知道这台主机会如何处理这些日志。

●发送方可以通过配置,把同一条日志同时发送给多个接收者。

●中继可以发送所有或者部分信息给后序接收者,这种情况下它不完全是中继,也是一个收集信息者。

●中继可以产生自己的日志信息发送给后序接收者,这种情况下它也是一个产生信息的设备。

2.2. syslog包格式

Syslog包分为3个部分,PRI, HEADER,以及MSG,总长度不能超过1024个字节。

2.2.1 PRI

PRI是priority的缩写,它代表了facility以及severity,即代表消息来源以及消息的严重程度。它必须是1、2或者3个十进制字符,用‘<’,‘>’括起后组成的串,它是由facility以及severity构成,组成的方法是把facility的值乘以8,再加上severity的值。如facility取值local4(20), severiry为warning(4),那么pri的值为<1>。

Facility的取值如下表所示:

Numerical Code              Facility

           0             kernel messages

           1             user-level messages

           2             mail system

           3             system daemons

           4             security/authorization messages

5             messages generated internally by syslogd

           6             line printer subsystem

           7             network news subsystem

           8             UUCP subsystem

           9             clock daemon

          10             security/authorization messages 

          11             FTP daemon

          12             NTP subsystem

          13             log audit

          14             log alert

          15             clock daemon (note 2)

          16             local use 0  (local0)

          17             local use 1  (local1)

          18             local use 2  (local2)

          19             local use 3  (local3)

          20             local use 4  (local4)

          21             local use 5  (local5)

          22             local use 6  (local6)

          23             local use 7  (local7)

严重等级分为:

Numerical Code        Severity

           0       Emergency: system is unusable

           1       Alert: action must be taken immediately

           2       Critical: critical conditions

           3       Error: error conditions

           4       Warning: warning conditions

           5       Notice: normal but significant condition

           6       Informational: informational messages

           7       Debug: debug-level messages

2.2.2 HEADER部分

HEADER部分包含一个时间戳以及发送方的主机名或者ip地址,并且HEADER部分必须是一些可打印字符。

时间戳部分是格式为”Mmm dd hh:mm:ss”的本地时间,其中Mmm是3个字母的英文缩写,如果日期小于10,必须用空格代替缺少的一个数字。

主机名部分一半使用主机名,如果没有的话可以使用IPv4或者IPv6的地址。需要注意的是主机名中不能包含任何空格。

时间戳和主机名后面都各自跟一个空格。

2.2.3 MSG部分

消息体部分一般包含生成消息的进程信息(TAG field)以及消息正文(CONTENT field)。TAG部分主要是包含生成消息的进程信息,不能超过32个字符。消息体必须是一些可见字符,这部分就是消息的正文。TAG与CONTENT之间的间隔用非字母表字母隔开,一般用”[“,”:”或者空格隔开。

3.Syslog配置

3.1 概览

Syslog的全局配置文件一般存储在/etc/目录下,名为syslog.conf,由它指定syslogd程序对日志信息的处理。

配置文件由一系列的规则组成,一般每行一个规则,也可以使用反斜杠“\”来续行。

配置文件中每个规则都是由两部分组成,分别叫做选择符以及其对应的动作。选择符就是指上文介绍过的priority,包括facility以及severity,动作指匹配成功的话应执行的动作,如把日志写入管道,写入文件,或者再转发至另一台主机。

3.2选择符

选择符包括两部分,facility以及severity,两部分以一个点号”.”分割。这两个部分都大小写无关,并且可以使用上文中定义的数字来代替字符。

Facility部分可以使用下列关键字:auth, authpriv, cron, daemon, ftp, kern, lpr, mail, mark, news, security (same as auth), syslog, user, uucp and local0 到local7,或者使用其对应的数字。

Severity部分可以使用下列关键字:debug, info, notice, warning, warn (等同于warning), err,  error(同err),  crit, alert, emerg, panic (同emerg)。

最初的BSD syslogd程序中,程序会把等于或者高于指定severity等级的日志按照指定动作来执行,现在syslogd程序中还包括一些有用的扩展:

●“*”号,可以代表任何facility或者severity,根据在”.”之前或之后判断。

●“,”号,可以分割facility,这样可以把几个facility可以合并。但是severity不能这样合并。

●“;”号,可以指定多个选择符,后面跟一个动作。处理得顺序是按照从前向后的顺序匹配选择符,并且后面的选择符可以覆盖前面的。因此可以使用这种特性来排除一些特殊的等级。

●“=”号,可以加在severity前面,表示准备匹配。

●“!”号,表示忽略这种severity或者更高等级,也可以与”=”号一起用。

3.3 动作

动作表示收到匹配的日志信息以后的处理动作,主要有写入文件,命名管道,终端,写入远程,提醒当前某些用户。

1.写入普通文件。后面加入日志文件的绝对路径即可。也可以添加“-”号来表示不立即写入。

如: *.=crit;kern.none            /var/adm/critical

2.命名管道。通过加上”|”即可把日志写入命名管道。

如:mail,news.=info              | /tmp/message.fifo

3.终端。只要动作中指定的文件是一个tty文件即可。

如:mail.=info                   /dev/tty12

4.远端机器。添加”@”符号,加上远端主机名/ip地址即可。syslog需要-h参数启动才会转发远端而来的消息。

如:kern.crit                    @finlandia

5.用户。直接在动作之中写入用户列表的名字即可。以逗号分割各个用户。

如:*.alert                      root,joey

6.所有已登陆用户。在动作中直接“*”号,表示把信息直接显示到已登陆用户的终端上。 

如:*.=emerg                     *

4.C语言中的syslog

GNU C库中包含了写syslog的一些库函数,使用这些函数可以方便的对syslog进行写操作。Glibc中主要包含以下syslog相关函数:

    * openlog: 打开连接

    * syslog; vsyslog: 写syslog

    * closelog: 关闭连接

* setlogmask: 置标志,可以实现忽略某些消息

4.1 openlog

openlog函数在syslog.h中被声明,其原型如下:

void openlog (const char *ident, int option, int facility);

openlog不是必须被调用的,但是可以方便syslog的使用。

indent表示一串字符串,以后调用syslog写日志时这个字符串都会被自动添加到正文之前,一般用来表示当前程序的名字。如果indent为NULL, 或者openlog没有被调用过,那么默认的名字是当前进程名。

option是一个位串,有以下掩码构成:

LOG_PERROR:记录至syslog的同时写到标准错误输出。默认不写入标准错误输出。

LOG_CONS:如果写入Syslog失败时写入控制台,默认不写入控制台。

LOG_PID:是否把进程ID也加入到信息中去。

LOG_NDELAY:打开的话,openlog会打开连接,否则syslog调用时才连接。

LOG_ODELAY:无意义,为兼容旧版本。

facility是此连接的默认的facility,参见上文facility相关内容。默认是LOG_USER。

4.2 syslog

syslog就是记录日志的主函数,它通过写socket /dev/log(syslogd进程一直在监听此socket文件)实现写日志,其原型如下:

void syslog (int facility_priority, char *format, ...)

facility_priority参数就是facility和severity的集合,可以使用LOG_MAKEPRI宏来生成此参数:

    LOG_MAKEPRI(LOG_USER, LOG_WARNING)

也可以直接使用syslog.h中定义的宏把facility与severity连接起来即可。如:

    syslog(LOG_WARN|LOG_LOCAL1, “message”);

其中LOG_LOCAL1宏的定义为(17<<3)。

对应我们上文介绍的facility,有以下宏定义:

#define LOG_KERN (0<<3) /* kernel messages */

#define LOG_USER (1<<3) /* random user-level messages */

#define LOG_MAIL (2<<3) /* mail system */

#define LOG_DAEMON (3<<3) /* system daemons */

#define LOG_AUTH (4<<3) /* security/authorization messages */

#define LOG_SYSLOG (5<<3) /* messages generated internally by syslogd */

#define LOG_LPR (6<<3) /* line printer subsystem */

#define LOG_NEWS (7<<3) /* network news subsystem */

#define LOG_UUCP (8<<3) /* UUCP subsystem */

#define LOG_CRON (9<<3) /* clock daemon */

#define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */

#define LOG_FTP (11<<3) /* ftp daemon */

#define LOG_LOCAL0 (16<<3) /* reserved for local use */

#define LOG_LOCAL1 (17<<3) /* reserved for local use */

#define LOG_LOCAL2 (18<<3) /* reserved for local use */

#define LOG_LOCAL3 (19<<3) /* reserved for local use */

#define LOG_LOCAL4 (20<<3) /* reserved for local use */

#define LOG_LOCAL5 (21<<3) /* reserved for local use */

#define LOG_LOCAL6 (22<<3) /* reserved for local use */

#define LOG_LOCAL7 (23<<3) /* reserved for local use */

对应严重等级的宏有:

    LOG_EMERG

LOG_ALERT

LOG_CRIT

LOG_ERR

LOG_WARNING

LOG_NOTICE

LOG_INFO

LOG_DEBUG

后面的参数部分是一个可变长参数,使用方法和常用的printf相同。

4.3 closelog

    closelog函数会关闭当前连接,如果有连接打开的话。函数原型为:

void closelog (void);

4.4 setlogmask

    setlogmask函数可以使后面调用syslog时忽略某些等级,与syslog.conf中配置的不同,如果被setlogmask函数忽略掉的日志,永远不会被发送至syslog。它的原型为:

    int setlogmask (int mask);

其中mask是一个位串,其中每位表示一个等级,如果此位为1,那么syslog正常处理;如果为0,则忽略掉此信息。

通过宏LOG_MASK可以方便的表示可以忽略掉那些等级,如:

    LOG_MASK(LOG_EMERG) | LOG_MASK(LOG_ERROR)

表示忽略EMERG和ERROR。

或者使用~,如:

    ~(LOG_MASK(LOG_INFO))

表示忽略INFO以外的等级。

也可以使用宏LOG_UPTO,表示某等级或者此等级以上。

4.5例子

#include

     

     setlogmask (LOG_UPTO (LOG_NOTICE));     

     openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1);     

     syslog (LOG_NOTICE, "Program started by User %d", getuid ());

     syslog (LOG_INFO, "A tree falls in a forest");     

     closelog ();

5.参考文献

1. BSD syslog protocol, RFC 31, http://www.unix.com.ua/rfc/rfc31.html

2. GNU C lib: http://www.gnu.org/software/libtool/manual/libc/Submitting-Syslog-Messages.html

3. http://www.hackinglinuxexposed.com/articles/20030220.html

文档

Syslog配置及使用简介

Syslog配置及使用简介目录Syslog配置及使用简介11.Syslog简介12.Syslog协议12.1.syslog体系结构12.2.syslog包格式23.Syslog配置33.1概览33.2选择符33.3动作44.C语言中的syslog44.1openlog44.2syslog44.3closelog54.4setlogmask.5例子65.参考文献61.Syslog简介Syslog常被称作系统日志,在80年代作为sendmail的一部分而发布,由于其可用性,现在已成为用来在in
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top