使用 awk 命令行快速分析 IBM HTTP Server 访问日志

8.5---筛选给定时间范围内的日志 新纪元(epoch):UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。夏时制(Daylight Saving Time:DST):又称“日光节约时制”和“夏令时间”,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。时区:世界按照经度被划分为24个时区; 阅读详情

简介

IBM HTTP Server 是基于 Apache Web Server 之上开发的一个多功能 Web 服务器。IBM HTTP Server 扩展了 Apache 的功能,引入了一些 Apache 没有的功能。比如,能够使用 IBM 快速响应高速缓存加速器,以及更方便的与 IBM WebSphere 其他产品进行集成。为了了解 IBM HTTP Server 的运行状况,需要对 IBM HTTP Server 的日志进行快速有效的分析。虽然现在有很多商业、或开源软件提供图形化用户界面的方式,辅助分析服务器的访问日志,但是他们大多需要事先在服务器端安装和配置。使用 awk 命令,在很多特殊情形下,可以更快速从日志中捕获所需要的信息。本文从 IBM HTTP Sever 访问日志格式说起,进而简单介绍了 AWK 的语言基础,最后列举了一些典型的使用场景。

日志格式

我们可以在 IBM HTTP Server 的配置文件中,使用预定义的经典格式,或者自定义访问日志的格式。下文中如无特别说明,将假设日志使用名称为 combined的经典格式。

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

以下是每个域的简单介绍:

%h = 发起请求的客户端 IP 地址。这里记录的 IP 地址并不一定是真实用户客户机的 IP 地址,它可能是私网客户端的公网映射地址或代理服务器地址。

  • %l = 客户机的 RFC 1413 标识 ( 参考 ) ,只有实现了 RFC 1413 规范的客户端,才能提供此信息。
  • %u = 访问用户的 ID
  • %t = 收到请求的时间
  • %r = 来自客户端的请求行
  • %>s = 服务器返回客户端的状态码
  • %b = 返回给客户端的字节大小,但不包括响应头的大小
  • %{Referer}i = 引用页
  • %{User-Agent}i = 浏览器的类型

以下三行为样例日志:

 202.189.63.115 - - [31/Aug/2008:15:42:31 +0800] "GET / HTTP/1.1" 200 1365 "-" 
 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1"

设置滚动日志

由于 Web 服务器每天的访问量可能巨大,我们需要把访问日志分别写到不同的日志文件中,这样可以避免单个文件太大,无法使用编辑器打开的情况。比如,我们可以在配置文件中定义每 5 M 生成一个日志文件。

Linux 服务器:

 TransferLog "|/opt/IBM/HTTPServer/bin/rotatelogs /opt/IBM/HTTPServer/logs/access_log 5M"

Windows 服务器:

 CustomLog "|C:/IBM/HTTPServer/bin/rotatelogs.exe 
 C:/IBM/HTTPServer/logs/access%Y_%m_%d_%H_%M_%S.log 5M" combined 

AWK 简介

AWK 是一种“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表。它的名称取自于它的创始人 Alfred Aho、 Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。

本文论述的 awk 命令主要指 Linux 操作系统中广泛包含的内置程序 /bin/gawk,它是 Unix awk 程序的 GNU 版本。此命令主要负责读入并运行 AWK 语言编写的程序。在 Windows 平台上可以使用 Cygwin 在模拟环境下运行 awk 命令。

基本上来说,awk 可以从输入( 标准输入,或一个或多个文件 )中是否存在指定模式的记录( 即文本行 )。每次发现匹配时,就执行相关联的动作( 例如写入到标准输出或外部文件 )。

AWK 语言基础

为了能理解 AWK 程序,我们下面概述其基本知识。AWK 程序可以由一行或多行文本构成,其中核心部分是包含一个模式和动作的组合。

 pattern { action } 

