• Linux学习-66-系统日志管理


    15 Linux系统日志管理

    • 系统日志详细地记录了在什么时间,哪台服务器、哪个程序或服务出现了什么情况。不管是哪种操作系统,都详细地记录了重要程序和服务的日志,只是我们很少养成查看日志的习惯。

    • 日志是系统信息最详细、最准确的记录者,如果大家能够善用日志,那么当系统出现问题时,我们就能在第一时间发现问题,也能够从日志中找到解决问题的方法。

    15.1 rsyslogd服务及启动方法
    • 从 CentOS 6.x 开始,日志服务已经由 rsyslogd 取代了原先的 syslogd。Red Hat 公司认为 syslogd 已经不能满足工作中的需求,rsyslogd 相比 syslogd 具有一些新的特点:

      • 基于TCP网络协议传输日志信息。
      • 更安全的网络传输方式。
      • 有日志信息的即时分析框架。
      • 后台数据库。
      • 在配置文件中可以写简单的逻辑判断。
      • 与syslog配置文件相兼容。
    • rsyslogd 日志服务更加先进,功能更多。但是,不论是该服务的使用,还是日志文件的格式,其实都是和 syslogd 服务相兼容的,所以学习起来基本和 syslogd 服务一致。查看rsyslogd 服务是否启动:

    [root@CncLucZK ~]# ps aux |grep 'rsyslogd'
    root        1383  0.0  3.4 723952 64728 ?        Ssl  Oct19   0:42 /usr/sbin/rsyslogd -n
    root     2304589  0.0  0.0  12112  1044 pts/0    S+   17:31   0:00 grep --color=auto rsyslogd
    
    
    • 1
    • 2
    • 3
    • 4
    • 系统中的绝大多数日志文件是由 rsyslogd 服务来统一管理的,只要各个进程将信息给予这个服务,它就会自动地把日志按照特定的格式记录到不同的日志文件中。也就是说,采用 rsyslogd 服务管理的日志文件,它们的格式应该是统一的。在 Linux 系统中有一部分日志不是由 rsyslogd 服务来管理的,比如 apache 服务,它的日志是由 Apache 软件自己产生并记录的,并没有调用 rsyslogd 服务。但是为了便于读取,apache 日志文件的格式和系统默认日志的格式是一致的。
    15.2 日志文件(常见)及其功能
    • 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。这些信息有些非常敏感,所以在 Linux 中这些日志文件只有 root 用户可以读取。目录/var/是用来保存系统动态数据的,/var/log/ 目录就是系统日志文件的保存位置。常见的系统中的重要日志文件。
    日志文件说 明
    /var/log/cron记录与系统定时任务相关的曰志
    /var/log/cups/记录打印信息的曰志
    /var/log/dmesg记录了系统在开机时内核自检的信息。也可以使用dmesg命令直接查看内核自检信息
    /var/log/btmp记录错误登陆的日志。这个文件是二进制文件,不能直接用Vi查看,而要使用lastb命令查看。命令如下: [root@localhost log]#lastb root tty1 Tue Jun 4 22:38 - 22:38 (00:00) #有人在6月4 日 22:38便用root用户在本地终端 1 登陆错误
    /var/log/lasllog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
    /var/Iog/mailog记录邮件信息的曰志
    /var/log/messages它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已经用户自定义安装软件的日志,也会在这里列出。
    /var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
    /var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的后动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
    /var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看
    • 除系统默认的日志之外,采用 RPM 包方式安装的系统服务也会默认把日志记录在 /var/log/ 目录中(源码包安装的服务日志存放在源码包指定的目录中)。不过这些日志不是由 rsyslogd 服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身的日志。以下介绍的日志目录在你的 Linux 上不一定存在,只有安装了相应的服务,日志才会出现。服务日志:
    日志文件说明
    /var/log/httpd/RPM包安装的apache取务的默认日志目录
    /var/log/mail/RPM包安装的邮件服务的额外日志因录
    /var/log/samba/RPM包安装的Samba服务的日志目录
    /var/log/sssd/守护进程安全服务目录
    15.3 日志文件格式分析
    • 只要是由日志服务 rsyslogd 记录的日志文件,它们的格式就都是一样的。所以我们只要了解了日志文件的格式,就可以看懂日志文件。
    • 日志文件的格式包含以下 4 列:
      • 事件产生的时间。
      • 产生事件的服务器的主机名。
      • 产生事件的服务名或程序名。
      • 事件的具体信息。
    • 查看一下 /var/log/secure 日志,这个日志中主要记录的是用户验证和授权方面的信息,
    [root@CncLucZK httpd]# head -5 /var/log/secure
    Oct  6 21:21:59 CncLucZK sshd[1391]: Received signal 15; terminating.
    Oct  6 21:21:59 CncLucZK sshd[2174893]: pam_unix(sshd:session): session closed for user root
    #时间 本地主机 sshd服务中pam_unix模块产生消息:关闭用户root的会话(UID为0)
    Oct  6 21:21:59 CncLucZK systemd[2174899]: pam_unix(systemd-user:session): session closed for user root
    Oct  6 21:23:04 CncLucZK polkitd[775]: Loading rules from directory /etc/polkit-1/rules.d
    Oct  6 21:23:04 CncLucZK polkitd[775]: Loading rules from directory /usr/share/polkit-1/rules.d
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 分析日志既是重要的系统维护工作,也是一项非常枯燥和烦琐的工作。如果我们的服务器出现了一些问题,比如系统不正常重启或关机、用户非正常登录、服务无法正常使用等,则都应该先查询日志。服务器不是很正常就应该查看日志,甚至在服务器没有什么问题时也要养成定时查看系统日志的习惯。
    15.4 rsyslogd配置文件格式及其内容
    • rsyslogd 服务是依赖其配置文件 /etc/rsyslog.conf 来确定哪个服务的什么等级的日志信息会被记录在哪个位置的。也就是说,日志服务的配置文件中主要定义了服务的名称、日志等级和日志记录位置。

    • /etc/rsyslog.conf配置文件的格式:

    authpriv.* /var/log/secure
    #服务名称[连接符号]日志等级 日志记录位置
    #认证相关服务.所有日志等级 记录在/var/log/secure日志中
    
    • 1
    • 2
    • 3
    • 服务名称:确定 rsyslogd 服务可以识别哪些服务的日志,也可以理解为以下这些服务委托 rsyslogd 服务来代为管理日志。
    服务名称说 明
    auth(LOG AUTH)安全和认证相关消息 (不推荐使用authpriv替代)
    authpriv(LOG_AUTHPRIV)安全和认证相关消息(私有的)
    cron (LOG_CRON)系统定时任务cront和at产生的日志
    daemon (LOG_DAEMON)与各个守护进程相关的曰志
    ftp (LOG_FTP)ftp守护进程产生的曰志
    kern(LOG_KERN)内核产生的曰志(不是用户进程产生的)
    Iocal0-local7 (LOG_LOCAL0-7)为本地使用预留的服务
    lpr (LOG_LPR)打印产生的日志
    mail (LOG_MAIL)邮件收发信息
    news (LOG_NEWS)与新闻服务器相关的日志
    syslog (LOG_SYSLOG)存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
    user (LOG_USER)用户等级类别的日志信息
    uucp (LOG_UUCP>uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中
    • 这些日志服务名称是rsyslogd服务自己定义的,并不是实际的Linux的服务。当有服务需要由rsyslogd服务来帮助管理日志时,只需要调用这些服务名称就可以实现日志的委托管理。这些日志服务名称大家可以使用命令“man 3 syslog”来查看。虽然我们的日志管理服务已经更新到rsyslogd,但是很多配置依然沿用了syslogd服务,在帮助文档中仍然查看syslog服务的帮助信息。

    • 连接符号:日志服务连接日志等级的格式如下:

    日志服务[连接符号]日志等级 日志记录位置
    
    • 1
    • 在这里,连接符号可以被识别为以下三种。

      1. “.”代表只要比后面的等级高的(包含该等级)日志都记录。比如,“cron.info”代表cron服务产生的日志,只要日志等级大于等于info级别,就记录。
      2. “.=”代表只记录所需等级的日志,其他等级的日志都不记录。比如,“*.=emerg”代表系统日志服务产生的日志,只要等级是emerg等级,就记录。这种用法极少见,了解就好。
      3. “.!”代表不等于,也就是除该等级的日志外,其他等级的日志都记录。
    • 日志等级:每个日志的重要性都是有差别的,比如,有些日志只是系统的一个日常提醒,看不看根本不会对系统的运行产生影响;但是有些日志就是系统和服务的警告甚至报错信息,这些日志如果不处理,就会威胁系统的稳定或安全。如果把这些日志全部写入一个文件,那么很有可能因为管理员的大意而忽略重要信息。

    • 邮件的等级信息也可以使用“man 3 syslog”命令来查看。日志等级从低到高排列。

    等级名称说 明
    debug (LOG_DEBUG)一般的调试信息说明
    info (LOG_INFO)基本的通知信息
    nolice (LOG_NOTICE)普通信息,但是有一定的重要性
    warning(LOG_WARNING)警吿信息,但是还不会影响到服务或系统的运行
    err(LOG_ERR)错误信息, 一般达到err等级的信息已经可以影响到服务成系统的运行了
    crit (LOG_CRIT)临界状况信思,比err等级还要严®
    alert (LOG_ALERT)状态信息,比crit等级还要严重,必须立即采取行动
    emerg (LOG_EMERG)系统等级信息,系统已经无法使用了
    *代表所有日志等级。比如,“authpriv.*”代表amhpriv认证信息服务产生的日志,所有的日志等级都记录
    • 日志等级还可以被识别为“none”。如果日志等级是none,就说明忽略这个日志服务,该服务的所有日志都不再记录。

    • 日志记录位置就是当前日志输出到哪个日志文件中保存,当然也可以把日志输出到打印机打印,或者输出到远程日志服务器上(当然,远程日志服务器要允许接收才行)。日志的记录位置也是固定的:

      • 日志文件的绝对路径。这是最常见的日志保存方法,如“/var/log/secure”就是用来保存系统验证和授权信息日志的。
      • 系统设备文件。如“/dev/lp0”代表第一台打印机,如果日志保存位置是打印机设备,当有日志时就会在打印机上打印。
      • 转发给远程主机。因为可以选择使用 TCP 和 UDP 协议传输日志信息,所以有两种发送格式:如果使用“@192.168.0.210:514”,就会把日志内容使用 UDP 协议发送到192.168.0.210 的 UDP 514 端口上;如果使用“@@192.168.0.210:514”,就会把日志内容使用 TCP 协议发送到 192.168.0.210 的 TCP 514 端口上,其中 514 是日志服务默认端口。当然,只要 192.168.0.210 同意接收此日志,就可以把日志内容保存在日志服务器上。
      • 用户名。如果是“root”,就会把日志发送给 root 用户,当然 root 要在线,否则就收不到日志信息了。发送日志给用户时,可以使用“*”代表发送给所有在线用户,如“mail.**”就会把 mail 服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户,则用户名之间用“,”分隔。
      • 忽略或丢弃日志。如果接收日志的对象是“~”,则代表这个日志不会被记录,而被直接丢弃。如“local3.* ~”代表忽略 local3 服务类型所有的日志都不记录。
    • 知道了/etc/rsyslog.conf 配置文件中日志的格式,接下来就看看这个配置文件的具体内容。

    [root@CncLucZK httpd]# cat /etc/rsyslog.conf					#查看配置文件的内容
    # rsyslog configuration file
    
    # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    # or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html 
    # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
    #加载模块
    #### MODULES ####
    #加载imixsock模块,为本地系统登录提供支持
    module(load="imuxsock" 	  # provides support for local system logging (e.g. via logger command)
           SysSock.Use="off") # Turn off message reception via local log socket; 
    			  # local messages are retrieved through imjournal now.
    #加载imjournal模块,提供对系统日志的访问
    module(load="imjournal" 	    # provides access to the systemd journal
           StateFile="imjournal.state") # File to store the position in the journal
    #加载imklog模块,为内核登录提供支持
    #module(load="imklog") # reads kernel messages (the same are read from journald)
    #加载immark模块,提供标记信息的能力
    #module(load"immark") # provides --MARK-- message capability
    
    #加载UPD模块,允许使用UDP的514端口接收采用UDP协议转发的日志
    # Provides UDP syslog reception
    # for parameters see http://www.rsyslog.com/doc/imudp.html
    #module(load="imudp") # needs to be done just once
    #input(type="imudp" port="514")
    
    #加载TCP摸块,允许使用TCP的514编口接收采用TCP协议转发的日志
    # Provides TCP syslog reception
    # for parameters see http://www.rsyslog.com/doc/imtcp.html
    #module(load="imtcp") # needs to be done just once
    #input(type="imtcp" port="514")
    
    #定义全局设置
    #### GLOBAL DIRECTIVES ####
    
    #$ActionFileEnableSync on
    #文件同步功能。默认没有开启,是注释的
    
    # Where to place auxiliary files
    global(workDirectory="/var/lib/rsyslog")
    
    # Use default timestamp format
    module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
    
    #包含/etc/rsyslog.d/*目录中所有的".conf"子配置文件。也就是说,这个目录中的所有子配置文件也同时生效
    # Include all config files in /etc/rsyslog.d/
    include(file="/etc/rsyslog.d/*.conf" mode="optional")
    
    #日志文件保存规则
    #### RULES ####
    
    # Log all kernel messages to the console.
    # Logging much else clutters up the screen.
    
    #kern服务.所有日志级别 保存在/dev/console
    #kern.*                                                 /dev/console
    
    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    
    #所有服务.info以上级到的日志保存在/var/log/messages日志文件中
    #mail, authpriv;cron的日志不记录在/var/log/messages曰志文件中,因为它们部有自己的日志文件
    #所以/var/log/messages日志是最重要的系统日志文件,需要经常查看
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    
    #用户认证服务所有级别的日志保存在/vai/1og/secure日志文件中
    # The authpriv file has restricted access.
    authpriv.*                                              /var/log/secure
    
    #mail服务的所有级别的日志保存在/var/log/maillog 日志文件中
    #"-"的含义是日志先在内存中保存.当曰志足够多之后.再向文件中保存
    # Log all the mail messages in one place.
    mail.*                                                  -/var/log/maillog
    
    #计划任务的所有日志保存在/var/log/cron日志文件中
    # Log cron stuff
    cron.*                                                  /var/log/cron
    
    #每个人都会收到紧急消息
    # Everybody gets emergency messages
    *.emerg                                                 :omusrmsg:*
    
    #uucp和news日志服务的crit以上级别的日志保存在/var/log/sppoler日志文件中
    # Save news errors of level crit and higher in a special file.
    uucp,news.crit                                          /var/log/spooler
    
    #loacl7 日志服务的所有日志写入/var/log/boot.log 日志文件中 #会把开机时的检测信息在显示到屏幕的同时写入/var/log/boot.log 日志文件中
    # Save boot messages also to boot.log
    local7.*                                                /var/log/boot.log
    
    #定义转发规到
    # ### sample forwarding rule ###
    #action(type="omfwd"  
    # An on-disk queue is created for this action. If the remote host is
    # down, messages are spooled to disk and sent when it is up again.
    #queue.filename="fwdRule1"       # unique name prefix for spool files
    #queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
    #queue.saveonshutdown="on"       # save messages to disk on shutdown
    #queue.type="LinkedList"         # run asynchronously
    #action.resumeRetryCount="-1"    # infinite retries if host is down
    # Remote Logging (we use TCP for reliable delivery)
    # remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
    #Target="remote_host" Port="XXX" Protocol="tcp")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 系统已经非常完善地定义了这个配置文件的内容,系统中重要的日志也已经记录得非常完备。如果是外来的服务,如 apache、Samba 等服务,那么这些服务的配置文件中也详细定义了日志的记录格式和记录方法。所以,日志的配置文件基本上不需要我们修改,我们要做的仅仅是查看和分析系统记录好的日志而已。

    参考文献:
    rsyslogd配置文件格式及其内容详解

    下一篇:Linux学习-67-日志服务器设置和日志分析工具(logwatch)安装及使用
  • 相关阅读:
    element ui框架(准备)
    显示器有白点闪烁、间歇黑屏解决办法
    我的Vim学习笔记(不定期更新)
    网卡限速工具之WonderShaper
    零基础速通AI建筑效果图!七个步骤,20个万能模板让你成功逆袭
    httpprompt.ml靶场练习
    Tekla之Solid初探
    若依断言工具、快速开发工具、代码优化
    电脑提示ISDone.dll错误怎么办?
    Linux基础(四)
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/128122504