zoukankan      html  css  js  c++  java
  • linux备忘录-日志档案

    linux的日志档案

    linux的日志档案记录系统或程序在运行过程中产生的一些信息,例如事件的记录,错误的记录等等。特别是在发生错误时,我们可以通过日志档案找到错误发生的根源,例如当我们无法启动邮件服务器时(sendmail服务),我们可以查询一下它的日志档案/var/log/maillog

    Linux中常见的日志档案

    1. /var/log/cron

    记录crontab排程的信息。

    1. /var/log/dmesg

    记录开机时核心侦测过程中所产生的各项信息。

    1. /var/log/lastlog

    记录系统上所有账号最近一次登入系统的相关信息。

    1. /var/log/maillog/var/log/mail/*

    记录邮件的往来信息,主要是记录sendmail(STMP协议提供者)和dovecot(POP3协议提供者)服务所产生的信息。

    1. /var/log/messages

    系统发生的错误信息或重要信息都会记录在此。

    1. /var/log/secure

    基本上,需要输入账号密码的软件在登入时都会把信息记录在此。

    1. /var/log/wtmp/var/log/faillog

    记录正确登入系统这的账户信息(wtmp),和错误登录系统的账户信息(faillog)

    1. /var/log/httpd/*/var/log/news/*/var/log/samba/*

    对应的网络服务记录的日志档案

    系统日志所需要的服务

    1. syslogd

    记录登录系统与网络服务等信息

    1. klogd

    记录登录核心产生的各种信息

    1. logrotate

    主要进制日子文件的轮替功能

    syslogd 记录日志文件的服务

    在Ubuntu这个发行版中,syslogd这个服务被扩展成了rsyslogd。相应的配置文件则变成了/etc/rsyslog.conf

    通过pschkconfig可以查看该服务是否有启动且是否有开机启动。

    # 查看syslogd是否有启动
    ps aux | grep 'syslog'
    # ps aux | grep 'syslog' | grep -v 'grep'
    
    # 查看syslogd是否有开机启动
    chkconfig --list syslogd
    

    syslogd会记录的内容

    系统产生的信息经过syslogd记录下来后,一般会记录下面内容

    1. 事件发生的日期和时间
    2. 发生此时间的主机名
    3. 启动此时间的服务名称(如 samba,xinetd等)或函数库(如 libpam)
    4. 信息的实际数据内容

    例如对于登录时记录账户信息的/var/log/secure,其记录的信息格式为

    日期/时间 HostName 服务与相关函数 信息说明

    syslogd服务的 配置文件

    syslogd这支服务的配置文件为 /etc/syslog.conf。该配置文件规定了

    1. 什么样的服务
    2. 记录什么等级的信息
    3. 信息记录到哪里

    /etc/syslog.conf的格式大致为

    # 服务名称[.=!]信息等级    信息记录的文件名或装置或主机
    # 例如mail这个服务产生的info等级信息
    mail.info    /var/log/maillog_info
    
    # 服务名称 (可以使用 man 3 syslog查询) syslog规范的一些服务,都是syslog规定的一些名称,许多程序都归类到这些名称中
    #     auth 与认证有关,如login,ssh,su等需要账号密码的东西
    #     cron 工作排程cron/at等产生信息记录的地方
    #     daemon 与daemon有关的信息
    #     kern 核心产生的信息
    #     lpr 打印相关的信息
    #     mail 邮件相关信息
    #     news 新闻组服务器有关的信息
    #     syslog syslogd程序自身产生的信息
    #     uer,uucp,local0~local7 与unix like机器本身有关的信息
    # 信息等级,分为7种,从不重要到重要为
    #     info 基本的信息说明
    #     notice 
    #     warning (warn) 警告信息,可能有问题
    #     err 错误信息
    #     crit 严重的错误信息
    #     alert 警告警告
    #     emerg 很严重的错误信息
    #     none 都不记录
    # [符号.=!]
    #     . 比后面还要高的等级都要记录下来
    #     .= 只记录后面的等级
    #     .! 除了该等级之外的等级信息
    # 信息记录的文件名或装置或主机
    #     档案的绝对路径 通常是/var/log/里的档案
    #     打印机或其他 /dev/lp0
    #     使用者名称 显示给用户
    #     远程主机 例如@www.vbrid.tsai,要求对方主机支持
    #     * 目前在线的所有人
    
    # 例子
    mail.info    /var/log/maillog
    news.*;cron.*    /var/log/cronnews
    news.=warn;cron.=warn    /var/log/cronnews.warn
    
    *.*;news,cron,mail.none    /var/log/messages
    *.*;news.none.cron.none;mai.none    /var/log/messages
    

    自行增加日志文档

    如果我们有一些自身的需求,需要将信息记录在特定的文档当中,则需要按照下面的做法

    # 先进行/etc/syslog.conf配置
    vim /etc/syslog.conf
    # 添加
    *.info    /var/log/admin.log # 自身的需求
    
    # 重新启动syslog服务
    /etc/init.d/syslog restart
    

    日志档案的安全问题

    放置日志档案被删除

    通过档案的特殊属性可以实现一些档案的特殊需求。例如令档案只能读取,而不能进行其他操作。通过lsattrchattr这两个命令可以处理档案的这种特殊属性。

    特殊属性的 i 使得档案不能删掉,不能新增数据。
    特殊属性的 a 只能添加数据,不能删除

    例如

    # 给/var/log/messages添加特殊属性a
    chattr +a /var/log/messages
    lsattr /vat/log/messages
    # 去掉特殊属性
    chattr -a /var/log/messages
    

    日志档案服务器

    syslog这个程序自身已经拥有一个日志档案服务器,只不过这个服务器默认是没有开启的。如果开启了这个日志服务器,则该服务会在UDP的端口514进行监听。

    让syslogd接受其他主机的日志信息

    对于server端

    1. 修改syslogd的配置文件
    vim /etc/sysconfig/syslog
    # 将下行
    SYSLOG_OPTIONS="-m 0"
    # 修改成
    SYSLOG_OPTIONS="-m 0 -r"
    
    1. 重新启动syslogd,并观察
    /etc/init.d/syslog restart
    netstat -lunp | grep syslog
    

    对于client端,我们只需要指定信息传送给主机即可。

    vim /etc/syslog.conf
    # 添加
    *.*  @192.168.1.100
    
    # 然后重启syslog
    

    日志档案的轮替 logrotate

    logrotate的功能是将就的日志档案移动成旧档案,并且重新建立新的空档案来记录。syslog是通过daemon的方式运行的,而logrotate是通过任务排程cron的方式运行的。logrotate的排程配置在/etc/cron.daily档案中,即logrotate每天都要进行日志档案的轮替。

    logrotate的配置文件

    logrotate的配置主要是记录 在什么状态下才进行日志档案的轮替。其主要的配置文件有

    1. /etc/logrotate.conf (这是logrotate的主要配置文件)
    2. /etc/logrotate.d/* (该目录中的档案都会被读入/etc/logrotate.conf)

    logrotate的配置内容为

    # 查看/etc/logrotate.conf的内容
    vim /etc/logrotate.conf 
    # 下面是logrotate配置的默认值
    
    weekly  # 预设每个礼拜进行一次rotate工作
    rotate 4  # 保留4个日志档案
    create  # rotate时建立新的档案进行记录
    #compress  # 被rotate的日志档案是否需要压缩,大部分系统不需要compress
    
    include /etc/logrotate.d
    # 将/etc/logrotate.d/中的所有档案都读进来
    
    /var/log/wtmp{  # 仅针对/var/log/wtmp进行的设定
        monthly  # 一个月一次rotate
        minsize 1M  # 日志档案超过1M才进行rotate
        create 0664 root utmp  # 指定新档案建立时的权限、所属账号、所属群组
        rotate 1  # 只保留一份
    }
    # wtmp 主要记录登入者 和 系统重新启动时的时间 和来源主机 和登入时间
    

    对于syslog这个服务,其日志档案的轮替配置为

    # 打开/etc/logrotate.d/syslog
    vim /etc/logrotate.d/syslog
    
    /var/log/messages /var/log/secure /var/log/maillog 
    /var/log/spooler /var/log/boot.log /var/log/cron{
        sharedscripts
        postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
        /bin/kill -HUP 'car /var/run/rsyslogd.pid 2> /dev/null' 2> /dev/null || true
        endscript
    }
    
    # 可以通过 sharescrpts 和 endscript的组合 呼叫外部指令下达
    # 呼叫指令的时间通过下面指定
    #   prerotate 在rotate之前执行
    #   postrotate 在rotate之后执行,例如重新启动服务 kill -HUP
    #   这两个时间设定对于已经有特殊权限的日志档案来说十分重要。
    
    # 上面在rotate后,取得syslogd的pid后,重新启动syslogd服务 /bin/kill -HUP
    
    # 对于已经加上特殊权限 +a 的情况,可以这么处理
    /var/log/messages /var/log/secure /var/log/maillog 
    /var/log/spooler /var/log/boot.log /var/log/cron{
        sharedscripts
        prerotate
        /usr/bin/chattr -a /var/log/messages    # rotate前去掉a特殊属性
        endscript
        sharedscripts
        postrotate
        /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
        /bin/kill -HUP 'car /var/run/rsyslogd.pid 2> /dev/null' 2> /dev/null || true
        /usr/bin/chattr +a /var/log/message     # rotate后,重新加上a特殊属性
        endscript
    }
    

    执行logrotate进行测试

    logrotate [-vf] logfile
    # 选项和参数
    # -v 显示logrotate的运作过程
    # -f 强制进行rotate工作
    
    # 例子
    logrotate -v /etc/logrotate.conf
    
    

    自定义日志档案的轮替功能

    对于之前自定义设置的日志档案/var/log/admin.log,进行下面的轮替配置

    # 1. 先添加+a特殊属性
    chattr +a /var/log/admin.log
    lsattr /var/log/admin.log
    
    # 2. 配置logrotate配置文件
    #    在/etc/logrotate.d/下建立一个档案为admin
    vi /etc/logrotate.d/admin
    # 配置内容如下
    /var/log/admin.log{
        monthly  # 一个月一次rotate工作
        size=10M  # 档案大小大于10M就开始rotate
        rotate 5  # 保留五份日志档案
        compress  # 进行压缩
        sharedscripts
        prerotate
        /usr/bin/chattr -a /var/log/admin.log
        endscript
        sharedscripts
        postrotate
        /usr/bin/killall -HUP syslogd
        /usr/bin/chattr +a /var/log/admin.log
        endscript
    }
    
    # 3. 测试logrotate
    logrotate -v /etc/logrotate.conf
    #    测试强制rotate
    logrotate -vf /etc/logrotate.conf
    lsattr /var/log/admin.log*
    

    分析日志档案

    日志档案的分析时什么重要的,它可以帮我们及时找出系统出现的问题。向 last, lastlog, dmesg等命令都可以查询一些日志档案信息。同时,系统一般也会提供一个logwatch的日志档案分析程序,从而能够较为方便地进行日志档案的分析工作。

    日志档案分析程序 logwatch

    logwatch 会每天分析一次日志档案,并将数据用email的方式发送给root用户。

    自己写日志档案分析工具

    如果我们有自己的日志档案分析需求,我们可以自己写一个分析工具,并将分析工具注册到crontab中,就可以实现周期性的日志档案分析,同时也可以像logwatch一样通过email的方式发送分析结果。

    命令

    1. logrotate (日志档案轮替)
    logrotate [-vf] logfile
    # 选项和参数
    # -v 显示logrotate的运作过程
    # -f 强制进行rotate工作
    
    # 例子
    logrotate -v /etc/logrotate.conf
    
    
  • 相关阅读:
    在多个游戏视图间切换实现效果
    Animator窗口视图Project视图PlayerIdleAnimation和PlayerWalkingAnimation
    Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
    Delphi-网络编程-UDP聊天程序(转)
    Delphi 编程进阶
    Android自定义控件(状态提示图表) (转)
    74HC166与TPIC6A595分析(转)
    基于STM32的USB枚举过程学习笔记
    USB那点事3 -使用端口2作为custom HID的传输(转)
    STM32-USB那点事
  • 原文地址:https://www.cnblogs.com/smallpi/p/7403667.html
Copyright © 2011-2022 走看看