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

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    --》关闭统计
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
自己写脚本实现记录日志的功能

①修改 /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
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

④#bash monitor.sh #执行脚本

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

这里写图片描述
(发现里面有内容了!)(输出的时候,先显示-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
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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

日志轮转是怎么实现的?

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

这里写图片描述

mysqld日志轮转文件
#vim /etc/logrotate.d/mysqld
   
   
  • 1

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
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
多个日志文件使用一套轮转方法:

内核及公共消息日志:/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
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
#bash  /lianxi/liupeng.sh
   
   
  • 1

(执行脚本后,会看到在/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
}
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

⑤#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
        <span class="hljs-keyword">if</span> ! service <span class="hljs-variable">$1</span> restart &amp;&gt;/dev/null
        <span class="hljs-keyword">then</span>
            <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$1_CAN_NOT_RESTART</span>"</span> | logger -it <span class="hljs-string">"<span class="hljs-variable">$1_SERVICE_ERROR</span>"</span> -p local6.alert
        <span class="hljs-keyword">else</span>
            <span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$1_RUNNING_AGAIN</span>"</span> | logger -it <span class="hljs-string">"<span class="hljs-variable">$1_STATUS_CLEAR_NOTICE</span>"</span> -p local6.notice
        <span class="hljs-keyword">fi</span>

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 <span class="hljs-string">"#|^$|^yum"</span>)
for i in c o n f [ @ ] < / s p a n > < s p a n c l a s s = " h l j s − k e y w o r d " > d o < / s p a n > m o n i t o r < s p a n c l a s s = " h l j s − v a r i a b l e " > {conf[@]}</span> <span class="hljs-keyword">do</span> monitor <span class="hljs-variable"> conf[@]</span><spanclass="hljskeyword">do</span>monitor<spanclass="hljsvariable">i &
done
if cat ./monitor.conf|egrep “^yum_check=1$” &>/dev/null
then
local_yum_monitor
fi
else
echo -e “#[SERVICE_NAME]\nhttpd\nmysqld\n#[YUM]\nyum_check=1” > monitor.conf
fi
my_lograte

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

[root@liupeng lianxi]# cat monitor.conf    --》供选择的服务
#[SERVICE_NAME]
httpd
mysqld
#[YUM]
yum_check=1
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[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
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
            </div><div><div></div></div>
            <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet">
            <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet">
    </div>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值