zoukankan      html  css  js  c++  java
  • linux系统日志以及分析

    Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
    大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog/etc/syslogd/etc/rsyslog.d,默认配置文件为 /etc/syslog.confrsyslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。

    Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。

    完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。

    例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在/var/log目录下。

    日志类型

    下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:

    类型 说明
    auth 用户认证时产生的日志,如login命令、su命令。
    authpriv 与 auth 类似,但是只能被特定用户查看。
    console 针对系统控制台的消息。
    cron 系统定期执行计划任务时产生的日志。
    daemon 某些守护进程产生的日志。
    ftp FTP服务。
    kern 系统内核消息。
    local0.local7 由自定义程序使用。
    lpr 与打印机活动有关。
    mail 邮件日志。
    mark 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。
    news 网络新闻传输协议(nntp)产生的消息。
    ntp 网络时间协议(ntp)产生的消息。
    user 用户进程。
    uucp UUCP子系统。

    日志优先级

    常见的日志优先级请见下标:

    优先级 说明
    emerg 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。
    alert 需要立即修复,例如系统数据库损坏。
    crit 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。
    err 一般错误消息。
    warning 警告。
    notice 不是错误,但是可能需要处理。
    info 通用性消息,一般用来提供有用信息。
    debug 调试程序产生的信息。
    none 没有优先级,不记录任何日志消息。

    常用日志文件

    系统日志是由一个名为syslog的服务管理的,如以下日志文件都是由syslog日志服务驱动的:

    /var/log/boot.log:录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息。
    /var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息。
    /var/log/messages :记录Linux操作系统常见的系统和服务错误信息。
    /var/log/secure :Linux系统安全日志,记录用户和工作组变化情况、用户登陆认证情况。
    /var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址。
    /var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看。
    /var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看。
    /var/run/utmp:该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件。
    /var/log/syslog 或 /var/log/messages:存储所有的全局系统活动数据,包括开机信息。基于 Debian 的系统如 Ubuntu 在 /var/log/syslog:中存储它们,而基于 RedHat 的系统如 RHEL 或 CentOS 则在 /var/log/messages 中存储它们。
    /var/log/secure:与安全相关的日志信息
    /var/log/maillog:与邮件相关的日志信息
    /var/log/cron:与定时任务相关的日志信息
    /var/log/spooler:与UUCP和news设备相关的日志信息
    /var/log/auth.log 或 /var/log/secure:存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu 和 Debian 在 /var/log/auth.log 中存储认证信息,而 RedHat 和 CentOS 则在 /var/log/secure 中存储该信息。

    日志文件详细介绍

    • /var/log/boot.log

    该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息:

    [^[[32m  OK  ^[[0m] Started Show Plymouth Boot Screen.^M
    [^[[32m  OK  ^[[0m] Reached target Paths.^M
    [^[[32m  OK  ^[[0m] Started Forward Password Requests to Plymouth Directory Watch.^M
    [^[[32m  OK  ^[[0m] Reached target Basic System.^M
    ^[%G^[%G[^[[32m  OK  ^[[0m] Found device /dev/mapper/centos-root.^M
             Starting File System Check on /dev/mapper/centos-root...^M
    [^[[32m  OK  ^[[0m] Started File System Check on /dev/mapper/centos-root.^M
    [^[[32m  OK  ^[[0m] Started dracut initqueue hook.^M
             Mounting /sysroot...^M
    [^[[32m  OK  ^[[0m] Reached target Remote File Systems (Pre).^M
    [^[[32m  OK  ^[[0m] Reached target Remote File Systems.^M
    [^[[32m  OK  ^[[0m] Mounted /sysroot.^M
    [^[[32m  OK  ^[[0m] Reached target Initrd Root File System.^M
             Starting Reload Configuration from the Real Root...^M
    [^[[32m  OK  ^[[0m] Started Reload Configuration from the Real Root.^M
    [^[[32m  OK  ^[[0m] Reached target Initrd File Systems.^M
    [^[[32m  OK  ^[[0m] Reached target Initrd Default Target.^M
    
    • /var/log/syslog

    要让系统生成该日志文件,在/etc/syslog.conf文件中加上:*.warning /var/log/syslog 该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息。

    该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。如果某用户从来没有登录过,就显示为"Never logged in"。该命令只能以root权限执行。简单地输入lastlog命令后就会看到以下信息:

    [root@k8s-test01 /var/log]# lastlog 
    Username         Port     From             Latest
    root             pts/1    192.168.172.1    Mon Nov 29 10:13:59 +0800 2021
    bin                                        **Never logged in**
    daemon                                     **Never logged in**
    adm                                        **Never logged in**
    lp                                         **Never logged in**
    sync                                       **Never logged in**
    shutdown                                   **Never logged in**
    halt                                       **Never logged in**
    mail                                       **Never logged in**
    operator                                   **Never logged in**
    games                                      **Never logged in**
    ftp                                        **Never logged in**
    nobody                                     **Never logged in**
    systemd-network                            **Never logged in**
    dbus                                       **Never logged in**
    polkitd                                    **Never logged in**
    sshd                                       **Never logged in**
    postfix                                    **Never logged in**
    tss                                        **Never logged in**
    chrony                                     **Never logged in**
    rpc                                        **Never logged in**
    rpcuser                                    **Never logged in**
    nfsnobody                                  **Never logged in**
    nginx                                      **Never logged in**
    apache                                     **Never logged in**
    
    • /var/log/wtmp

    该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端tty或时间显示相应的记录。

    • /var/run/utmp

    该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如 who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的。

    以上提及的3个文件(/var/log/wtmp/var/run/utmp/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询。

    每次有一个用户登录时,login程序在文件lastlog中查看用户的UID。如果存在,则把用户上次登录、注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录。该记录一直用到用户登录退出时删除。utmp文件被各种命令使用,包括who、w、users和finger。

    下一步,login程序打开文件wtmp附加用户的utmp记录。当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中。wtmp文件被程序last使用。

    last命令

    常用参数说明:

    -a 把从何处登入系统的主机名称或ip地址,显示在最后一行。
    -d 指定记录文件。指定记录文件。将IP地址转换成主机名称。
    -f <记录文件>  指定记录文件。
    -n <显示列数>或-<显示列数>  设置列出名单的显示列数。
    -R 不显示登入系统的主机名称或IP地址。
    -x 显示系统关机,重新开机,以及执行等级的改变等信息
    

    查看所有的重启、关机记录:

    last | grep reboot
    last | grep shutdown
    history
    

    列出所有的历史记录:

    [root@k8s-test01 ~]# history
    

    只列出最近10条记录:

    [root@k8s-test01 ~]# history 10 (注,history和10中间有空格)
    

    使用命令记录号码执行命令,执行历史清单中的第99条命令:

    [root@k8s-test01 ~]#!99 (!和99中间没有空格)
    

    重复执行上一个命令:

    [root@k8s-test01 ~]#!!
    

    执行最后一次以rpm开头的命令(!? ?代表的是字符串,这个String可以随便输,Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。)

    [root@k8s-test01 ~]#!rpm
    

    逐屏列出所有的历史记录:

    [root@k8s-test01 ~]# history | more
    

    立即清空history当前所有历史命令的记录:

    [root@k8s-test01 ~]# history -c
    

    cat, tail 和 watch

    系统所有的日志都在 /var/log 下面自己看(具体用途可以自己查,附录列出一些常用的日志)

    cat /var/log/syslog 等
    cat /var/log/*.log
    

    tail -f

    如果日志在更新,如何实时查看:tail -f /var/log/messages

    还可以使用watch -d -n 1 cat /var/log/messages

    -d表示高亮不同的地方,-n表示多少秒刷新一次。

    该指令,不会直接返回命令行,而是实时打印日志文件中新增加的内容,
    这一特性,对于查看日志是非常有效的。如果想终止输出,按 Ctrl+C 即可。

    除此之外还有more, less ,dmesg|more,这里就不作一一列举了,因为命令太多了,关键看个人喜好和业务需求。个人常用的就是以上那些。

  • 相关阅读:
    类与类关系的UML图与代码表现
    JAVA加密算法简介
    【转】[C#]二维码生成、解码(QRCode)【支持winform、web调用】
    【转】[C#]二维码生成、解码(QRCode)【支持winform、web调用】
    C# 断网
    subversion prerevpropchange.bat
    How can I get a layer's DataSource properties.
    subversion prerevpropchange.bat
    C# 断网
    使用 Tkprof 分析 ORACLE 跟踪文件3
  • 原文地址:https://www.cnblogs.com/even160941/p/15625475.html
Copyright © 2011-2022 走看看