雏鹰部落

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 628|回复: 0

[学习/资料] 【SPOTO思博网络】网工小白必看基础知识!IP业务《syslog》

[复制链接]
发表于 2021-11-3 14:43:52 | 显示全部楼层 |阅读模式

【SPOTO思博网络】网工小白必看基础知识!IP业务《syslog》

Unix/Linux系统中的大部分日志都是通过一种叫做syslog的机制产生和维护的。

syslog是一种标准的协议,分为客户端和服务器端,客户端是产生日志消息的一方,而服务器端负责接收客户端发送来的日志消息,并做出保存到特定的日志文件中或者其他方式的处理。

在Linux中,常见的syslog服务器端程序是syslogd守护程序。这个程序可以从三个地方接收日志消息:

(1)Unix域套接字 /dev/log

(2)UDP端口514

(3)特殊的设备/dev/klog(读取内核发出的消息)

相应地,产生日志消息的程序就需要通过上述三种方式写入消息,对于大多数程序而言就是向/dev/log这个套接字发送日志消息。
syslog常见的应用场景是网络管理工具、安全管理系统、日志审计系统。

长期以来,没有一个标准来规范syslog的格式,导致syslog的格式是非常随意的。最坏的情况下,根本就没有任何格式,导致程序不能对syslog 消息进行解析,只能将它看作是一个字符串。

在2001年定义的RFC3164中,描述了BSD syslog协议,不过这个规范的很多内容都不是强制性的,常常是“建议”或者“约定”,也由于这个规范出的比较晚,很多设备并不遵守或不完全遵守这个规范。

syslog的格式

下面是一个syslog消息:

<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.

其中“<30>”是PRI部分,“Oct 9 22:33:20 hlfedora”是HEADER部分,“auditd[1787]: The audit daemon is exiting.”是MSG部分。

PRI部分

PRI部分由尖括号包含的一个数字构成,这个数字包含了程序模块(Facility)、严重性(Severity),这个数字是由Facility乘以 8,然后加上Severity得来。不知道他们为什么发明了这么一种不直观的表示方式。

也就是说这个数字如果换成2进制的话,低位的3个bit表示Severity,剩下的高位的部分右移3位,就是表示Facility的值。

十进制30 = 二进制0001 1110

0001 1… = Facility: DAEMON - system daemons (3)

… .110 = Severity: INFO - informational (6)

Facility的定义如下,可以看出来syslog的Facility是早期为Unix操作系统定义的,不过它预留了User(1),Local0~7 (16~23)给其他程序使用:



Severity的定义如下:
  



HEADER部分
HEADER部分包括两个字段,时间和主机名(或IP)。

时间紧跟在PRI后面,中间没有空格,格式必须是“Mmm dd hh:mm:ss”,不包括年份。

“日”的数字如果是1~9,前面会补一个空格(也就是月份后面有两个空格),而“小时”、“分”、“秒”则在前面补“0”。月份取值包括:



时间后边跟一个空格,然后是主机名或者IP地址,主机名不得包括域名部分。


因为有些系统需要将日志长期归档,而时间字段又不包括年份,所以一些不标准的syslog格式中包含了年份,例如:


这样会导致解析程序将“CST”当作主机名,而“1987”开始的部分作为MSG部分。解析程序面对这种问题,可能要做很多容错处理,或者定制能解析多种syslog格式,而不仅仅是只能解析标准格式。

HEADER部分后面跟一个空格,然后是MSG部分。

有些syslog中没有HEADER部分。这个时候MSG部分紧跟在PRI后面,中间没有空格。

MSG部分
MSG部分又分为两个部分,TAG和Content。其中TAG部分是可选的。

在前面的例子中(“<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.”),“auditd[1787]”是TAG部分,包含了进程名称和进程PID。PID可以没有,这个时候中括号也是没有的。

进程PID有时甚至不是一个数字,例如“root-1787”,解析程序要做好容错准备。

TAG后面用一个冒号隔开Content部分,这部分的内容是应用程序自定义的。
RFC3195
BSD syslog协议使用UDP协议在网络中传递,然而UDP是一个不可靠的协议,并且syslog也没有要求接收方有所反馈。为了解决这个问题,RFC又定义了一个新的规范来可靠的传递syslog消息,它使用TCP协议:

不过大多数情况下,使用UDP发送不需要确认的syslog消息,已经能够满足要求了,并且这样做非常简单。因此到目前为止,RFC3195的应用还是很少见的。

file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps4FC1.tmp.jpg
syslog函数

Linux C中提供一套系统日记写入接口,包括三个函数:openlog,syslog和closelog。

调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。

#include //头文件


file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps4FE2.tmp.jpg
priority参数的格式(severity level|facility code)

示例:

file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps5021.tmp.jpg

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


file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps5061.tmp.jpg
linux syslog配置


file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps511E.tmp.jpg
(1) 配置文件

syslog配置文件如下:


配置文件中每行表示一个项目,格式为:facility.level action

由两个部分组成:

第一部分:选择条件(可以有一个或者多个条件),分为两个字段。

第二部分:操作动作。

选择条件

选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)隔开。

常见facility

kern 内核信息;

user 用户进程信息;

mail 电子邮件相关信息;

daemon 后台进程相关信息;

authpriv 包括特权信息如用户名在内的认证活动;

cron 计划任务信息;

syslog 系统日志信息

lpr 打印服务相关信息。

news 新闻组服务器信息

uucp uucp 生成的信息

local0----local7 本地用户信息


(2)重要级

重要级是选择条件的第二个字段,它代表消息的紧急程度。

按严重程度由低到高排序:

debug 不包含函数条件或问题的其他信息

info 提供信息的消息

none 没有重要级,通常用于排错

notice 具有重要性的普通条件

warning 预警信息

err 阻止工具或某些子系统部分功能实现的错误条件

crit 阻止某些工具或子系统功能实现的错误条件

alert 需要立即被修改的条件

emerg 该系统不可用

不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。

如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。

比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、 “err”、“crit”、“alert”和“emerg”都包括在内。

操作动作

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

syslog 主要支持以下活动:

file 指定文件的绝对路径

terminal 或 prin 完全的串行或并行设备标志符

@host(@IP地址) 远程的日志服务器

(3)搭建Linux日志服务器

编辑/etc/sysconfig/syslog文件,让服务器能够接受客户端传来的数据:

在“SYSLOGD_OPTIONS”行上加“-r”选项以允许接受外来日志消息。


file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps519D.tmp.jpg

重新启动syslog守护进程。

[root@client ~]# service syslog restart

关闭内核日志记录器:[确定]

关闭系统日志记录器:[确定]

启动系统日志记录器:[确定]

启动内核日志记录器:[确定]

关闭iptables,也可以开启514端口。本例中我们关闭iptables。

配置各客户端

配置/etc/syslog.conf

修改客户机/etc/syslog.conf文件,在有关配置行的操作动作部分用一个“@”字符指向日志服务器

file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps51FD.tmp.jpg

另外如果配置了DNS域名的话可以使用域名。

重启客户端syslog使设置生效

检测成果:下图是我们在客户端重启iptables服务后在服务端看到的日志情况:

file:///C:/Users/86152/AppData/Local/Temp/ksohtml/wps520E.tmp.jpg



老杨(微信spotoa),一个从事网工行业8年的中年吃货,和你每天聊几句关于网工的那些事儿。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|熊猫同学技术论坛|小黑屋| 网络工程师论坛 ( 沪ICP备09076391 )

GMT+8, 2024-4-28 17:51 , Processed in 0.087236 second(s), 19 queries , Gzip On.

快速回复 返回顶部 返回列表