27.Linux系统中的日志文件

日志的作用、分类、管理、轮转和级别

日志的作用:
    用于记录系统、程序运行中发生的各种事件
    通过阅读日志,有助于诊断,解决系统故障

日志文件的分类:
    内核及系统日志:由系统服务 rsyslog 统一管理,日志格式相似
    用户日志:记录系统用户登录及退出系统的相关信息
    程序日志:由各种应用程序独立管理的日志文件,格式不统一

日志管理策略:
    日志也并不是完全可靠的,高级的黑客在入侵系统后,会删除相应的日志记录,因此需要做好日志的管理工作
    (1)日志的备份和归档
    (2)延长日志的保存期限
    (3)控制日志的访问权限
    (4)集中管理日志,比如,将服务器的日志文件发送到统一到日志文件服务器,这样便于日志信息的统一收集、整理和分析,还可以杜绝日志信息的意外丢失、恶意修改和删除

日志的轮转和切割:
    随着时间的推移,日志文件肯定会越来越大,而且这个趋势是呈线性增长。
    所以,需要对之前的日志文件做一些处理。
    日志轮转和切割指的是实现对当前日志归档,开始新的日志,删除早期的日志。
    Linux中,日志轮转和切割这个服务是由 logrotate 提供的。
    logrotate这个程序的目录:/etc/cron.daily/logrotate  
    logrotate是作为corn的一个每日任务,周期性执行的。
    它具备自动轮转、压缩、搬迁 和 邮件通知到日志系统的多项功能。
    每一个日志文件都可以按照每天、每周、每月周期性处理,或是增长到多大而触发处理。

日志消息的级别:
    0 emerg 紧急
    1 alert 警告
    2 crit  严重
    3 err 错误
    4 warning 提醒
    5 notice 注意
    6 info 注意
    7 debug 调试

rsyslog服务:
    rsyslog服务是由rsyslogd程序提供的。
    rsyslogd程序负责收集和管理与系统有关的日志
    程序目录:/sbin/rsyslogd  
    rsyslogd配置文件所在目录:/etc/rsyslog.conf 
    rsyslogd相关文件:/etc/sysconfig/rsyslog  
    和日志轮转(切割)相关文件:/etc/logrotate.d/syslog

    系统中的程序,在收集日志的时候,都是调用 syslog() 函数,这个函数的作用是发送日志消息给系统的 logger,
    然后由logger根据rsyslogd程序的配置文件/etc/rsyslog.conf中的规则,将日志消息按照不同的格式写入不同的文件中。
    syslog() 函数内部有不同的设备,不同的程序有可能对应相同的设备,也有可能对应不同的设备。
    通过 man 3 syslog  可查看syslog中的不同设备和不同预警级别。
    程序所对应的设备大部分不可修改,都已经编译好。但是有的程序的配置文件中允许修改设备。
    比如sshd程序,在其配置文件 /etc/ssh/sshd_config 中可修改设备。LOCAL0 ~ LOCAL6 是自定义设备。
    不建议修改程序所对应的默认设备。程序所对应的设备这个不是我们所关心的,是开发者已经配置好的。
    rsyslogd 中有不同的规则,指定了不同的设备的不同预警级别对应的不同文件。
    logger 就是根据  rsyslogd 中的规则进行日志写入。
    rsyslogd 中的规则我们自己可以定义修改增加。
    所以如果我们关闭 rsyslogd 程序的话,logger就不知道该将日志文件写入哪里,所以就会产生错误。

一些程序所对应的设备:
    程序 Program            设备 Facility
    /usr/sbin/sshd            LOG_AUTHPRIV
    /usr/bin/su                LOG_AUTHPRIV
    /usr/bin/login            LOG_AUTHPRIV
    /usr/sbin/vsftpd        LOG_FTP
    /usr/bin/at                LOG_CRON
    /usr/sbin/crond            LOG_CRON
    /usr/sbin/portfix        LOG_MAIL

