Linux设置rsyslog日志
一、什么是syslog
1、syslog
完善的日志分析体系应该能够通过多种协议(包罗syslog等)进行日志收罗并对日志分析,因这天志分析体系首先需要实现对多种日志协议的剖析。其次,需要对网络到的海量日志信息进行分析,再利用数据发掘技术,发现隐藏在日志内里的安全问题。
Syslog在Unix/Linux体系中应用非常广泛,它是一种标准协议,负责记载体系事件的一个后台程序,记载内容包罗焦点、体系程序的运行情况及所发生的事件。Syslog协议使用UDP作为传输协议,通过514端口通讯,Syslog使用syslogd后台进程,syslogd启动时读取设置文件/etc/syslog.conf,它将网络设备的日志发送到安装了syslog软件体系的日志服务器,Syslog日志服务器自动接收日志数据并写到指定的日志文件中。
2、rsyslog
rsyslog可以简单的明白为syslog的超集,在老版本的Linux体系中,Red Hat Enterprise Linux 3/4/5默认是使用的syslog作为体系的日志工具,从RHEL 6 开始体系默认使用了rsyslog。
其特性包罗:
(1)支持输出日志到各种数据库,如 MySQL,PostgreSQL,MongoDB,ElasticSearch,等等;
(2)通过 RELP + TCP 实现数据的可靠传输(基于此团结丰富的过滤条件可以建立一种 可靠的数据传输通道供其他应用来使用);
(3)精细的输出格式控制以及对消息的强大 过滤本领;
(4)高精度时间戳;队列操作(内存,磁盘以及混合模式等); 支持数据的加密和压缩传输等。
二、rsyslog语法规则
1、rsyslog的重要模块
(1)modules,模块,设置加载的模块,如:ModLoad imudp.so 设置加载UDP传输模块
(2)global directives,全局设置,设置rsyslog守护进程的全局属性,比如主信息队列大小(MainMessageQueueSize)
(3)rules,规则(选择器+动作),每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志品级,action部分指定对应的操作
(4)模板(templates)
(5)输出(outputs)
2、常用的modules
(1)imudp,传统方式的UDP传输,有消耗
(2)imtcp,基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
(3)imrelp,RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用
3、规则的选择器(selectors)
(1)日志办法有:
- auth(security), authpriv: 授权和安全相关的消息
- kern: 来自Linux内核的消息
- mail: 由mail子系统产生的消息
- cron: cron守护进程相关的信息
- daemon: 守护进程产生的信息
- news: 网络消息子系统
- lpr: 打印相关的日志信息
- user: 用户进程相关的信息
- local0 to local7: 保留,本地使用
复制代码 (2)日志级别有(升序):
- 0 debug:包含详细的开发情报的信息,通常只在调试一个程序时使用。
- 1 info:情报信息,正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
- 2 notice: 不是错误情况,也不需要立即处理。
- 3 warning: 警告信息,不是错误,比如系统磁盘使用了85%等。
- 4 err:错误,不是非常紧急,在一定时间内修复即可。
- 5 crit:重要情况,如硬盘错误,备用连接丢失。
- 6 alert:应该被立即改正的问题,如系统数据库被破坏,ISP连接丢失。
- 7 emerg:紧急情况,需要立即通知技术人员。
复制代码 在 默认的 rsyslod.conf 设置文件中,默认使用的品级是全部 也就是上一张图片中的全部使用通配符 * 取代的品级,但还是有 *.emerg 以及 mail.none 大概 authpriv.none 等等
(3)日志办法的设置
- `.` 代表比后面还要高的消息等级都会记录下来
- `. =` 代表只有后面的这个消息等级会被记录下来
- `. !` 代表除了后面的这个消息等级,其他的都会被记录下来
- 举例:
- mail.info /var/log/maillog: 比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
- mail.=info /var/log/maillog: 明确指定日志级别为info,保存至/var/log/maillog
- mail.!info /var/log/maillog: 除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
- *.info /var/log/maillog: 所有facility的info级别,保存至/var/log/maillog
- mail.* /var/log/maillog: mail的所有日志级别信息,都保存至/var/log/maillog
- mail.notice;news.info /var/log/maillog: mail的notice以上级别的日志级别和news的info以上级别保存至/var/log/maillog
- mail,news.crit -/var/log/maillog: mail和news的crit以上的日志级别保存/var/log/maillog中;“-”代表异步模式
复制代码 4、动作(action)
action是规则形貌的一部分,位于选择器的背面,规则用于处置惩罚消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。
- # 写本地日志文件
- local0.* /var/log/lyh.log
- # modules, 要将日志写到mysql中需要加载ommysql模块
- $ModLoad ommysql
- *.* :ommysql:127.0.0.1,Syslog,syslogwriter,topsecret
复制代码 5、模板(templates)
模板允许你指定日志信息的格式,也可用于天生动态文件名,或在规则中使用。
属性释义\msg日志的信息内容,message。rawmsg不转义的日志内容。转义是默认开启的(EscapecontrolCharactersOnReceive),以是它有大概与socket中接收到的内容不同。rawmsg-after-pri几乎与rawmsg相同,但是删除了syslog PRI。hostname打印该日志的主机名。sourcehostname属性的别名。fromhost接收的信息来自于哪个节点。这里是DNS剖析的名字。fromhost-ip接收的信息来自于哪个节点,这里是IP,本地的是127.0.0.1。syslogtag信息标签。大致形如 programed[14321] 。programnametag的一部分,就是上面的programed谁人位置。pri消息的PRI部分-未解码(单值)pri-text文本形式的消息的PRI部分,并在括号中添加数值PRI(比方“local0.err<133>”)iutInfoUnitType 一款监督器软件,在与监督器后端通讯的时候使用syslogfacility设备信息,数字形式表示syslogfacility-text设备信息,文本形式表示syslogseverity日志严重性品级,数字形式表示syslogseverity-text日志严重性品级,文本形式表示syslogpriority同 syslogseveritysyslogpriority-text同 syslogseverity-texttimegenerated高精度时间戳timereported日志中的时间戳。精度取决于日志中提供的内容(在大多数情况下,为秒级)timestamp同 timereportedprotocol-versionIETF draft draft-ietf-syslog-protocol 中的 PROTOCOL-VERSION 字段的内容structured-dataIETF draft draft-ietf-syslog-protocol 中的 STRUCTURED-DATA 字段的内容app-nameIETF draft draft-ietf-syslog-protocol 中的 APP-NAME 字段的内容procidIETF draft draft-ietf-syslog-protocol 中的 PROCID 字段的内容msgidIETF draft draft-ietf-syslog-protocol 中的 MSGID 字段的内容inputname天生日志的输入模块的名称(如“imuxsock”、“imudp”)jsonmesg整个日志对象作为json表示。大概出现数据重复,譬如syslogtag包罗着programname,但两者都会分别表示。以是这个属性有一些额外开销,建议只有在现实需要的时候再用。 与时间相关的体系属性(以 2020-07-08 16:57:36 为例)
属性释义$now当前日期时间戳,格式为YYYY-MM-DD (2020-07-08)$year当前年份, 四位数 (2020)$month当前月份, 两位数 (07)$day当前月份的日期,两位数 (08)$wday当前天数周几 :0=Sunday,…6=Saturday$hour当前小时(24小时机制),两位数(16)$hhour半小时机值,就是0-29分钟表现0,30-59分钟表现1。$qhour一刻钟机值,通过0-3表现,每15分钟一截。$minute当前分钟数,两位数(57)- $template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]
- $template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
- $template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"
- *.info ?DailyPerHostLogs
- *.* ?DynamicFile
复制代码 6、输出(outputs)
输出频道为用户大概想要的输出类型提供了掩护,在规则中使用前要先定义.其定义如下所示,
NAME:指定输出频道的名称;FILE_NAME:指定输出文件;MAX_SIZE指定日志文件的大小,单元是bytes; ACTION:指定日志文件到达MAX_SIZE时的操作。
$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION
- $outchannel NAME, FILE_NAME, MAX_SIZE, ACTION
复制代码 三、rsyslog传输实行
1、实行预备
(1)预备一台客户端,将auth相关日志发送至rsyslog服务器,做好rsyslog的客户端设置。192.168.230.147
(2)预备一台服务器,用于接收rsyslog并保存至指定目录,做好rsyslog的服务器端设置并重启rsyslog服务。192.168.230.188
2、rsyslog的设置文件
此处以192.168.230.188作为服务器端,查看以下设置文件:/etc/rsyslog.conf,另外,在/etc/rsyslog.d目录中另有单独的日志设置。
- ### MODULES ####
- $ModLoad imuxsock #提供本地系统日志支持(如通过logger命令)
- $ModLoad imjournal # 提供对systemd journal的访问
- #$ModLoad imklog # 提供内核日志支持(相当于systemd的systemd-journald.service)
- #$ModLoad immark # 提供-MARK-消息功能
- #### GLOBAL DIRECTIVES ####
- # Use default timestamp format 使用默认日志的时间戳格式
- $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
- # Include all config files in /etc/rsyslog.d/ # 包含/etc/rsyslog.d/目录下的配置文件
- $Includeconfig /etc/rsyslog.d/*.conf
- ### RULES ####
- # Log all kernel messages to the console. # 将所有的内核消息记录到控制台
- # Logging much else clutters up the screen.
- #kern.* /dev/console
- # Log anything (except mail) of level info or higher.
- # 将info或更高级别的消息送到/var/log/messages,除了mail/news/authpriv/cron之外
- # Dont log private authentication messages!
- # 其中*是通配符,代表任何设备:none表示不对任何级别的消息进行记录
- *.info;mail.none;authpriv.none;cron.none /var/log/messages
- # The authpriv file has restricted access.
- # 将authpriv设备的任何级别的信息记录到/var/log/secure中
- authpriv.* /var/log/secure
- # Log all the mail messages in one place.
- # 将mail设备中的任何级别信息记录到/var/log/maillog文件中
- mail.* -/var/log/maillog
- # Log cron stuff
- # 将cron设备的任何级别的信息记录到/var/log/cron文件
- cron.* /var/log/cron
- # Everybody gets emergency messages
- # 将任何设备的emerg级别或者更高的消息发送给所有正在系统上的用户
- *.*, emerg :omusrmsg: *
- # Save news errors of level crit and higher in a special file.
- # 将ucp和news设备的crit级别或者更高级别消息记录到/var/log/spooler文件中
- ucp, news.crit /var/log/spooler
- # Save boot messages also to boot.log
- # 将和本地系统启动相关的信息记录到/var/log/boot.log文件中
- local7.* /var/log/boot.log
复制代码 3、修改服务器端设置
(1)加载 UDP/TCP 的syslog接收模块,并设置监听端口,让TCP和UDP同时受到支持,也可以只开放UDP或TCP。
- # Provides UDP syslog reception
- $ModLoad imudp
- $UDPServerRun 514
- # Provides TCP syslog reception
- $ModLoad imtcp
- $InputTCPServerRun 514
复制代码
(2)增长日志记载规则
- #### Added By ymqyyds ####
- :fromhost-ip,isequal,"192.168.230.147" /var/log/host_192.168.230.147.log
- :fromhost-ip,isequal,"192.168.230.147" ~
- ##########################
复制代码 第一行右边的表示把该IP发送过来的日志存放到/var/log/host_192.168.230.147.log文件中,其中IP地点188是客户端IP。
第二行右边的~表示抛弃该IP发送过来的包。因为该文件内容是次序执行的,以是上面两行就是把该IP日志存放到host_192.168.230.147.log后就抛弃该数据,防止在多个文件中存放相同的内容。
至于这个第三行我不知道为什么,必须加上,不加上就无法生效,但不报错,就是用不了
(3)重启rsyslog
- systemctl restart rsyslog
复制代码 并执行命令netstat -ant确认514端口正常启动。
4、修改客户端设置
同样编辑/etc/rsyslog.conf,最根本的要求,添加一行内容,指定服务器端IP和端口,并重启rsyslog服务。
5、测试rsyslog是否接收获功
尝试长途登录147客户端的SSH,或发送邮件等操作,确认是否在188服务器端接收到了对应日志。
- tail -f /var/log/host_192.168.230.147.log
- ssh root@192.168.230.188
复制代码
6、优化日志设置
(1)日志内容格式优化,输出日志的来源IP,并自定义列,修改服务器端设置如下。
- $template MyLogFormat,"%timestamp% %fromhost-ip% %syslogtag% %msg%\n"
- $ActionFileDefaultTemplate MyLogFormat
复制代码 (2)将不同主机发送来的日志,保存到不同的文件或目录中,如:
- $template RemoteLogs,"/var/log/host_%fromhost-ip%.log"
- :fromhost-ip, !isequal, "127.0.0.1" ?RemoteLogs
复制代码 (3)综上
- #### Added By ymqyyds ####$template MyLogFormat,"%timestamp% %fromhost-ip% %syslogtag% %msg%\n"
- $ActionFileDefaultTemplate MyLogFormat
- $template RemoteLogs,"/var/log/host_%fromhost-ip%.log"
- :fromhost-ip, !isequal, "127.0.0.1" ?RemoteLogs
- ##########################
复制代码 看 192.168.230.188 服务端的情况
再在 192.168.230.147 客户端上看看啥情况
完全一致匹配,当然,服务器端还包罗了其他日志中的文件
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |