网站制作 苏州,网站做的好的tkd,辽宁建设工程信息网进不去,重庆制作网站培训前言#xff1a;
rsyslog 是一个 syslogd 的多线程增强版。syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。程序#xff0c;守护进程和内核提供了访问系统的日志信息。因此#xff0c;任何希望生成日志信息的程序都可以向 syslog 接口…前言
rsyslog 是一个 syslogd 的多线程增强版。syslog是Linux系统默认的日志守护进程。默认的syslog配置文件是/etc/syslog.conf文件。程序守护进程和内核提供了访问系统的日志信息。因此任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。 几乎所有的网络设备都可以通过syslog协议将日志信息以用户数据报协议(UDP)方式传送到远端服务器远端接收日志服务器必须通过syslogd监听UDP 端口514并根据 syslog.conf配置文件中的配置处理本机接收访问系统的日志信息把指定的事件写入特定文件中供后台数据库管理和响应之用。意味着可以让任何事件都登录到一台或多台服务器上以备后台数据库用off-line(离线) 方法分析远端设备的事件。 通常syslog 接受来自系统的各种功能的信息每个信息都包括重要级。/etc/syslog.conf 文件通知 syslogd 如何根据设备和信息重要级别来报告信息。 需求背景 以及在系统日志落地前支持hook处理。 安装
yum install rsyslog -y一、什么是syslog协议
1、介绍略
2、syslog标准协议如下图 这里的facility为模块serverity为等级由这两个信息共同计算出一个PRI头部。HEADER部分包含了时间和主机名。在HEADER和MSG之间有一个空格MSG是需要记录的日志部分日志消息体。 这里也就是说理论上使用这种格式构造的字符串发送接收方就能解析出来。实际上根据实验我使用了UDP发送接收方syslog日志服务器能正确解析。 这里需要注意的是如果使用了程序的库比如python的syslog库同样c也有相似的库那么就不再需要关注PRI和HEADER部分只要将相关的参数facility,severity,time,ip传入函数调用发送就可以不必自己构造字符串。对服务端来说接收到的是整个消息但通常来讲比如使用linux默认的rsyslog作为接收服务端的话是不能看到除MSG之外的部分。所看到的消息跟接收端配置有关这个在下面有具体的讲。
3、以下是各级别及对应的数字代码
Facility:有0-23种设备可选在python的syslog库中有一部分缺失
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 16-23 local0 - local7
Severity:日志等级
0 Emergency 1 Alert 2 Critical 3 Error 4 Warning 5 Notice 6 Informational 7 Debug
这里结合等级再详细讲一下syslog协议
Priority优先级 facility * 8 severity值。比如说一个核心信息facility0和一个Emergency的severity将会产生优先级为0。同样 一个“local use 4”信息facility20和一个Notice的severityseverity5将会产生165的优先级。
标题HEADER部分由称为TIMESTAMP和HOSTNAME的两个域组成PRI结尾的“”会马上跟着一个 TIMESTAMP任何一个TIMESTAMP或者HOSTNAME域后面都必须跟着一个空格字符。HOSTNAME包含主机的名称若无主机名或无法 识别则显示IP地址。如果一个主机有多个IP地址它通常会使用它传送信息的那个IP地址。TIMESTAMP是本机时间采用的格式是“Mmm dd hh:mm:ss”表示月日时分秒。HOSTNAME域仅仅能够包括主机名称Ipv4地址或者是信息产生者的Ipv6地址。
MSG部分是Syslog数据包剩下的部分。这通常包含了产生信息进程的额外信息以及信息的文本部分。MSG部分有两个域分别为TAG域和 CONTENT域TAG域的值是产生信息的程序或者进程的名称CONTENT包含了这个信息的详细内容。传统上来说这个域的格式较为自由并且给出 一些时间的具体信息。TAG是一个不许超过32个字符的字母数字字符串任何一个非字母数字字符都将会终止TAG域并且被假设是CONTENT域的开 始。在大多数情况下表示TAG结束的CONTENT域的第一个字符用左大括号( [ ],分号( : )或者是空格来表示。
4、Syslog库 以python的库为例 openlog(ident[, logopt[, facility]]) 首先需要使用openlog指定模块及相应的信息。ident为头部需要显示的字符串这个信息不包含在MSG中可以通过配置日志服务器模板决定是否显示。logopt是一些参数可选择有LOG_PID, LOG_CONS, LOG_NDELAY, LOG_NOWAIT and LOG_PERROR对应的分别是包括每个消息PID直接写入系统控制台立即打开连接不等待子进程因为其有可能在记录消息的时候就被创建了GNU C库不创建子进程所以该选项在Linux上没有影响同时输出到stderr。facility则是模块参数需要填入对应的值这里syslog库中有以下参数使用 1 2 LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_LPR LOG_NEWS, LOG_UUCP, LOG_CRON and LOG_LOCAL0 to LOG_LOCAL7 通常来说openlog需要在模块最开始指定即限定了这个模块内都是一个facility的日志。 syslog([sevirity], msg): 这个是具体打印日志的函数第一个参数指定消息的级别第二个参数为日志内容。 sevirity对应的参数为 1 LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, brLOG_NOTICE, LOG_INFO, LOG_DEBUG. closelog() 这个是关闭的功能不过多解释了。
5、说明部分 python的syslog库打印日志是依赖了rsyslog服务具体的转发规则记录文件等在rsyslog.conf中配置
二、了解rsyslog服务
1、rsyslog介绍略
2、rsyslog配置文件 配置文件/etc/rsyslog.conf大概分为三个部分 #MODULES 这个部分是针对接收配置的主要是指定接收日志的协议和端口。若要配置日志服务器则需要将相应的配置项去掉注释。 #GLOBAL DIRECTIVES 这个部分主要用来配置模板模板的作用是指定你希望在日志文件中保存的日志格式。 默认配置为 1 2 # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat 这里列举一个模板将所有信息保存 1 2 3 4 5 6 7 8 9 10 11 12 # 这里第一行为了方便显示参数写成了一列是模板即日志服务器记录到日志文件的格式 # 第二行是指定需要使用的模板myFormat这个名字可以自己定义 $template myFormat,%TIMESTAMP% host%HOSTNAME%, relayHost%FROMHOST%, tag%syslogtag%, programName%programname%, procid%PROCID%, facility%syslogfacility-text%, sev%syslogseverity-text%, appName%APP-NAME%, msg%msg%\n $ActionFileDefaultTemplate myFormat 模板额外说明 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #在rsyslog7 和更高版本使用以下格式 template(namescalaLogFormat typelist) { property(nametimestamp dateFormatrfc3339) constant(value host) property(namehostname) constant(value, relayHost) property(namefromhost) constant(value, tag) property(namesyslogtag) constant(value, programName) property(nameprogramname) constant(value, procid) property(nameprocid) constant(value, facility) property(namesyslogfacility-text) constant(value, sev) property(namesyslogseverity-text) constant(value, appName) property(nameapp-name) constant(value, msg) property(namemsg ) constant(value\n) } ### begin forwarding rule 这个模块主要讲一下转发 #*.* remote-host:514 根据这个实例可以看出分为4个部分[模块.等级] [转发协议][日志服务器地址]:[日志服务器端口]其中转发协议的参数为TCP协议对应的接收端也需要配置接受TCP协议。为UDP协议。 注使用TCP协议若地址错误或不能连同的情况转发的协议会写入缓存但是不用担心会卡死服务器当到达一定限度后会自动转存到硬盘这个不是我们应该关心的部分使用就好了。
说明 针对rsyslog.conf配置文件的所有操作都需要重启服务生效(service rsyslog restart) 在新版本的rsyslog中对日志发送有默认限速如果有集中大量推送日志的情况需要在配置文件中加上参数$SystemLogRateLimitInterval 0具体位置没有影响但通常写在GLOBAL DIRECTIVES模块 通常来说日志推送到服务器的协议使用UDP