模式( pattern ) 用于匹配输入中的每行文本。对于匹配上的每行文本,awk 都执行对应的 动作( action )。模式和动作之间使用花括号隔开。awk 顺序扫描每一行文本,并使用 记录分隔符(一般是换行符)将读到的每一行作为 记录,使用 域分隔符( 一般是空格符或制表符 ) 将一行文本分割为多个 , 每个域分别可以使用 $1, $2, … $n 表示。$1 表示第一个域,$2 表示第二个域,$n 表示第 n 个域。 $0 表示整个记录。模式或动作都可以不指定,缺省模式的情况下,将匹配所有行。缺省动作的情况下,将执行动作 {print},即打印整个记录。

使用 awk 分解出日志中的信息

由于我们在 IBM HTTP Server 配置文件中指定了访问日志的固定格式,因此,我们可以轻易地使用 awk 解析,抽取我们需要的数据。

以下面的示例日志为例:

 202.189.63.115 - - [31/Aug/2012:15:42:31 +0800] "GET / HTTP/1.1" 200 1365 "-" 
 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1"

  • $0 就是整个记录行
  • $1 就是访问 IP ” 202.189.63.115”
  • $4 就是请求时间的前半部分 “[31/Aug/2012:15:42:31”
  • $5 就是请求时间的后半部分 “+0800]”

以此类推……

当我们使用默认的域分割符时,我们可以从日志中解析出下面不同类型的信息:

 awk '{print $1}' access.log       # IP 地址  (%h) 
 awk '{print $2}' access.log       # RFC 1413 标识  (%l) 
 awk '{print $3}' access.log       # 用户 ID  (%u) 
 awk '{print $4,$5}' access.log     # 日期和时间  (%t) 
 awk '{print $7}' access _log      #  URI (%>s) 
 awk '{print $9}' access _log      # 状态码 (%>s) 
 awk '{print $10}' access _log     # 响应大小  (%b) 

我们不难发现,仅使用默认的域分隔符,不方便解析出请求行、引用页和浏览器类型等其他信息,因为这些信息之中包含不确定个数的空格。因此,我们需要把域分隔符修改为 “ ,就能够轻松读出这些信息。

 awk -F\" '{print $2}' access.log        # 请求行 (%r) 
 awk -F\" '{print $4}' access.log        # 引用页 
 awk -F\" '{print $6}' access.log        # 浏览器

注意:这里为了避免 Unix/Linux Shell 误解 “ 为字符串开始,我们使用了反斜杠,转义了 “ 。

现在,我们已经掌握了 awk 的基本知识,以及它是怎样解析日志的。 下面我们做好准备开始到真实的世界里开始“冒险”了。

使用 awk 场景举例

统计浏览器类型

如果我们想知道那些类型的浏览器访问过网站,并按出现的次数倒序排列,我可以使用下面的命令:

 awk -F\" '{print $6}' access.log | sort | uniq -c | sort -fr 

此命令行首先解析出浏览器域,然后使用管道将输出作为第一个 sort 命令的输入。第一个 sort 命令主要是为了方便 uniq 命令统计出不同浏览器出现的次数。最后一个 sort 命令将把之前的统计结果倒序排列并输出。

发现系统存在的问题

我们可以使用下面的命令行,统计服务器返回的状态码,发现系统可能存在的问题。

 awk '{print $9}' access.log | sort | uniq -c | sort 

正常情况下,状态码 200 或 30x 应该是出现次数最多的。40x 一般表示客户端访问问题。50x 一般表示服务器端问题。

下面是一些常见的状态码:

  • 200 - 请求已成功,请求所希望的响应头或数据体将随此响应返回。
  • 206 - 服务器已经成功处理了部分 GET 请求
  • 301 - 被请求的资源已永久移动到新位置
  • 302 - 请求的资源现在临时从不同的 URI 响应请求
  • 400 - 错误的请求。当前请求无法被服务器理解
  • 401 - 请求未授权,当前请求需要用户验证。
  • 403 - 禁止访问。服务器已经理解请求,但是拒绝执行它。
  • 404 - 文件不存在,资源在服务器上未被发现。
  • 500 - 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
  • 503 - 由于临时的服务器维护或者过载,服务器当前无法处理请求。

HTTP 协议状态码定义可以参阅:Hypertext Transfer Protocol -- HTTP/1.1

有关状态码的 awk 命令示例:

1. 查找并显示所有状态码为 404 的请求

 awk '($9 ~ /404/)' access.log 

2. 统计所有状态码为 404 的请求

 awk '($9 ~ /404/)' access.log | awk '{print $9,$7}' | sort 

现在我们假设某个请求 ( 例如 : URI: /path/to/notfound ) 产生了大量的 404 错误,我们可以通过下面的命令找到这个请求是来自于哪一个引用页,和来自于什么浏览器。

 awk -F\" '($2 ~ "^GET /path/to/notfound "){print $4,$6}' access.log 

追查谁在盗链网站图片

系统管理员有时候会发现其他网站出于某种原因,在他们的网站上使用保存在自己网站上的图片。如果您想知道究竟是谁未经授权使用自己网站上的图片,我们可以使用下面的命令:

 awk -F\" '($2 ~ /\.(jpg|gif|png)/ && $4 !~ /^http:\/\/www\.example\.com/)\ 
 {print $4}' access.log \ | sort | uniq -c | sort 

注意:使用前,将 www.example.com 修改为自己网站的域名。

  • 使用 ” 分解每一行;
  • 请求行中必须包括 “.jpg” 、”.gif” 或 ”.png”;
  • 引用页不是以您的网站域名字符串开始( 在此例中,即 www.example.com );
  • 显示出所有引用页,并统计出现的次数。

与访问 IP 地址相关的命令

统计共有多少个不同的 IP 访问:

 awk '{print $1}' access.log |sort|uniq|wc – l 

统计每一个 IP 访问了多少个页面:

 awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file 

将每个 IP 访问的页面数进行从小到大排序:

 awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n 

查看某一个 IP(例如 202.106.19.100 )访问了哪些页面:

 grep ^202.106.19.100 access.log | awk '{print $1,$7}'

统计 2012 年 8 月 31 日 14 时内有多少 IP 访问 :

awk '{print $4,$1}' access.log | grep 31/Aug/2012:14 | awk '{print $2}'| sort | uniq | \
wc -l

统计访问最多的前十个 IP 地址

 awk '{print $1}' access.log |sort|uniq -c|sort -nr |head -10 

与响应页面大小的命令

列出传输大小最大的几个文件

 cat access.log |awk '{print $10 " " $1 " " $4 " " $7}'|sort -nr|head -100 

列出输出大于 204800 byte ( 200kb) 的页面以及对应页面发生次数

 cat access.log |awk '($10 > 200000){print $7}'|sort -n|uniq -c|sort -nr|head -100 

与页面响应时间相关的命令

如果日志最后一列记录的是页面文件传输时间 (%T),例如我们可以自定义日志格式为:

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T" combined 

可以使用下面的命令统计出所有响应时间超过 3 秒的日志记录。

 awk '($NF > 3){print $0}' access.log 

注意:NF 是当前记录中域的个数。$NF 即最后一个域。

列出相应时间超过 5 秒的请求

 awk '($NF > 5){print $0}' access.log | awk -F\" '{print $2}' |sort -n| 
 uniq -c|sort -nr|head -20 

转自 http://www.ibm.com/developerworks/cn/linux/l-cn-awk-httplog/
小刘的PHP面试碰到的坑 php基础) 1、陌陌在20170201 ~ 20170209举行了签到活动,参加活动用户的userid为 1 ~ 1000... 阅读详情

相关推荐

MuleSoft企业级AI编排:让大语言模型安全落地生产环境

大语言模型(LLM)作为新兴智能引擎,其核心价值在于语义理解与生成能力,但真正实现企业级应用必须跨越数据安全、系统异构和治理合规三重门槛。MuleSoft凭借协议转换、智能路由、熔断降级与审计追踪等原生集成能力,成为连接LLM与传统IT资产的关键中枢——它不替代模型,而是为模型构建可管理、可审计、可运维的运行沙盒。在银行信贷、保险核保、制造供应链等强监管场景中,MuleSoft支撑LLM完成敏感数据脱敏、z/OS系统对接、多模型动态调度及全链路可观测性建设。本文聚焦‘LLM如何在真实企业环境中稳定、安全、可

