zoukankan      html  css  js  c++  java
  • 大型分布式网站架构设计与实践——在线日志分析

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


    一、日志分析常用命令

    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
    (完善中…………)

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/renwei/p/5287688.html
Copyright © 2011-2022 走看看