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
thenecho "httpd is running"|logger  -t(信息) "httpd01_server"-p(设备类型号) local6.info
(把echo的内容传递给logger)
elseservice httpd start &>/dev/nullecho "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的)monthlycreate 0664 root utmp    --》创建文件的时候,指定权限和属组、属主minsize 1M    --》大于1M才轮转日志rotate 1    --》保留1个备份日志
}
/var/log/btmp {    --》针对btmp的missingok    --》如果某文件没丢失,做什么monthlycreate 0600 root utmprotate 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 || trueendscript
}
  • 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
thenecho "mysqld is running~"|logger -it "mysqld is started!" -p local6.info(这是输出的内容,也会写到日志)           (这是写到日志的内容)
elseservice httpd start &>/dev/nullecho "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
thenecho "local6.* /var/log/liupeng_monitor.log" >>/etc/rsyslog/confecho "local6.alert  *" >>/etc/rsyslog.conf   --》如果接收到local6这种设备类型,消息级别为alert,给所有人发送(屏幕输出)!service rsyslog restart
fi
###########监控功能
monitor(){
if service $1 status &>/dev/null
thenecho "$1_STATUS_CLEAR" | logger -it "$1_STATUS" -p local6.info
elseecho "$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 conf[@]</span><spanclass="hljs−keyword">do</span>monitor<spanclass="hljs−variable">{conf[@]}</span> <span class="hljs-keyword">do</span> monitor <span class="hljs-variable">conf[@]</span><spanclass="hljs−keyword">do</span>monitor<spanclass="hljs−variable">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
EOFread -p "请确认光盘已经放入光驱中,按任意建继续 ..."mount /dev/cdrom /mnt &>/dev/nullcase $? in0)yum clean all &>/dev/nullyum update && echo "本地yum源配置成功!";;32)yum clean all &>/dev/nullecho "光盘已经挂载!";;*)echo "请放入光盘!";;esac
}
if [ -d $repos/bak ]
thenif [ -f $repos/local.repo ]thenrm -f $repos/local.repolocal_yumelselocal_yumfi
elsemkdir $repos/bakmv $repos/*.repo $repos/baklocal_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>

Linux 学会看日志文件处理问题相关推荐

  1. Linux 下高级日志文件查看器Log File Navigator

    Log File Navigator,简称lnav,是一款面向小规模的适用于 Linux 的高级日志文件查看器.它是一个终端应用程序,可以理解您的日志文件,让您轻松找到问题,几乎不需要什么设置. ln ...

  2. 【引用】Linux常用的日志文件解说及常用系统命令

    一.前言 想成功地管理任何系统的关键之一,是要知道系统中正在发生什么事.Linux 中提供了异常日志,并且日志的细节是可配置的,都以明文形式存储,所以用户不需要特殊的工具就可以搜索和阅读它们.还可以编 ...

  3. linux日志文件备份,linux配置文件、日志文件全备份

    linux配置文件.日志文件全备份 1.分别设置两台主机满足试验要求服务器IP主机名 nginx-web服务器192.168.10.150web1 备份服务器192.168.10.20backup 要 ...

  4. linux配置文件、日志文件全备份

    linux配置文件.日志文件全备份 1.分别设置两台主机满足试验要求                 服务器                       IP                   主机 ...

  5. linux系统 mysql日志文件太大。造成数据库无法正常启动怎么解决

    linux系统 mysql日志文件太大.造成数据库无法正常启动怎么解决 删除mysql日志: 执行:/usr/local/mysql/bin/mysql -u root -p 输入密码登录后再执行:r ...

  6. Linux实时监控日志文件的swatchdog

    1. 前言 本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化. swatchdog(Simple WATCH DOG)是一个简单的Perl脚本,用于监视类Unix系统( ...

  7. 怎样下载linux的日志文件,Linux常见的日志文件及查看命令

    Linux常见日志和常用命令 Linux 日志都以明文形式存储,所以我们不需要特殊的工具就可以搜索和阅读它们.Linux 日志存储在 /var/log 目录中,我们可以编写脚本,来扫描这些日志,并基于 ...

  8. Linux中查看日志文件的正确姿势,求你别tail走天下了!

    作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是 cat,tail,vi(或 ...

  9. linux文件系统与日志文件

    目录 一.inode和block概述 1.文件.扇区 2.块(block) 3.文件数据 4.inode(索引节点) 5.结论 二.模拟inode节点耗尽实例 三.EXT类型文件恢复实例 四.xfs类 ...

最新文章

  1. XML 特殊字符处理和 CDATA
  2. Tomcat 配置安装
  3. 五十九、使用ZXing生成二维码
  4. Bumblebee微服务网关之负载策略
  5. C语言,去你的策略模式!
  6. Linux环境变量总结
  7. 使用ZooKeeper编程 - 一个基本教程
  8. 剑指offer55-I-二叉树的深度
  9. svn+http+ad域
  10. ASP.Net缓存总结
  11. 人工神经网络方法学习步长_人工神经网络-一种直观的方法第1部分
  12. android x86显卡驱动,全系列显卡精简版纯驱动(Windows_6.x_VGA_Drivers_lite_x86x64)(2016.09.12)...
  13. 简单的python画图代码_常见的python画图简单代码
  14. FishC02 讲:用 Python 设计第一个游戏
  15. 多元统计分析 (一):聚类分析
  16. 一般期刊发表要求如何掌握
  17. 重难点详解-关系代数表达式
  18. 微信小游戏Laya引擎声音Bug的解决方案
  19. 《跟开涛学SpringMVC》学习笔记
  20. 简单的Filter过滤器实现

热门文章

  1. Java用户修改密码
  2. C语言程序的错误和警告
  3. sencha app watch php,我的第一个基于SenchaTouch的WebApp
  4. python里删除range里的数字_python中range函数与列表中删除元素
  5. python重复元素判定_30段极简Python代码:这些小技巧你都Get了么
  6. tomcat 参数最佳实践_一线架构师开发总结:剖析并发编程+JVM性能,深入Tomcat与MySQL...
  7. python lxml xpath_Python/lxml/Xpath:如何找到包含特定文本的行?
  8. Django View和URL
  9. 线程池写入mysql_用多线程写入数据库的问题(150分)
  10. Appium+Python移动端 实战——教你如何xpath定位自动化测试