weixin_30378623的博客 430

Apache HTTP Server日志日志轮替工具

Apache HTTP Server是一种常用的开源Web服务器软件,用于提供静态和动态网页的传输。在运行过程中,Apache HTTP Server会生成各种类型的日志文件,以记录服务器的活动和访问情况。本文将介绍Apache HTTP Server日志文件以及如何使用日志轮替工具来管理和维护这些日志文件。

TpCode的博客 416

Linux运维入门实战:从零到一掌握核心命令、服务部署与自动化

这类教程最值得先看的不是它承诺“学完即就业”,而是它能不能帮你从零开始,把Linux运维的核心技能点串起来,形成一套能动手、能排查、能解决问题的真实能力。很多新手卡在第一步:面对海量命令和概念,不知道从哪里下手,或者学了一堆命令却不知道如何应用到实际工作中。 我更建议把学习过程拆成三个阶段:先确保自己能在一个干净的环境里把系统跑起来,熟悉最基本的操作;然后通过搭建真实服务(比如Web服务器、文件共享)来理解命令和配置的实际用途;最后才是考虑脚本、自动化和更高级的云原生概念。下面我会按这个思路,结合常见的实战

weixin_33885676的博客 371

awk命令

awk选项 -F -Vawk执行流程awk取行与取列:指哪打哪awk模式:正则,范围,特殊模式,比较awk数组:统计分析日志awk for if计次数:access.log统计每个ip出现次数统计每种状态码出现次数secure统计系统中每个用户被攻击的次数统计攻击者ip出现次数累加求和:统计每个IP消耗的流量 access.logawkawk选项 -F -Vawk执行流程awk取行与取列:指哪打哪awk模式:正则,范围,特殊模式,比较awk数组:统计分析日志

weixin_44232390的博客 4265

Linux工具:awk按时间范围分析日志

Linux

Brave_heart4pzj的博客 662

使用awk分析nginx访问日志access.log

1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行使用,但更多是作为脚本来使用awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被

大鹏 3245

使用 awk 命令行快速分析HTTP Server 访问日志

使用 awk 命令行快速分析HTTP Server 访问日志 为了了解 IBM HTTP Server 的运行状况,需要对 IBM HTTP Server日志进行快速有效的分析。虽然现在有很多商业、或开源软件提供图形化用户界面的方式,辅助分析服务器的访问日志,但是他们大多需要事先在服务器端安装和配置。使用 awk 命令,在很多特殊情形下,可以

WonSoon的专栏 2098

应急响应实战:从日志分析到威胁清除(附完整排查脚本与工具箱)

应急响应(Incident Response, IR)是指当安全事件发生时,组织为了识别、遏制、根除和恢复系统而采取的一系列结构化行动。它不仅仅是"被黑了去查日志",而是一套包含准备、检测、分析、遏制、根除、恢复和总结的完整方法论。在当今威胁环境下,攻击者从初始访问到完成横向移动的平均时间已缩短至数小时甚至数十分钟。根据IBM的年度数据泄露报告,包含高效应急响应团队和广泛自动化部署的组织,平均数据泄露成本比低效组织低数百万美元。应急响应能力已经成为企业安全建设的核心能力之一。DFIR(Digital For

xlb8888888的博客 243

小刘的PHP碰到的坑

php基础) 1、陌陌在20170201 ~ 20170209举行了签到活动,参加活动用户的userid为 1 ~ 10000000,由于签到接口的请求量过大,现决定签到时10%的概率分享一条留言板。 ua格式为Momo/1.1.1 Android/1132 (SM901; Android 6.0.1; Gapps 0; zh_CN; 1; smartisan 1)如何通过php判断2017020...

liuqun of program life 989

工作中使用到的单词(软件开发)_第五版

