linux 日志分析

  1. 对于较小的文件可使用cat命令查看:cat -n  显示行号查看

  2. 分页显示文件:less/more

#less|more //enter 键显示下一行,空格键显示下一页 ,F键显示下一屏

3. 内容排序:sort

#sort -n -r sortfile //-n 按照数字顺序排列,-r 逆序排序
#sort -k 2 -t ' ' -n //-k 指定排序的列,-t 指定列分割符(这里指的是空格),-n按照数字排序

 4. 字符统计:wc

#wc -l access.log //-l统计字符的行数,-c统计文件的字符数,-L最长列的行数,-w包含多少个单词

5. 查看重复出现的行:uniq

6. 字符串查找:grep

#grep qq access.log //查找文件中符合条件的字符串,-c显示找到的行数
#grep 'G*T' access.log //正则表达式

7. 文件查找:find

#find /home -name *.txt //查找以txt结尾的文件
#find . -print //递归打印当前目录的所有文件

8. 表达式求值:expr

#expr 10 \* 3 //乘法计算,*用“\”转义

9. 多个命令连续查找

#cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -n -r | head -10 //访问量靠前10的ip,cut命令用来过滤日志指定的列,列之间用空格来分割
#cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -n -r | head 10 //页面访问量靠前10的url,命令之间用管道进行连接,摘取访问日志指定的列,排序、去重后,在按照出现的次数进行反向排序,取其中前10条记录

 10. 日志分析脚本:

     1) sed编辑器

#sed 's/xxx/yahoo/' access.log | head -10 //将文件中得xxx替换成yahoo输出,s表示执行替换命令
#sed -n '2,6p' access.log //-n表示只输出指定的行,2,6表示第二行和第6行之间
#sed '/qq/d' access.log //根据正则表达式删除,d执行删除
#sed -e 'i/head' access.log //在行首插入文本,i/head 表示在每行的前面插入head字符串

     2)awk程序

#awk [option] 'pattern {action}' file //option为命令选项,pattern为行的匹配,action为执行的具体操作;如果没有pattern,则对所有行执行action,而如果没有action,则打印所有匹配的行;
#awk '/google/{print $5,$6}' access.log //使用google查找包含google的行,并且打印第5第6行
#awk 'length($0)>40{print $3}' access.log //查找大于40的行,并打印第3列,length($0)用来获取打钱行数长度
#awk '{line = sprintf ("method:%s,response:%s",$3,$7);print line}' access.log //定义一个line变量,用于接收sprintf的输出,而sprintf用于格式化输出第三行的请求方式和第七行的响应时间

11. shell脚本

load=`top -n | sed -n '1p' | awk '{print $11}'`
load=${load%\,*}
disk_usage=`df -h | sed -n '2p' | awk '{print $(NF - 1)}'`
disk_usage=${disk_usage%\%*}
overhead=`expr $load \>2.00`
if [$overhead -eq 1 ];then
  echo "system load is overhead"
fi
if [$disk_usage -gt 85 ];then
  echo "disk is nearly full,need more disk space"
fi
exit 0

说明:先通过top命令去的系统的load值,-n后面的1表示只刷新一次,然后使用sed过滤出第一行,也就是load信息的行。top会输出1分钟、5分钟、15分钟load的平均值,通过awk筛选出1分钟内的平均load,赋值给load变量,而${load%\,*}则是从右边开始,过滤掉不需要的逗号。接下来便是获取磁盘的利用率,使用${disk_usage%\%*}过滤掉最后的百分号。由于取到的laod信息包含两位小数,因此需要使用expr $load \> 2.00命令进行比较,并且将结果赋值给overhead。最后通过if语句判断系统是否负载过高。

你可能感兴趣的:(linux 日志分析)