• Linux下apache日志分析与状态查看方法



    假设apache日志格式为:
    118.78.199.98 – - [09/Jan/2010:00:59:59 +0800] “GET /Public/Css/index.css HTTP/1.1″ 304 – “http://www.a.cn/common/index.php” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GTB6.3)”
    日志字段所代表的内容如下:
    1.远程主机IP:表明访问网站的是谁
    2.空白(E-mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“-”取代了
    3.空白(登录名):用于记录浏览者进行身份验证时提供的名字。
    4.请求时间:用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。 时间信息最后的“+0800”表示服务器所处时区位于UTC之后的8小时。
    5.方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。
    METHOD: GET、POST、HEAD、……
    RESOURCE: /、index.html、/default/index.php、……(请求的文件)
    PROTOCOL: HTTP+版本号
    6.状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。
    7.发送字节数:表示发送给客户端的总字节数。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。

    问题1:在apachelog中找出访问次数最多的10个IP

    awk '{print $1}' apache_log |sort |uniq -c|sort -nr|head -n 10

    awk 首先将每条日志中的IP抓出来,如日志格式被自定义过,可以 -F 定义分隔符和 print指定列;

    sort进行初次排序,为的使相同的记录排列到一起;

    upiq -c 合并重复的行,并记录重复次数。

    head进行前十名筛选;

    sort -nr按照数字进行倒叙排序。

    cut:显示所选来择的相关段。(-f 1 指的是一列,-d 指出源分割符是冒号百,PS:冒号和d之间有空格)
    /etc/passwd配置文件来存放用户源名、home目录、默认执行脚本程序等。cat /etc/passwd显示文件内容,将输出百结果通过管道传递度给cut命令。cut -f 1 -d :
    -d : 是以:作为分隔符
    -f 1显示以:分割问每一行的第一段内容。可以答cut --help查看帮助。

    整体翻译过来就度是:输出当前问机器上所有用户名。
    我参考的命令是:
    显示10条最常用的命令
    sed -e "s/| //n/g" ~/.bash_history | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | head

    问题2:在apache日志中找出访问次数最多的几个分钟。
    awk '{print $4}' access_log |cut -c 14-18|sort|uniq -c|sort -nr|head

    awk 用空格分出来的第四列是[09/Jan/2010:00:59:59;

    cut -c 提取14到18个字符

    剩下的内容和问题1类似。

    问题3:在apache日志中找到访问最多的页面:
    awk '{print $11}' apache_log |sed 's/^.*cn/(.*/)/"//1/g'|sort |uniq -c|sort -rn|head
    类似问题1和2,唯一特殊是用sed的替换功能将”http://www.a.cn/common/index.php”替换成括号内的内容:”http://www.a.cn(/common/index.php)”
    问题4:在apache日志中找出访问次数最多(负载最重)的几个时间段(以分钟为单位),然后在看看这些时间哪几个IP访问的最多?
    1,查看apache进程:
    ps aux | grep httpd | grep -v grep | wc -l
    2,查看80端口的tcp连接:
    netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
    3,通过日志查看当天ip连接数,过滤重复:
    cat access_log | grep "19/May/2011" | awk '{print $2}' | sort | uniq -c | sort -nr
    4,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
    cat access_log | grep "19/May/2011:00" | grep "61.135.166.230" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

    5,当天访问页面排前10的url:
    cat access_log | grep "19/May/2010:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
    6,用tcpdump嗅探80端口的访问看看谁最高
    tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
    接着从日志里查看该ip在干嘛:
    cat access_log | grep 220.181.38.183| awk '{print $1"/t"$8}' | sort | uniq -c | sort -nr | less
    7,查看某一时间段的ip连接数:
    grep "2006:0[7-8]" www20110519.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l
    8,当前WEB服务器中联接次数最多的20条ip地址:
    netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -n -r | head -n 20
    9,查看日志中访问次数最多的前10个IP
    cat access_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less

    10,查看日志中出现100次以上的IP
    cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less
    11,查看最近访问量最高的文件
    cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less

    12,查看日志中访问超过100次的页面
    cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less
    13,列出传输时间超过 30 秒的文件
    cat access_log|awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
    14,列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
    cat access_log |awk '($NF > 60 && $7~//.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100

















  • 相关阅读:
    【leetcode】538/1038: 把二叉搜索树转化为累加树
    k8s-nginx二进制报Illegal instruction (core dumped)
    k8s-记一次安全软件导致镜像加载失败
    Ubuntu1804下k8s-CoreDNS占CPU高问题排查
    Ubuntu 18.04 永久修改DNS的方法
    NLP资源
    《转载》14种文本分类中的常用算法
    PyCharm 使用技巧
    python模块包调用问题
    强化学习(8)------动态规划(通俗解释)
  • 原文地址:https://www.cnblogs.com/huangjiaxuan/p/12850416.html
Copyright © 2020-2023  润新知