rsyslogd的配置文件 /etc/rsyslog.conf 中的一些规则
    设备 Facility 和 级别                                                    对应的文件
    *.info; mail.none; authpriv.none; cron.none (任何设备的这些级别)        /var/log/messages
    authpriv.*  (authpriv设备的所有级别)                                    /var/log/secure
    mail.* (mail设备的所有级别)                                                /var/log/maillog
    cron.*  (cron设备的所有级别)                                            /var/log/cron
    *.emery (所有设备的emery级别)                                            :omusrmsg:*   (打印到终端)
    local0.*   ~  local6.*                                                    自己可定义文件

但是像我们很多自己的应用,不是由 rsyslogd进程收集和管理日志,因为他们不调用 syslog()函数。比如apache、nginx、mysql、httpd 都有自己的日志进程负责收集和管理日志。
    常见的日志文件目录:
    名称                                路径
    内核、公共消息日志、系统主日志文件                        /var/log/messages
    用户登录日志                                            /var/log/secure 
    计划任务日志                                            /var/log/cron
    跟yum安装有关                                            /var/log/yum.log
    系统引导日志                                            /var/log/dmesg
    邮件系统日志,跟postfix有关                                /var/log/maillog
    当前登录的用户,二进制文件,可用 w 查看                    /var/log/wtmp
    最近登录的用户 , 二进制文件  ,可用 last 查看            /var/log/btmp
    所有用户的登录情况,二进制文件,可用 lastlog 查看        /var/log/lastlog

关于筛选用户登陆错误的日志消息命令:
    grep 'Fail' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -k1 -n -r | head -5    
        # 查看登录失败的那一行,然后打印出第11列(从后数), 然后排序,然后去除重复,然后按第一列排序 ,然后查看前五个

Journal守护进程:
    在Rhel7中,syslog 消息除了由 rsyslog 服务处理外,还新加了一个 journal 监听,日志文件在 /run/log/journal 目录中。
    systemd-journald 守护进程提供了一个改进的日志管理服务。
    在使用其它工具时,日志往往被分散在整套系统当中,由不同的守护进程及进程负责处理,这意味着我们很难跨越多种应用程序对其内容进行解读。
    而 systemd 尝试提供一套集中化管理方案,从而统一打理全部内核及用户级进程的日志信息,这也就是我们journal。
    这套系统能够收集并管理日志内容,它从内核中收集消息:启动过程的早期阶段、标准输出和守护进程的错误。
    当它们启动和运行时,以及 syslog ,它将这些消息写入到结构化的事件日志。
    syslog消息也由 systemd-journald 转发到 rsyslog 服务,然后按类型(或设备)和优先级对消息进行排序,并将他们写入到 /var/log/ 日志目录中的持久文件中。
    但是,我们的 /run/log/journal 目录下的日志信息并不能直接查看,该文件是二进制文件,需要借助命令查看

    journal日志的查看命令:
        journalctl                             显示所有的日志信息
        journalctl  -n  10                    显示最近10条的日志信息
        journalctl  -u   nginx.service       查看nginx服务的日志自信息
        journalctl  _PID=1234                查看PID进程为1234的日志信息
        journalctl  _UID=0                    查看UDI为0的用户的日志信息
        journalctl  /usr/bin/bash              查看指定路径可执行文件的日志信息
        journalctl  --since  today             查看今天以来的日志的信息

——————————————————————————————————————————————————————————————————————————————————————————

日志分析:
    Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。
    大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d
    默认配置文件为 /etc/syslog.conf 或 rsyslog.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子系统。

常用日志文件
    系统日志是由一个名为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/auth.log 或 /var/log/secure 存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。
    Ubuntu 和 Debian 在 /var/log/auth.log 中存储认证信息,而 RedHat 和 CentOS 则在 /var/log/secure 中存储该信息。

/var/log/syslog:
    默认不生成该日志文件,但可以配置/etc/syslog.conf让系统生成该日志文件。
    它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。
    要让系统生成该日志文件,在/etc/rsyslog.conf文件中加上:*.warning /var/log/syslog 
    该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息。
    该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。
    在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。
    如果某用户从来没有登录过,就显示为"**Never logged in**"。该命令只能以root权限执行。简单地输入lastlog命令后就会看到信息:

/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使用。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值