df磁盘容量>>du磁盘容量——磁盘容量告警排查与解决

异常现象:

一台机器上挂载的一块专门存放日志文件的磁盘容量超过85%

排查过程:

  1. 查看挂载磁盘空间使用情况,Use%使用率确实>85%,Used使用了70多G
df -h  # df命令的英文全称即“Disk Free”,顾名思义功能是用于显示系统上可使用的磁盘空间。默认显示单位为KB,建议使用“df -h”的参数组合,根据磁盘容量自动变换合适的单位,更利于阅读。
  1. 记得这台机器是有定时任务删日志的,看下定时任务列表确实是有删除日志的定时任务
cd /var/spool/cron  # 定时任务列表所在目录
ll  # 查看有哪些用户有定时任务
cat user  # 查看ll出来的各用户的定时任务
  1. 查看定时任务日志,看到最近时间是有执行删除的
less /var/log/cron  # 查看定时任务 
G  # 跳转到文件尾
?del  # 搜索定时删除任务的日志 
  1. 进到日志文件目录,查看下层子目录空间使用情况,是不是没删除成功,看哪个占的多,能清的尽量清一清。然而发现日志文件只用了55G
du -h # du命令法人英文全称即“Disk Usage”)命令用于显示目录或文件所占用的磁盘空间。 
echo > unused.log # 清空文件
  1. 弄清du和df的区别,看了很多博文,当时大概认识到是因为有删除的文件句柄被还被进程使用着,所以还会被df统计到,需要结束或重启占用已删除文件句柄的进程(PS:后面又搜到一篇讲解du和df区别很清楚的博文半叶寒羽 » Linux磁盘管理命令df和du区别)。使用lsof可以列出当前系统打开文件linux lsof命令详解。
lsof |grep logdir  # 搜一下正打开的日志文件
# 太多了,第十列(最后一列)是文件名,去重看下
lsof |grep logdir |awk '{print $10}' |sort |uniq -c |sort
# 看到有很多是deleted,有点奇怪,具体搜一下
lsof |grep logdir |grep deleted
# 看到第一列都是filebeat,第二列PID都是8807,最后列都是文件名(deleted),且看文件名是今天的日志
ps -ef |grep 8807 # 查看这个PID跑的具体进程信息
  1. 想起来filebeat是用来抓取日志的,而且看文件名都是今天产生的日志,猜测是日志量增长的太快,删的也快,filebeat还在抓取,但是日志已经被rm了。所以重启filebeat,重启后df -h果然使用率降了下去!
service collector-sidecar restart

后续处理:

修改filebeat配置文件里的抓取路径,不再是所有日志文件都抓,而是只抓错误文件。

你可能感兴趣的:(linux,linux,运维,centos)