zoukankan      html  css  js  c++  java
  • Linux系统日志分析与管理

    该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。

    当你的 Linux 系统出现不明原因的问题时,你需要查阅一下系统日志才能够知道系统出了什么问题了,所以说了解系统日志是很重要的事情,系统日志可以记录系统在什么时间、哪个主机、哪个服务、出现了什么信息等,这些信息也包括使用者识别数据、系统故障排除等,如果你能够善用这些日志文件信息的话,你的系统出现错误时,你将可以在第一时间发现,而且也能够从中找到解决的方案.

    Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去,完成这个过程的程序就是syslog,syslog可以根据日志的类别和优先级将日志保存到不同的文件中.

    关于Linux常见的日志文件名及作用

    日志文件可以帮助我们了解很多系统重要的事件,包括登陆者的部分信息,因此日志文件的权限通常是配置为仅有 root 能够读取而已,而由于日志文件可以记录很多的系统详细信息,所以,一个有经验的Linux管理员会随时随地查阅一下自己的日志文件,以随时掌握系统的最新动态,那么常见的日志文件有哪些呢? 一般而言有下面几个:

    ● /var/log/cron

    主要记录关于crontab计划任务的相关信息,比如,系统计划任务的错误配置,计划任务的修改等.

    ● /var/log/btmp

    记录错误登陆日志,这个文件是二进制的,不能使用cat命令查看,而要使用lastb命令查看.

    ● /var/run/utmp

    记录当前一登陆用户的信息,同样不能使用cat命令查看,而要使用w,who,users命令来查询.

    ● /var/log/dmesg

    主要记录系统在开机时内核检测过程所产生的信息,默认情况下RHEL系统关闭了开机回显,如果你要查看则需要在这个文件下查阅即可.

    ● /var/log/lastlog

    记录了系统上面所有账户最近一次登陆系统时的相关信息,lastlog命令就是读取这个文件里的记录来显示的.

    ● /var/log/malilog or /var/log/mail/*

    记录着邮件的往来信息,默认是postfix邮件服务器的一些信息.

    ● /var/log/messages

    这个文件非常重要,几乎系统发生的错误信息,或者重要信息都会被记录在这里.

    ● /var/log/secure

    只要涉及到需要用户名和密码的操作,那么当登陆系统是(不论正确错误),都会记录到这里.

    ● /var/log/wtmp or /var/log/faillog

    这两个文件可以记录正确登陆系统者的账户信息(wtmp),与错误登陆时所使用的账户信息,last命令就是读取wtmp文件来获取的.

    常见的日志文件就是这几个,但是不同的 Linux 发行版,通常日志文件的名称和存储目录都不会相同,但此处除了/var/log/messages 之外,所以说你还是得要查阅你 Linux 主机上面的日志文件配置数据,才能知道你的日志文件主要是放在哪里了.

    日志文件所需相关服务与进程

    其实日志文件的产生,基本上有两种方式:一种是有软件开发商自定义写入的日志文件与相关格式,另一种则是由Linux发行商提供的日志文件管理服务来统一管理,你只要将这个信息丢给这个服务,它就会自己分门别类的放置到相关的日志文件中去,RHEL系统提供syslogd这个服务来统一管理日志文件.

    除了syslogd这个服务之外,内核也需要额外的登陆服务来记录内核产生的各项信息,这个专门用来记录内核日志的服务就是klogd.所以说,日志文件所需的服务主要是syslogd与klogd这两者.

    不过需要注意的是,由于系统每天都在产生大量的日志,如果日志文件量太大,就会影响系统的正常运转,这时候我们可以通过logrtate来自动处理日志文件与切割更新的问题.

    所谓logrotate(日志轮询),基本上就是将旧的文件改变名称,然后新建一个空文件,如此一来新的日志文件将重新开始记录,这样就可以实现日志轮询啦,总结一下,针对日志文件所需的功能,我们需要的服务与程序有以下几个:

    syslogd:主要登陆系统与网络等服务的信息
    klogd:主要登陆内核产生的各项信息
    logrotate:主要进行日志文件的轮询

    以上就是关于日志相关的常用常识,下面我们将开始实际看一下日志服务的应用技巧.

    SYSlog日志文件的格式

    一般情况下,系统产生的信息经过syslog而记录下来的数据中,每条信息均会记录下面的几个数据.

    ● 事件发生的日期与时间
    ● 发生此事件的主机名
    ● 启动此事件的服务名,或函数名
    ● 该信息的实际数据内容

    当然这些信息日志的详细程度也是可以修改的,而且这些信息可以作为系统的排错之用,下面我们来看一下 /var/log/secure 这个日志文件,来简单介绍一下它的记录格式吧.

    [root@localhost ~]# cat /var/log/secure | head -n 5
    Oct 13 12:39:27 localhost polkitd[733]: Loading rules from directory /etc/polkit-1/rules.d
    Oct 13 12:39:27 localhost polkitd[733]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
    Oct 13 12:39:33 localhost sshd[1082]: Server listening on 0.0.0.0 port 22.
    Nov 28 09:36:41 localhost sshd[1364]: Accepted password for root from 192.168.1.20 port 63704 ssh2
    Nov 28 05:36:41 localhost sshd[1364]: pam_unix(sshd:session): session opened for user root by (uid=0)
    

    我们拿最后一条数据来说,该数据是说:在11月28号的下午5点36分,由localhost这台主机,通过sshd服务pid号是1364传来的消息,这个消息是通过pam_unix这个模块产生的,内容为session opened for user root by (uid=0),root开启了活动.

    SYSlog配置文件的解析

    其实日志文件也有配置文件,它的目录是 /etc/rsyslog.conf 基本上syslog针对各种服务于信息的记录保存在这个配置文件里,这个文件规定了什么服务什么等级信息,以及需要被记录在哪里,这三个东西,所以它的语法会是下面的样子:

    [服务名称] .=! [信息等级]            [记录到哪里]
    
    authpriv.*                       /var/log/secure
    mail.info                        -/var/log/maillog
    cron.*                           /var/log/cron
    

    好了,接下来我们分成三个部分来解释这几信息的含义.

    [服务名称]

    syslog本身有设置一些服务,你可以通过这些服务来存储系统信息,syslog涉及的服务主要有以下这些:

    服 务 类 型 说 明
    auth(authpriv) 与认证有关的机制,例如login,ssh,su等需要账号密码
    cron 例行工作调度,cron/at等生成信息日志的地方
    daemon 与这个daemon有关的信息
    kern 内核产生的信息
    lpr 打印相关的信息
    mail 只要与邮件有关的信息都记录在这里
    news 与新闻组服务器有关的东西
    syslog syslogd本身生成的信息
    user,uucp,local0-local7 与Unix-Like机器本身有关的一些信息

    对配置文件的几点说明:

    ● 日志类型和优先级由点号(.)分开,例如 kern.debug 表示由内核产生的调试信息
    ● kern.debug 的优先级大于 debug
    ● 星号(*)表示所有,例如 .debug 表示所有类型的调试信息,kern. 表示由内核产生的所有消息
    ● 可以使用逗号(,)分隔多个日志类型,使用分号(;)分隔多个选择器

    对日志的操作包括:

    ● 将日志输出到文件,例如 /var/log/maillog 或 /dev/console
    ● 将消息发送给用户,多个用户用逗号(,)分隔,例如 root,amrood
    ● 通过管道将消息发送给用户程序,注意程序要放在管道符(|)后面
    ● 将消息发送给其他主机上的 syslog 进程,这时 /etc/syslog.conf文件后面一列为以@开头的主机名(IP)

    [信息等级]

    同一个服务所产生的信息也是有差别的,有启动时仅通知系统而已的一般信息(information),有出现还不至于影响到正常运行的警告信息 (warn),还有系统硬件发生严重错误时,所产生的重大问题信息(error),基本上syslog将信息分为七个主要的等级,依序是这样的(由不重要排列到重要信息等级).

    等 级 信 息 说 明
    debug 一般调试信息
    info 基本通知信息
    notice 普通通知信息
    warning(warn) 警告信息,但不影响正常使用
    err(error) 错误信息,可能影响系统服务
    crit 比错误信息还严重的错误信息
    alert 警告,比crit还严重的警告
    emerg(panic) 疼痛等级,系统已经完蛋了
    * 代表所有日志等级

    好了,上面的介绍足够生产环境的使用啦,如果想配置自定义日志位置,我想你能够搞定了.

    SYSlog日志服务器配置

    想像一个环境,你的办公室内有一百台 Linux 主机,每一台负责一个网络服务,你为了要了解每台主机的状态,因此你常常需要登陆这一百主机去检查你的日志文件,想想是不是很骚,幸好我们的日志服务可以集中管理,这样我们只需要一台服务器当作日志服务器,其他客户端主动同步数据就好啦,是不是很方便啊.

    我们的RHEL系统,默认的syslog本身就已经具有这个日志文件服务器的功能了,只是默认并没有启动该功能而已,既然是日志服务器那么我们的 Linux 主机当然会启动一个端口来监听了,那个默认的端口就是 UDP 的 514 啊.

    ◆接收端配置◆

    1.首先编辑日志服务器的配置文件,开启相应的注释,此处既可以使用TCP也可以使用UDP,两者都可.

    [root@localhost ~]# vim /etc/rsyslog.conf
    
     14 # Provides UDP syslog reception
     15 $ModLoad imudp                  #此处我们开启UDP的即可
     16 $UDPServerRun 514
     17
     18 # Provides TCP syslog reception
     19 #$ModLoad imtcp
     20 #$InputTCPServerRun 514
    

    2.重启日志服务器,即可配置完成

    [root@localhost ~]# systemctl restart rsyslog
    [root@localhost ~]# systemctl status rsyslog
    
    ● rsyslog.service - System Logging Service
       Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2018-11-28 10:33:26 EST; 6s ago
         Docs: man:rsyslogd(8)
               http://www.rsyslog.com/doc/
     Main PID: 13746 (rsyslogd)
       CGroup: /system.slice/rsyslog.service
               └─13746 /usr/sbin/rsyslogd -n
    

    通过这个简单的操作,你的 Linux 主机已经可以接收来自其他主机的日志文件了,这里还要进行防火墙的规则放行制定端口,此处略过.

    ◆发送端配置◆

    至于发送端的配置就简单多了,只要指定某个信息传送到这部主机即可,举例来说,我们的日志服务器 IP=192.168.1.10 ,而客户端希望所有的数据都送给主机,我们可以进行一下操作.

    1.修改日志配置文件,添加以下数据,保存退出即可.

     90 #*.* @@remote-host:514
     91 # ### end of the forwarding rule ###
     92
     93 *.* @192.168.1.10
    
    注意:可以使用 UDP 用一个@
         可以使用 TCP 用两个@@
    

    2.重启日志工具,即可配置完成

    [root@localhost ~]# systemctl restart rsyslog
    [root@localhost ~]# systemctl status rsyslog
    
    ● rsyslog.service - System Logging Service
       Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
       Active: active (running) since Wed 2018-11-28 10:33:26 EST; 6s ago
         Docs: man:rsyslogd(8)
               http://www.rsyslog.com/doc/
     Main PID: 13746 (rsyslogd)
       CGroup: /system.slice/rsyslog.service
               └─13746 /usr/sbin/rsyslogd -n
    

    SYSlog日志的轮替功能

    syslog 利用的是 daemon 的方式来启动的,当有需求的时候立刻就会被运行的,但是 logrotate 却是在规定的时间到了之后才来进行日志文件的轮替,所以这个 logrotate 程序当然就是挂在 cron 底下进行的,仔细看一下 /etc/cron.daily/里面的文件,/etc/cron.daily/logrotate 就是记录了每天要进行的日志文件轮替的行为啦.

    一般情况下,日志的轮替会用到两个配置文件,分别是 /etc/logrotate.conf/etc/logrotate.d/ 这两个目录,首先我们来看一下,/etc/logrotate.conf这个文件里的内容吧.

    [root@localhost ~]# cat /etc/logrotate.conf
    
    weekly                     #默认每个礼拜进行轮询
    rotate 4                   #保留几个日志文件
    create                     #日志文件被重命名,新建日志文件存储
    dateext
    #compress                  #压缩轮询后的日志
    include /etc/logrotate.d   #导入其他日志配置文件
    
    /var/log/wtmp {            #针对/var/log/wtmp所设置的参数
        monthly                #每月轮替
        create 0664 root utmp  #指定新建文件的权限,以及所有者和所属组
            minsize 1M         #大于1M后轮询
        rotate 1               #仅保留一个wtmp.1而已
    }
    
    /var/log/btmp {
        missingok
        monthly
        create 0600 root utmp
        rotate 1
    }
    

    其他的常用格式如下,我们可以自行自由发挥的.

    参 数 信 息 说 明
    daily 每天轮替
    weekly 每周轮替
    monthly 每月轮替
    rotate 数字 保留日志文件个数
    compress 旧日志启用压缩
    mail address 轮替时发送邮件提示
    missingok 日志不存在忽略警告
    notifempty 日志为空不进行轮替
    minsize 大小 日志轮替最小值
    size 大小 多大进行轮替
    dateext 使用日期格式后缀 secure-20181010

    系统自动定期进行日志轮替的原因:

    1./etc/cron.daily/有一个脚本,每天都会运行,查看是否有符合轮替的日志,然后进行相应处理
    2.我们尝试在rsyslog配置文件中添加自己的日志记录,然后并且强制执行轮替,看会不会产生轮替文件
    3.先在配置文件中写入自己的日志轮替规则
    4.强制执行日志轮替logrotate –vf /etc/logrotate.conf

    参考文献:Linux鸟哥私房菜,Linux运维之道

  • 相关阅读:
    Git 基础
    SharePoint 2013 对象模型操作"网站设置"菜单
    SharePoint 2013 隐藏部分Ribbon菜单
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 设置自定义布局页
    SharePoint 2013 "通知我"功能简介
    SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
    SharePoint 禁用本地回环的两个方法
  • 原文地址:https://www.cnblogs.com/LyShark/p/10221821.html
Copyright © 2011-2022 走看看