zoukankan      html  css  js  c++  java
  • syslog日志

    Syslog协议

    系统日志(Syslog)协议是在一个IP网络中转发系统日志信息的标准,它是在美国加州大学伯克利软件分布研究中心(BSD)的TCP/IP系统实施中开发的,目前已成为工业标准协议,可用它记录设备的日志。Syslog记录着系统中的任何事件,管理者可以通过查看系统记录随时掌握系统状况。系统日志通过Syslog进程记录系统的有关事件,也可以记录应用程序运作事件。通过适当配置,还可以实现运行Syslog协议的机器之间的通信。通过分析这些网络行为日志,可追踪和掌握与设备和网络有关的情况。

    在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。

    完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性,syslog不再仅限于Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用syslog。

    syslog协议格式定义如下

    facility.priority action

    facility(设施):标识系统需要记录日志的子系统,大概有以下子系统。

    auth #PAM认证相关日志;

    authpriv #SSH、FTP登录相关日志;

    cron #任务计划相关日志;

    daemon #守护进程相关日志;

    kern #内核相关日志;

    lpr #打印相关日志;

    mail #邮件相关日志;

    mark #标记相关日志;

    news #新闻相关日志;

    security #安全相关日志与auth类似;

    syslog #Rsyslog自己的日志;

    user #用户相关日志;

    uucp #UNIX to UNIX cp相关日志;

    local0 to local7 #用户自定义使用设置日志;

    * #表示所有的facility;

    priority(级别):用来标识日志级别,级别越低信息越详细,有以下日志级别,从上到下,级别从低到高,记录的信息越来越少,详细的可以查看手册: man 3 syslog。

    debug #程序或系统调试信息;

    info #一般信息;

    notice #不影响正常功能需要注意的信息;

    warning #可能影响系统功能提醒用户的重要事件;

    error #错误信息;

    crit #比较严重的信息;

    alert #必须马上处理的警告信息;

    emerg/panic #会导致系统不可用的严重信息;

    * #表示所有日志级别;

    none #跟*相反表示什么都没有;

    action(动作):设置日志记录的位置,有以下几种。

    1)记录到普通文件或设备文件

    *.* /var/log/file.log #绝对路径

    *.* /dev/pts/0 #设备文件

    2)”|”,表示将日志送给其他命令处理

    3)”@HOST”,表示将日志发送到特定的主机

    *.emerg @192.168.10.1

    4)”用户”,表示将日志发送到特定的用户

    5)”*”,表示将日志发送所有登录到系统上的用户

    连接符号

    . #表示大于等于xxx级别的信息;

    .= #表示等于xxx级别的信息;

    .! #表示在xxx之外的等级的信息;

    格式定义案例(定义在/etc/rsyslog.conf配置文件)

    # 表示将mail相关的,info级别及以上级别都记录到mail.log文件中

    mail.info /var/log/mail.log

    # 表示将auth相关的基本为info信息记录到远程主机

    auth.=info @192.168.10.1

    # 表示记录与user和error相反的

    user.!error

    # 表示记录所有日志信息的info级别及以上级别

    *.info

    # 所有日志及所有级别信息都记录下来

    *.*

    PS:多个日志来源可以使用,号隔开,如cron.info;mail.info。

    rsyslog日志系统

    对于日志管理,其配置文件为”/etc/rsyslog.conf“,信息如下介绍:

    # 表示将所有facility的info级别,但不包括mail,authpriv,cron相关的信息,记录到 /var/log/messages文件

    #### MODULES ####               #定义日志的模块。
    $ModLoad imuxsock             #imuxsock为模块名,支持本地系统日志的模块。
    $ModLoad imjournal            #imjournal为模块名,支持对系统日志的访问。
    #$ModLoad imklog               #imklog为模块名,支持内核日志的模块。
    #$ModLoad immark               #immark为模块名,支持日志标记。
    # Provides UDP syslog reception   #提供udp syslog的接收。
    #$ModLoad imudp               #imudp为模块名,支持udp协议。
    #$UDPServerRun 514               #允许514端口接收使用udp和tcp转发来的日志。
    # Provides TCP syslog reception       #提供tcp syslog的接收。
    #$ModLoad imtcp              #imtcp为模块名,支持tcp协议。
    #$InputTCPServerRun 514
    
    #### GLOBAL DIRECTIVES ####    #定义全局日志格式的指令。
    # Where to place auxiliary files
    $WorkDirectory /var/lib/rsyslog       #工作目录。
    # Use default timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  #定义日志格式默认模板。
    $IncludeConfig /etc/rsyslog.d/*.conf                     #所有配置文件路径。
    $OmitLocalLogging on                                      #省略本地登录。
    # File to store the position in the journal
    $IMJournalStateFile imjournal.state
    
    #### RULES ####
    #kern.*                                  /dev/console
    #记录所有日志类型的info级别以及大于info级别的信息到messages文件,但是mail邮件信息,authpriv验证方面的信息和corn时间和任务相关信息除外。
    *.info;mail.none;authpriv.none;cron.none      /var/log/messages
    
    # authpriv验证相关的所有信息存放在/var/log/secure。
    authpriv.*                                /var/log/secure
    
    #邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录
    mail.*                                   -/var/log/maillog
    
    #任务计划有关的信息存放在/var/log/cron。
    cron.*                                   /var/log/cron
    
    #记录所有的≥emerg级别信息,发送给每个登录到系统的日志。
    *.emerg                                 :omusrmsg:*
    
    #记录uucp,news.crit等存放在/var/log/spooler
    uucp,news.crit                            /var/log/spooler
    
    #本地服务器的启动的所有日志存放在/var/log/boot.log
    local7.*                                  /var/log/boot.log
    
    #发送日志,@表示传输协议(@表示udp,@@表示tcp),后面是ip和端口。
    #*.* @@remote-host:514

     通过syslog接收远程日志

    服务端(sever)

    1)检查是否安装了rsyslog软件

    # rpm -qa | grep rsyslog    //默认系统都安装了该软件

    2)安装rsyslog 连接MySQL数据库的模块

    # yum install rsyslog-mysql –y

    rsyslog-mysql 为rsyslog 将日志传送到MySQL 数据库的一个模块,这里必须安装。

    3)配置服务端支持rsyslog-mysql 模块,并开启UDP服务端口获取网内其他LINUX系统日志

    #### MODULES ####
    
    $ModLoad ommysql
    *.* :ommysql:192.168.10.15,Syslog,root,123456
    
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    $ModLoad imklog   # provides kernel logging support (previously done by rklogd)
    $ModLoad immark  # provides --MARK-- message capability
    
    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514
    
    # Provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514 

    4)导入rsyslog-mysql 数据库文件

    # mysql -uroot -pabc123 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql

    mysql> use Syslog;
    Database changed
    mysql> show tables
        -> ;
    +------------------------+
    | Tables_in_Syslog       |
    +------------------------+
    | SystemEvents           |
    | SystemEventsProperties |
    +------------------------+
    2 rows in set (0.01 sec)
    
    mysql> 
    

     5)重启rsyslog 服务

    # /etc/init.d/rsyslog restart

    客户端(client)

    1)配置rsyslog 客户端发送本地日志到服务端

    # vi /etc/rsyslog.conf

    *.* @192.168.10.15

    2)重启rsyslog 服务

    # /etc/init.d/rsyslog restart

    3)编辑/etc/bashrc,将客户端执行的所有命令写入系统日志/var/log/messages中。

    # vi /etc/bashrc

    在文件尾部增加一行

    export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }'

    设置其生效

    # source /etc/bashrc

    客户端配置完毕。

    通过以上配置即可在服务端的数据库和/var/log/message中接收到客户端操作信息

  • 相关阅读:
    BGP
    物联网时代的智能家居
    Linux下找不到动态链接库
    Java清洁:终结处理和垃圾回收
    单例模式的改进
    shell脚本中的括号和实例
    shell如何生成rpm包仓库列表文件的对比结果
    shell脚本实现覆盖写文件和追加写文件
    怎么用命令查看某个目录下子目录占用空间的大小
    利用shell脚本函数实现网络连通性的检测
  • 原文地址:https://www.cnblogs.com/porkerface/p/11320696.html
Copyright © 2011-2022 走看看