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运维之道

  • 相关阅读:
    2016年11-29 mysql数据库
    2016年11月25日网页项目知识
    11月22日 网页项目遇到知识
    2016年11月15
    document操作
    2016年11月8日 函数
    2016年11月7日 数组练习
    2016年11月6日数组
    2016年11月4日运算符与语句
    2016年11月3日JS脚本简介数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6.布尔型数据:bool 7.对象类型:object 8.二进制:binary 语言类型: 1.强类型语言:c++ c c# java 2.弱类型语
  • 原文地址:https://www.cnblogs.com/LyShark/p/10221821.html
Copyright © 2011-2022 走看看