• 学会看日志文件处理问题


    rsyslog是一个进程,是一个命令。管理日志的。–》系统日志记录器
    它有一个配置文件:/etc/rsyslog.conf
    自己创建日志时,要修改该配置文件。

    日志的作用:

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

    日志文件的分类:

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

    日志记录的一般格式:

    时间标签 主机名 子系统名 消息字段

    这里写图片描述

    /var/log –》此目录下有很多的日志文件。
    eg:tailf /var/log/cron –》监听cron命令的日志文件的末尾五行。

    相应的应用程序独立进行管理的日志文件:

    • Web服务:/var/log/httpd/
      • access_log、error_log
    • 代理服务:/var/log/squid/
      • access.log、cache.log、squid.out、store.log
    • FTP服务:/var/log/xferlog
      等等

    保存了用户登录、退出等信息的日志文件:

    • /var/log/lastlog:最近的用户登录事件
    • /var/log/wtmp:用户登录、注销及系统开、关机事件
    • /var/run/utmp:当前登录的每个用户的详细信息
    • /var/log/secure:与用户验证相关的安全性事件

    用户登录分析:

    • who、w、user、last、ac、lastlog等命令,其中:
      • last 最近登录系统的用户;
      • lastlog 查看所有的用户的登录信息

    日志分析工具:

    • 文本查看、grep过滤检索、Webmin管理套件中查看
    • awk、sed等文本过滤、格式化编辑工具
    • Webalizer、Awstats等专用日志分析工具
    • 其他市面上的商业日志分析工具等

    syslog系统日志

    syslog系统日志/etc/syslog.conf
    由系统服务syslogd 统一管理:

    • 软件包:sysklogd-1.4.1-29.2
    • 主要程序:/sbin/klogd、/sbin/syslogd
    • 系统日志的配置文件:/etc/syslog.conf

    这里写图片描述
    (设备类别.日志级别 消息发送到的文件)
    (像cron级别的日志文件,都写到/var/log/cron里面去。)
    设备类别[连接符]日志级别:

    • . 记录大于等于后面的级别日志
    • .=只记录等于后面的级别日志
    • .!=只记录不等于后面的级别日志

    消息发送位置:

    • 本地文件:通常就是文件的绝对路径
    • 打印机:例如 /dev/lp0 这个打印机装置
    • 用户名称:显示给用户
    • 远程主机:例如 @202.100.100.1
    • *:所有在线的人

    系统日志保存位置:默认为/var/log目录下

    主要日志文件介绍:

    • 内核及公共消息日志:/var/log/messages
    • 计划任务日志:/var/log/cron
    • 系统引导日志:/var/log/dmesg
    • 邮件系统日志:/var/log/maillog
    • 错误登录日志:/var/log/faillog

    用户运行过的进程分析工具:

    • accton、lastcomm
    • sa:报告、清理和维护进程统计文件。

    例子:

    # accton /var/account/pacct --》启用统计
    # lastcomm --user root    --》查看统计
    lastcomm                root     pts/2      0.00 secs Thu Jul 28 21:22
    lastcomm                root     pts/2      0.00 secs Thu Jul 28 21:22
    accton            S     root     pts/2      0.00 secs Thu Jul 28 21:22
    #accton    --》关闭统计

    PS:
    配置文件和程序的关系:
    配置文件为程序传递参数,告诉程序要做什么,或者哪些做,哪些不做等信息。

    日志消息的级别loglevel(记住!)

    • 0 EMERG(紧急):会导致主机系统不可用的情况 emergencies(零,最严重!!)
    • 1 ALERT(警告):必须马上采取措施解决的问题 alert
    • 2 CRIT(严重):比较严重的情况 critical
    • 3 ERR(错误):运行出现错误 error
    • 4 WARNING(提醒):可能会影响系统功能的事件
    • 5 NOTICE(注意):不会影响系统但值得注意
    • 6 INFO(信息):一般信息 information
    • 7 DEBUG(调试):程序或系统调试信息等
    • 8 none 没有优先级,不记录任何日志消息。

    日志的设备类型:SyslogFacility

    • mail 邮件日志
    • cron 计划任务日志
    • authpriv 用户认证时产生的日志,如login命令、su命令。
    • local0–local7 由自定义程序使用。
    • news 网络新闻传输协议(nntp)产生的消息。
    • user 用户进程。
    • kern 系统内核消息。 kernel
    • daemon 某些守护

    /var/log/下面的日志文件

    • messages —>默认情况下会记录所有的日志信息
    • secure —》安全认证相关的日志(ssh、useradd、passwd)
    • dmesg —》系统在启动的过程中加载了那些内核模块的信息,对一些硬件的识别加载的驱动等信息。kernel启动的过程中的信息
    • boot.log —》启动系统的过程之中出现的问题和正常的情况
    • maillog —》与发邮件相关的日志
    • lastlog —》记录最近登录过系统的用户的信息 last
    • cron —》计划任务
    • httpd —》独立的目录,记录httpd进程产生相关的日志
    • nginx —》独立的目录,记录nginx进程产生的相关的日志
    • mysqld.log —》mysql的日志
    • yum.log —》yum的日志
    • xferlog —-》ftp的日志
    • wtmp —》lastlog 查看所有的用户的登录信息

    主动记录日志工具:logger:从命令行直接向系统日志文件写入一行信息

    # ping -c2 172.16.70.7|logger -i(ping命令的pid号)-t (信息)"This is a test" -p authpriv.info(设备类型)
    # tail -5 /var/log/secure
    Jul 28 21:26:20 localhost This is a test[5623]: 64 bytes from 172.16.70.7: icmp_seq=2 ttl=64 time=0.178 ms
    Jul 28 21:26:20 localhost This is a test[5623]: 
    Jul 28 21:26:20 localhost This is a test[5623]: --- 172.16.70.7 ping statistics ---
    Jul 28 21:26:20 localhost This is a test[5623]: 2 packets transmitted, 2 received, 0% packet loss, time 1000ms
    Jul 28 21:26:20 localhost This is a test[5623]: rtt min/avg/max/mdev = 0.166/0.172/0.178/0.006 ms

    自己写脚本实现记录日志的功能

    ①修改 /etc/rsyslog.conf 文件
    在#Save boot messages also to boot.log下面添加东西。
    这里写图片描述
    ②刷新服务#service rsyslog restart
    (刷新rsyslog服务后,就会发现在/var/log/下面出现了shell_monitor.log文件!)
    (但是里面没有东西!)
    ③脚本的内容

    #vim /var/log/monitor.sh
    if service httpd status &>/dev/null
    then
        echo "httpd is running"|logger  -t(信息) "httpd01_server"-p(设备类型号) local6.info        
    (把echo的内容传递给logger)
    else
        service httpd start &>/dev/null
        echo "httpd is star"| logger -t "httpd01_server" -p local6.info
    fi

    ④#bash monitor.sh #执行脚本

    #cat shell_monitor.log    #查看自己定义的日志文件

    这里写图片描述
    (发现里面有内容了!)(输出的时候,先显示-t的,再显示前面echo的内容)

    日志轮转功能 logrotate

    方便有效的管理日志,防止日志文件过大
    日志轮转命令:logrotate
    日志轮转主要配置文件:/etc/logrotate.conf

    • 配合一个配置文件,再加上计划任务,每天执行一次来达到循环的效果;
    • 好处:总保留最近最新的日志。

    日志轮转主要配置文件:/etc/logrotate.conf (主配置文件)

    # cat /etc/logrotate.conf |grep -v ^#|grep -v ^$ (删除注释行和空行)
    --》查看日志轮转配置文件的内容
    weekly    --》每周一次
    rotate 4    --》保留4个备份的日志文件
    create    --》创建新的空的日志文件
    dateext    --》以日期做后缀
    include /etc/logrotate.d    --》次要配置文件都存放在次目录下
    /var/log/wtmp {    --》(单独针对wtmp的)
        monthly
        create 0664 root utmp    --》创建文件的时候,指定权限和属组、属主
        minsize 1M    --》大于1M才轮转日志
        rotate 1    --》保留1个备份日志
    }
    /var/log/btmp {    --》针对btmp的
        missingok    --》如果某文件没丢失,做什么
        monthly
        create 0600 root utmp
        rotate 1
    }

    PS:
    没有单独的日志文件,在轮转的时候,参考/etc/logrotate.conf里面的配置。
    同时如果有单独的日志文件,但是里面有些配置没有,也会参考主配置文件里的内容。—》单独配置文件里没有的配置项,参考主配置文件公共的配置项,建议写到主配置文件里,各个日志文件根据自身的特点,可以单独写一些配置。

    日志轮转是怎么实现的?

    日志轮转,依赖cron计划任务的每天执行的任务来完成轮转的。
    系统把日志轮转的脚本logrotate放在/etc/cron.daily目录下

    这里写图片描述

    mysqld日志轮转文件

    #vim /etc/logrotate.d/mysqld

    vim /etc/rsyslog.conf

    ①local6.* /var/log/mysqld.log

    • 指定目录的日志设备类型是local6
    • 消息级别是,记录到/var/log/mysqld.log
    • 主要是告诉rsyslog进程去记录,至于mysqld进程是否采用rsyslog进程去记录日志,取决于mysqld进程。
    • mysqld进程也许没有采用rsyslog进程去帮助记录日志,它自己有独立的进程去实现日志的记录功能。

    ②#service rsyslog restart –》刷新服务,让配置文件生效。

    #vim httpd
    /var/log/httpd/*log {    --》指定轮转的日志文件,具体如何轮转,看大括号里的内容!
        missingok    --》日志文件不存在的时候,继续进行,不报错。
        notifempty    --》若日志文件为空,不轮转(not if empty)
        sharedscripts    --》配合prerotate和postrotate使用
        delaycompress    --》推迟压缩
        postrotate   --》轮转后执行下面的命令
               /sbin/service httpd reload > /dev/null 2>/dev/null || true
        endscript
    }

    多个日志文件使用一套轮转方法:

    内核及公共消息日志:/var/log/messages
    计划任务日志:/var/log/cron
    邮件系统日志:/var/log/maillog
    /var/log/secure
    /var/log/spooler
    {
    sharedscripts
    postrotate
    /bin/kill -HUP cat /var/run/syslogd.pid 2>/dev/null 2>/dev/null || true
    endscript
    }

    #
    #########怎么让日志轮转(全)

    ①(添加设备类型、消息级别和消息发送目录到)/etc/rsyslog.conf
    local6.info /var/log/liupeng
    这里写图片描述
    ②刷新服务#service rsyslog restart
    ③日志脚本的内容:(脚本放在哪里都行)

    #cat /lianxi/liupeng.sh
    #!/bin/bash
    if service mysqld status &>/dev/null
    then
         echo "mysqld is running~"|logger -it "mysqld is started!" -p local6.info
      (这是输出的内容,也会写到日志)           (这是写到日志的内容)
    else
         service httpd start &>/dev/null
         echo "mysqld is start"|logger -it "mysqld start for you!" -p local6.info
    fi
    #bash  /lianxi/liupeng.sh

    (执行脚本后,会看到在/var/log/liupeng.log文件里面生成了内容。)

    这里写图片描述

    ④进入/etc/logrorate目录,添加轮转日志配置文件liupeng:

    #cd /etc/logrotate.d
    #vim liupeng
    /var/log/liupeng.log {    --》指定轮转的日志文件,具体如何轮转,看大括号里的内容! 
          rotate 4  --》保留4个
          weekly     --》每周轮转一次
          create    --》创建新的空的日志文件
          dateext    --》以日期做后缀
          missingok    --》日志文件不存在的时候,继续进行,不报错。
          notifempty    --》若日志文件为空,不轮转(not if empty)
          sharedscripts 
          prerorate
                  轮转之前执行的命令
          endscript
    }

    ⑤#logrotate -vf /etc/logrotate.conf (-f 强制轮转)
    –》轮转自己写的日志。

    PS:

    • man 5 logrotate.conf –》man 5 配置文件:看这个配置文件里的所有功能
    • prerorate:轮转前需要做的事情;
    • postrorate:轮转后需要做的事情。

    练习:自己编写脚本实现记录日志功能:

    1.监控httpd、yum、mysql服务,如果服务正在运行写入到日志文件,如果服务没有运行也写入到日志文件,然后启动服务
    2.日志文件的名字自己定义.例如:/var/log/liupeng_monitor.log
    3.让日志文件每个星期轮转一次,保留4个文件,在轮转之前将要删除的日志文件复制到/backup目录下。

    [root@liupeng lianxi]# cat log_monitor.sh    --》主脚本
    #!/bin/bash
    ###########配置rsyslog文件
    if ! egrep "local6" /etc/rsyslog.conf &>/dev/null
    then
        echo "local6.* /var/log/liupeng_monitor.log" >>/etc/rsyslog/conf
        echo "local6.alert  *" >>/etc/rsyslog.conf   --》如果接收到local6这种设备类型,消息级别为alert,给所有人发送(屏幕输出)!
        service rsyslog restart 
    fi
    ###########监控功能
    monitor(){   
    if service $1 status &>/dev/null
    then
                echo "$1_STATUS_CLEAR" | logger -it "$1_STATUS" -p local6.info
    else
                echo "$1_NOT_RUNNING" | logger -it "$1_SERVICE_DOWN" -p local6.notice
    
                if ! service $1 restart &>/dev/null
                then
                    echo "$1_CAN_NOT_RESTART" | logger -it "$1_SERVICE_ERROR" -p local6.alert
                else
                    echo "$1_RUNNING_AGAIN" | logger -it "$1_STATUS_CLEAR_NOTICE" -p local6.notice
                fi
    fi
    }
    ###########本地yum是否存在
    local_yum_monitor(){
    yum clean all &>/dev/null
    if yum list &>/dev/null
    then
         echo "YUM_STATUS_CLEAR" | logger -it "YUM_STATUS" -p local6.info
    else
        echo "YUM_STATUS_ERROR" | logger -it "YUM_STATUS_WRONG" -p local6.alert
        bash yum_install.sh
    fi
    }
    ###############日志轮转
    my_lograte(){    --》日志轮转
    [ -d /backup ]||mkdir /backup
    if ! [ -f /etc/logrotat.d/monitor ]
    then
        echo 
    "/var/log/liupeng_monitor.log {
        rotate 4
        weekly
        dateext
            create
        prerotate
                /bin/cp -n /var/log/liupeng_monitor.log-* /backup/    
            --》-n选项:若存在,则不再覆盖!
        endscript
    }" >/etc/logrotate.d/monitor
    fi
    }
    if [ -f ./monitor.conf ]
    then
        conf=(`cat ./monitor.conf |egrep -v "#|^$|^yum" `)
        for i in ${conf[@]}
        do
            monitor $i &
        done
        if cat ./monitor.conf|egrep "^yum_check=1$" &>/dev/null
        then
            local_yum_monitor
        fi        
    else
        echo -e "#[SERVICE_NAME]
    httpd
    mysqld
    #[YUM]
    yum_check=1" > monitor.conf
    fi
    my_lograte
    [root@liupeng lianxi]# cat monitor.conf    --》供选择的服务
    #[SERVICE_NAME]
    httpd
    mysqld
    #[YUM]
    yum_check=1
    [root@liupeng lianxi]# cat yum_install.sh    --》安装yum服务
    #!/bin/bash
    #local_yum_install
    repos="/etc/yum.repos.d"
    
    local_yum(){
    
            cat >$repos/local.repo <<EOF
    [local_yum]
    name=local_yum
    baseurl=file:///mnt
    gpgcheck=0
    enabled=1
    EOF
            read -p "请确认光盘已经放入光驱中,按任意建继续 ..."
            mount /dev/cdrom /mnt &>/dev/null
            case $? in
            0)
                    yum clean all &>/dev/null
                    yum update && echo "本地yum源配置成功!"
                    ;;
            32)
                    yum clean all &>/dev/null
                    echo "光盘已经挂载!"
                    ;;
            *)
                    echo "请放入光盘!"
                    ;;
            esac
    }
    if [ -d $repos/bak ]
    then
            if [ -f $repos/local.repo ]
            then
                    rm -f $repos/local.repo
                    local_yum
            else
                    local_yum
            fi
    else
            mkdir $repos/bak
            mv $repos/*.repo $repos/bak
            local_yum
    fi
  • 相关阅读:
    react:如何创建一个新项目
    python3-多重继承
    Stylus-富有表现力的、动态的、健壮的CSS
    使用@property
    python3-使用__slots__
    python:实例属性和类属性
    java_day1
    学习笔记144—SPSS 重复测量方差分析【方法二】
    学习笔记143—SPSS 重复测量的多因素方差分析
    学习笔记142—Matlab如何读取Excel和写入Excel??
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12546500.html
Copyright © 2020-2023  润新知