• 大型分布式网站架构设计与实践——在线日志分析


    通过日志分析的命令和脚本,筛选日志中有价值的内容,可以分析得出系统产生问题的原因。


    一、日志分析常用命令

    1、查看文件的内容
    cat -n

    2、分页显示文件
    more
    enter 显示文件下一行、空格键显示下一页、f键显示下一屏、b键显示上一屏

    less 支持/查找


    3、显示文件尾
    tail -n -f

    4、显示文件头
    head -n

    5、内容排序
    sort -n数字排序 -r逆序 -t分隔符 -k 第几列
    eg:
    192.168.142.56 - - [09/Mar/2016:16:42:59 +0800] "POST /jdy-servlet/users HTTP/1.1" 200 11
    按照响应时间排序: sort -n -t' ' -k10 fileName

    6、字符统计
    wc 可以统计指定文件中的字符数、字数、行数、并输出统计结果


    7、查看重复出现的行
    uniq
    sort file | uniq -c 排序后去重

    8、字符串查找
    grep
    grep -c qq file -c 显示查找到的行数
    grep -c 'G.*T' file 正则式

    9、文件查找
    find
    find ./ -name '*.txt'

    find . -print 递归显示所有的文件

    whereis startuo.sh 定位到文件系统中可执行文件的位置

    10、表达式求值
    expr
    加减乘除 + - * / %
    字符串操作:
    索引位置: expr index 'www.baidu.com' com
    字符串长度: expr length 'www.baidu.com'

    11、归档文件
    tar -c 生成新的包 -f 命名 -z 压缩 -x解压
    -zcv -zxf

    12、URL访问工具
    curl
    支持HTTP、HTTPS、FTP、FTPS、 Telnet等协议;
    提交表单、传递cookie信息、构造refer等操作


    实例:
    1、查看请求访问量
    192.168.143.39 - - [09/Mar/2016:08:20:54 +0800] "POST /jdy-servlet/users HTTP/1.1" 200 596
    ip访问量前三: cat access_log.txt | cut -f1 -d' ' | sort -n | uniq -c | sort -r -n -k1 -t' ' | head -n3
    页面访问量前三: cat access_log.txt | cut -d' ' -f7 | sort | uniq -c | sort -n -r -k1 -t' ' | head -n3

    2、查看最耗时的页面
    cat access_log.txt | sort -n -r -t' ' -k10 | head -n20

    3、统计404请求占比
    export total_line=`wc -l access_log.txt |cut -f 1 -d ' '` && export not_found_line=`awk '{if($9=="404")print $6}' access_log.txt|wc -l` && echo $not_found_line / $total_line


    二、日志分析脚本
    1、sed:
    流编辑器是在编辑数据之前,预先指定数据的编辑规则,然后按照规则将数据输出到标准输出;
    在流编辑器的搜欧规则与输入的行匹配完毕以后,编辑器读取下一行,重复之前的规则;
    处理完搜所有的数据后,流编辑器停止;
    sed是面向行的,并且sed不会修改文件本身;


    s 文本替换
    将日志中的jdy替换成google输出
    sed 's/jdy/google/' access_log.txt | head -10

    -n 输出指定的行
    筛选文件中指定的行输出
    sed -n '2,6p' access_log.txt

    d 文本删除
    根据正则表达式删除文件中指定的行
    sed '/jdy/d' access_log.txt

    = 显示文件行号
    显示文件行号
    sed '=' access_log.txt

    i 行首插入内容
    在行首插入文本 head
    sed -e 'ihead' access_log.txt | head -10

    a 行末追加文本
    在每一行的尾末追加ecd
    sed -e 'aend' access_log.txt | head -10

    c 将匹配到的行进行替换
    sed -e '/jdy/chello' access_log.txt | head -10


    将jdy替换为google,然后打印第一行到第七行,并且输出行号
    sed -n 's/jdy/google/;1,7p;1,6=' access_log.txt


    2、awk
    awk提供了类似于编程的开放环境,能够自定义文本处理的规则

    打印文件指定的列:
    awk '{print $1}' access_log.txt | head -10

    筛选指定的行,并打印其中的一部分列:
    awk '/jdy/{print $5, $6}' access_log.txt | head -10

    查找length大于40的行,并且打印改行的第三列:
    awk 'length($0)>40{print $3}' access_log.txt | head -10

    输出第六行的请求方法和第十行的响应时间:
    awk '{line = sprintf( "method:%s", response:%s", $6, $10); print line}' access_log.txt |head -1

    计算加总
    $ cat count.txt | awk '{sum+=$1} END {print "Sum = ", sum}'
    Sum = 15.9
    计算平均值
    $ cat count.txt | awk '{sum+=$1} END {print "Average = ", sum/NR}'


    3、shell
    (完善中…………)

  • 相关阅读:
    nmon+python 基于AIX系统数据分析
    nmon +java nmon Alalizy agent 动态交互监控
    nomon+ pyNmonAnalyzer实现基于python的nmon监控性能数据可视化
    nmon help文档zh-han
    nmon+Java Nmon Analyser进行nmon监控数据可视化分析
    pandas 数据可视化之折线图
    nmonchart 分析.nmon监控数据成html展示
    【BZOJ4025】—二分图(线段树分治+带权并查集)
    【BZOJ4025】—二分图(线段树分治+带权并查集)
    【BZOJ2759】—一个动态树好题(LCT+Exgcd)
  • 原文地址:https://www.cnblogs.com/renwei/p/5287688.html
Copyright © 2020-2023  润新知