`

Linux之rsyslog详解!

 
阅读更多

■日志出力格式

日志设备 连接符 日志级别 执行动作

 

日志设备(可以理解为日志类型facility):

    auth        –pam产生的日志
    authpriv    –ssh,ftp等登录信息的验证信息
    cron        –时间任务相关
    kern        –内核
    lpr         –打印
    mail        –邮件
    mark(syslog)–rsyslog服务内部的信息,时间标识
    news        –新闻组
    user        –用户程序产生的相关信息
    uucp        –unix to unix copy, unix主机之间相关的通讯
    local 1~7   –自定义的日志设备

 

日志级别(level):

    debug       –有调式信息的,日志信息最多
    info        –一般信息的日志,最常用
    notice      –最具有重要性的普通条件的信息
    warning     –警告级别
    err         –错误级别,阻止某个功能或者模块不能正常工作的信息
    crit        –严重级别,阻止整个系统或者整个软件不能正常工作的信息
    alert       –需要立刻修改的信息
    emerg       –内核崩溃等严重信息
    none        –什么都不记录

从上到下,级别从低到高,记录的信息越来越少

 

facility和level之间的连接符:

.xxx: 表示大于等于xxx级别的信息
.=xxx:表示等于xxx级别的信息
.!xxx:表示在xxx之外的等级的信息

 

执行动作:

1. 记录到普通文件或设备文件
*.*     /var/log/file.log   # 绝对路径
*.*     /dev/pts/0

2. 转发到远程
*.* @192.168.0.1            # 使用UDP协议转发到192.168.0.1的514(默认)端口
*.* @@192.168.0.1           # 使用TCP协议转发到192.168.0.1的514(默认)端口

3. 发送给用户(需要在线才能收到)
*.*   root
*.*   root,kadefor,up01     # 使用,号分隔多个用户
*.*   *                     # *号表示所有在线用户

4. 忽略,丢弃
local3.*   ~                # 忽略所有local3类型的所有级别的日志

5. 执行脚本
local3.*    ^/tmp/a.sh      # ^号后跟可执行脚本或程序的绝对路径
# 日志内容可以作为脚本的第一个参数.
# 可用来触发报警
.. note::
日志记录的顺序有先后关系!

 

标准的简单的rsyslog配置

*.info;mail.none;authpriv.none;cron.none      /var/log/messages
authpriv.*                                    /var/log/secure
mail.*                                        /var/log/maillog
cron.*                                        /var/log/cron
*.emerg                                       *
uucp,news.crit                                /var/log/spooler
local7.*                                      /var/log/boot.log

 

■关于Logger命令

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

 

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" 的格式。比如:"-p local3.info " local3 这个设备的消息级别为info。默认级别是 "user.notice"
    -s, --stderr
        输出标准错误到系统日志。
    -t, --tag tag
        指定标记记录
    -u, --socket socket
        写入指定的socket,而不是到内置系统日志例程。
    -V, --version
        现实版本信息并退出

**messages:**写入log文件的内容消息,可以与-f配合使用。
logger 以0退出表示成功,大于0表示失败。

 

学习验证

 

案例1:自定义的日志信息是不是按照预想,生成的日志被保存到了指定的文件。

1.修改/etc/rsyslog.conf
最后一行,追加local3.=info /var/log/test.log
2.systemctl restart rsyslog
3.logger -i -p local3.info "abc test abc"
4.结果在/var/log/test.log和/var/log/messages里都可以看到Sep 20 16:20:53 test root[13091]: abc test abc

5.再次修改/etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages
6.systemctl restart rsyslog
7.logger -i -t "mytest" -p local3.info "abc test abc"
8.最后只在/var/log/test.log里生成Sep 20 17:47:18 test mytest[13241]: abc test abc

 

案例2:过滤特定的日志到文件, 忽略(丢弃)包含某个字符串的日志

# 过滤日志, 由:号开头

:msg, contains, “error” /var/log/error.log
:msg, contains, “error” ~         # 忽略包含error的日志
:msg, contains, “user nagios”   ~
local3.*    ~

过滤的定义需要特别注意,如下:

/*****************1*********************/

:msg,contains,"filtertest" /var/log/filtertest.log

 *.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages

/*****************2*********************/

 *.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages

:msg,contains,"filtertest" /var/log/filtertest.log

/*****************3*********************/

 *.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages

:msg,contains,"filtertest" /var/log/filtertest.log

& ~

当以这样的顺序定义时,包含filtertest的日志既会在/var/log/filtertest.log里生成,也会在/var/log/messages里生成,那么如何只会在/var/log/filtertest.log里生成呢?

必须以下面的顺序来定义,然后& ~必须要加,它的意思就是上面的规则使用完后,就丢弃,下面的即使符合要求,也不再适用。

:msg,contains,"filtertest" /var/log/filtertest.log

& ~

 *.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages

 

案例3:使用模板来定义日志格式

定义默认的日志格式:

  1. $template myFormat,”%rawmsg%\n”  

  2. $ActionFileDefaultTemplate myFormat  

  3. #如果不要$ActionFileDefaultTemplate myFormat这一行, 就需要像这样来使用模板:

  4. #在日志文件后添加模板名, 并用;号分隔

  5. $template myFormat,”%rawmsg%\n”  

  6. # The authpriv file has restricted access.

  7. authpriv.*      /var/log/secure;myFormat  

  8. # Log all the mail messages in one place.

  9. mail.*          /var/log/maillog;myFormat  

  10. # Log cron stuff

  11. cron.*          /var/log/cron;myFormat  

  12. # Everybody gets emergency messages

  13. *.emerg                                       *  

  14. # Save news errors of level crit and higher in a special file.

  15. uucp,news.crit  /var/log/spooler;myFormat  

  16. # Save boot messages also to boot.log

  17. local7.*        /var/log/boot.log;myFormat  

rsyslog.conf中默认的定义为$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat,模板 RSYSLOG_TraditionalFileFormat rsyslog默认保留模板,

所以不用定义,直接使用,但是如果希望使用自己定义的模板,那么就如第一行所示$template myFormat,”%rawmsg%\n” 定义模板,并且默认状况下希望所有的规则

默认使用自定义的规则,那么就是第二行的定义$ActionFileDefaultTemplate myFormat,如果只是希望某一个规则使用自定义的模板,那就不需要第二行,

而是如第7行所示authpriv.*      /var/log/secure;myFormat ,定义规则的时候指定所要使用的模板。

 

 

案例4:日志的远程发送与接收1

客户端配置

末尾添加下面的配置,这里的意思就是根据所需,将日志转送给服务器

*.info;mail.none;authpriv.none;cron.none      /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                    /var/log/secure
# Log all the mail messages in one place.
mail.*                                        /var/log/maillog
# Log cron stuff
cron.*                                        /var/log/cron
# Everybody gets emergency messages
*.emerg                                       *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                /var/log/spooler
# Save boot messages also to boot.log
local7.*                                      /var/log/boot.log

local3.* @192.168.100.96         # UDP使用了默认的514端口,服务器IP:192.168.100.96

或者

local3.* @@192.168.100.96      # TCP使用了默认的514端口,服务器IP:192.168.100.96

 

服务器端配置

$modload imtcp
$InputTCPServerRun 514
# for UDP use:
$modload imudp
$UDPServerRun 514
# Log anything (except mail) of level info or higher.
# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                    /var/log/secure
# Log all the mail messages in one place.
mail.*                                        /var/log/maillog
# Log cron stuff
cron.*                                        /var/log/cron
# Everybody gets emergency messages
*.emerg                                       *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                /var/log/spooler
# Save boot messages also to boot.log
local7.*                                      /var/log/boot.log
local3.*                                    /var/log/local3.log     # 测试用

 

执行命令:logger -i -t "mytest" -p local3.info "11111111111"

这样配置的话,会产生很多很多个这样的信息2017-09-21T19:49:50+09:00 test mytest[15734]: 11111111111

客户端:/var/log/messages

服务器端:/var/log/messages,/var/log/local3.log

 

所以如果仅仅希望日志生成在服务器端的/var/log/local3.log文件里需要修改配置,参考案例1,将客户端,服务器两侧作如下修改:

*.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages

 

案例5:日志的远程发送和接收2

服务器端

vi /etc/rsyslog.conf        #在文件开始加上,同时确保514端口能够被客户端用tcp访问
$ModLoad imtcp.so              # needs to be done just once #使用tcp方式
$InputTCPMaxSessions 500    # tcp接收连接数为500个
$InputTCPServerRun 514      # tcp接收信息的端口
$template logformat,”%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n”     # 定义一个名为logformat模板, 为信息加上日志时间
$template DynFile,”/var/log/tlog%$year%%$month%%$day%.log”     # 定义日志文件的名称,按照年月日
:rawmsg, contains, “sdns_log” ?DynFile;logformat    # 把rawmsg(也可以使用msg)日志中包含sdns_log标志的信息写到DynFile定义的日志文件里
:rawmsg, contains, “sdns_log”  ~                     # 这个表示丢弃包含sdns_log标志的信息, 一般都加上它, 以免多个日志文件记录重复的日志,这句话也可以写成& ~

 

如果要把来自不同ip的消息保存到不同的文件里,怎么搞?
 :fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log
:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log

 

这里的意思就是先定义一个模版,该模版的日志都存放在/var/log/hosts目录下,并且以各自的主机名命名,

然后将分别来自不同结点的日志以模版里定义的形式保存。

 

$template RemoteHost,"/var/log/hosts/%HOSTNAME%.log"
:fromhost-ip, !isequal, "127.0.0.1" -?RemoteHost
& ~

 

当然也可以根据自己的需求来保存需要保存的日志,如仅仅保留192.168.128.254这个结点过来的日志
:fromhost-ip, isequal, "192.168.128.254"  -/var/log/messages-192.168.128.254.log
& ~

 

还通过匹配日志内容将日志保存到指定的文件。

:msg, startswith, "" ## Firewalld LOGGED ## "" -/var/log/firewalld-denied.log

& ~

 

客户端

 vi /etc/rsyslog.conf  #在文件开始加上
#把包含sdns_log的信息通过tcp发到192.168.1.2 @@表示tcp @表示udp
:rawmsg, contains, “sdns_log”       @@192.168.1.2       # 默认514端口
#这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message
:rawmsg, contains, “sdns_log”       ~

#或者

& ~

 

 

 

分享到:
评论

相关推荐

    linux 审计系统

    ### Linux 审计系统知识点详解 #### 一、概述 Linux 审计系统是用于记录系统活动的关键组件之一,主要用于追踪文件系统的变化、进程行为以及其他关键事件,为系统的安全性提供了重要保障。它作为Linux内核的一部分...

    linux系统日志详解

    Linux系统日志详解 在Linux操作系统中,日志系统扮演着至关重要的角色,它记录了系统运行中的事件、错误和警告信息,为管理员提供了一种监控和诊断系统状况的手段。Linux日志主要分为几个部分,包括日志的分类、...

    Linux服务器安全策略详解

    配置syslog收集系统日志,使用工具如`logwatch`或`rsyslog`进行分析。定期审查`/var/log`下的日志文件,寻找异常活动。设置日志轮换策略,防止日志文件过大。 服务安全包括SSL/TLS加密、数据库安全和邮件服务器安全...

    rsyslog配置说明.docx

    ### rsyslog配置详解 #### 一、日志类型与级别 **日志设备(类型)** 在rsyslog中,日志设备是指产生日志的来源或应用程序。例如,`kern`代表内核生成的日志,`auth`表示认证服务(如SSH登录尝试)的日志。 **...

    linux 定时任务详解

    ### Linux定时任务详解 在Linux系统中,定时任务是一个非常重要的功能,可以帮助用户自动化执行一些周期性的任务,例如定期备份数据、清理日志文件等。Linux中最常用的定时任务工具是`crontab`。 #### 一、crontab...

    西南科技大学+Linux实验报告+Linux网络安全管理报告

    通过`vim`编辑`rsyslog.conf`配置文件,指定日志文件位置,使用`logger`发送测试日志消息,并重启`rsyslog`服务以应用更改。 【实验效果与问题解决】 在实验过程中,学生应记录操作结果、遇到的问题及其解决方案,...

    splunk-rsyslog

    《Splunk与Rsyslog的整合应用详解》 在IT运维和日志管理领域,Splunk和Rsyslog是两个非常重要的工具。Splunk是一款强大的日志管理和分析平台,能够帮助用户收集、索引和利用各种类型的数据。而Rsyslog则是一个广泛...

    老男孩LINUX2018最新大纲

    #### 四、Linux基础命令详解 - **文件操作命令**:ls、cd、mkdir、rm、cp、mv等。 - **文本处理命令**:grep、awk、sed等。 - **进程管理命令**:ps、top、kill等。 - **包管理命令**:yum、apt-get等。 - **其他...

    Linux之定时任务Crond详解

    Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便会启动Crond任务调度服务。 Crond服务会定期(默认每分钟检查一次)检查系统...

    Cent OS 配置日志服务器和配置详解.docx

    【Cent OS 配置日志服务器和配置详解】 在IT管理中,日志服务器的配置是至关重要的,它能够集中收集、存储和分析来自不同系统的日志信息,从而提高故障排查效率,确保网络安全和合规性。本文将详细介绍如何在Cent ...

    系统安全中Linux日志的实用研究.pdf

    【Linux日志系统详解】 日志系统在Linux操作系统中扮演着至关重要的角色,它是系统运行的历史记录,通过分析日志,管理员可以迅速发现系统错误、潜在的入侵行为,从而提高系统的安全性。本文主要探讨如何在系统安全...

    linx下DNS配置详解

    DNS 配置详解 在 Linux 下的 DNS 配置是一个复杂的过程,它涉及到多个方面的知识,包括 DNS 的基础知识、RHEL6 的特性、BIND 的配置等。下面我们将详细解释 DNS 配置的每个步骤,帮助读者更好地理解和掌握 DNS 配置...

    40道Linux日志高频题整理(附答案背诵版).md

    ### Linux日志高频题知识点详解 #### 一、基础知识 1. **常见的Linux日志文件及其用途** 在Linux环境中,日志文件是系统管理和维护过程中不可或缺的一部分。它们记录了系统运行过程中的各种事件,包括但不限于...

Global site tag (gtag.js) - Google Analytics