本文摘要: 本文为软件开发相关的术语与技术要点整理,主要包含2020-2025年间四版内容更新(No.01-41)。重点包括: 证书文件格式(PEM/P12)差异 外部API通信注意事项(Accept头设置、HTTPS连接问题) Postman工具使用技巧(Cookie管理、请求头设置) WAS配置相关经验(JVM设置、SSL连接问题) 数据库操作命令(DB2表结构修改) IBM安全管理组件(TAM/iv-user机制) 网络通信细节(chunked传输编码特性) 常用开发工具(curl、Postman)的

sun0322 2372

Unix_Linux_AIX_常用命令总结

■前言 Unix,Linux 介绍 https://blog.csdn.net/sxzlc/article/details/103652857(介绍内容在文章底部) ■各种命令 0.cd 目录跳转 1.uname uanme -a 显示服务器全部信息 uname -n 显示服务器名字 2.ifconfig ifconfig -a 查看网络配置 3.who 显示当前在线用户 4.chown ch...............

sun0322 4万+

【Linux公有云网站配置实战|企业网络管理课程溯源、完整实训、例题解析与故障排错】

文末整理配套学习网站、网课、专业书籍。早期网络依靠人工经验维护,没有标准化流程、统一配置规范,网络故障频繁,于是各大高校开设企业网络管理相关课程,目的是培养能够维护企业内网、服务器、对外业务网站的专业运维人员。本次实训基于公有云服务器,以Linux操作系统为基础,完整完成云服务器初始化、远程连接、Web服务安装、网站源码部署、防火墙与云安全组放行,最终实现公网用户通过IP访问企业网站。Linux系统凭借稳定、开源、免费的优势成为企业服务器首选,课程新增Linux命令、用户管理、服务部署、防火墙配置内容。

2501_92125808的博客 275

Keepalived+HAProxy高可用负载层实战:Reserved IP无缝漂移与毫秒切换

负载均衡器单点故障是分布式系统中最隐蔽的性能瓶颈。理解VRRP协议原理、虚拟IP(VIP)工作机制及健康检查逻辑,是构建高可用前端基础设施的核心能力。Keepalived通过内核级网络状态监听实现毫秒级故障检测,配合HAProxy多进程绑定与连接复用调优,可有效解决CPU 100%、连接队列堆积、502网关错误等典型问题。该方案特别适用于对稳定性要求严苛的金融、政企生产环境,在Ubuntu 14.04等LTS系统上展现出极强的兼容性与可控性。本文聚焦Reserved IPs的底层ARP协同机制与主备无感切换

392

OSI与TCP/IP模型:网络分层原理与故障排查实战指南

网络分层模型是理解通信本质、定位系统故障和设计可靠架构的基础概念。其核心在于将复杂的端到端通信解耦为多个抽象层级,每一层专注特定职责并定义清晰的上下层接口。OSI七层模型强调理论完备性与跨厂商互操作契约,而TCP/IP四层模型源于工程实践,以简洁性和可部署性见长。二者差异不仅体现为层数不同,更反映通信抽象维度的根本分歧——例如传输层端口号实为内核级多路复用索引,TLS协议则横跨表示层与应用层语义。在真实场景中,Wireshark协议树、Kubernetes Service Mesh流量治理、SYN Floo

weixin_30275415的博客 434

Notebook到生产:机器学习模型工程化落地实战指南

机器学习模型部署不是简单的‘保存pkl+启动Flask’,而是从开发环境到生产环境的系统性跨越。其核心在于理解模型服务的本质——它是一个受SLA约束、需可观测、可审计、可弹性伸缩的软件系统。本文围绕Notebook to Production这一关键跃迁,深入解析模型封装、API网关协同、Triton推理优化、Kong流量治理及特征漂移监控等真实场景技术实践,强调服务契约、分层解耦与自动化合规等工程心智。内容覆盖MLOps基础原理、GPU推理性能调优、gRPC连接池配置、Prometheus指标设计等高频搜

weixin_30693683的博客 406
上一篇: 一种可以避免数据迁移的分库分表scale-out扩容方式
下一篇: APMServ 5.2.6 无法启动Nginx bug修复
cherry_hit_tom
博客等级 码龄19年 145粉丝 205原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值