作为每一个Linux发行版本都会内置的文本处理程序,awk是快速分析日志的不二之选。

服务日志分析是对了解服务状况、发现问题的最有效的手段。最近发现很多同学在分析服务日志的时候走了弯路:选择使用编程(js、php、python甚至是c)、甚至使用ELK来完成一次性日志统计分析。其实系统自带了功能非常强大的工具:awk,每一个程序员、甚至是每一个IT从业者都需要学会使用awk完成文本的处理和日志分析。

什么是awk

One of the great things we can do in the shell.

几乎每一个Linux发行版本都会内置awk,在大小仅有4.2M的Alpine:3.7 Docker Image里面也内置了awk。由此可见其重要性。

废话少说,直接进入日志分析。

实战

选用最常见的Nginx日志。

Nginx日志的配置为

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for" '

'$request_time $upstream_response_time';

相比默认日志,添加了请求的响应时间和upstream的响应时间。

100.120.34.170 - - [24/Jan/2019:00:06:02 +0800] "GET /page1 HTTP/1.1" 200 29087 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)" "36.110.179.109" 0.138 0.138

统计IP和出现过的次数

cat file | awk -F " " '{print $1}' | awk '{cnt[$0]++}END{for(i in cnt){print i,cnt[i]}}'

一些个人的喜好:先cat再用管道传给awk;每个awk只做简单的事情,管道传递给下一阶段继续,更清晰易懂分开调试

-F " ":以空格做分隔符,默认分隔符就是空格,因此可以被省略

cnt是一个数组,以$0作为key,value每次累加;$0指整行

END指处理完所有行,再执行后面的逻辑

for(i in cnt)遍历cnt并打印key和value

只对IP进行去重

一般用法:

cat file | awk -F " " '{print $1}' | sort | uniq

一定要先sort再uniq,否则只对相邻的相邻值去重

由于会排序,速度较慢,==不推荐==

awk用法:

cat file | awk '{cnt[$1]++}END{for(i in cnt){print i}}'

awk高级用法:

cat file | awk '{print $1}' | awk '!a[$0]++'

'!a[$1]++'是一个判断条件,条件为true的时候输出整行

或者

cat file | awk '!a[$1]++{print $1}'

统计平均响应时间

cat file | awk '{a+=$(NF-1);b++}END{print a/b}'

$NF是最后一个字段,$(NF-1)是倒数第二个字段

a+=$(NF-1)对所有值累加, b++计数

统计时间分布和比例

cat file | awk '{print $(NF-1)}'|awk '{print int($0)}'|awk '

{

cnt[$0]++;

total++

}

END {

for(i in cnt) {

print i"~"i+1,cnt[i],cnt[i]/total*100"%"

}

}' | sort -n

print简单一点,方便理解

print i,cnt[i],cnt[i]/total

printf("%d~%d %d %f%\n",i,i+1,cnt[i],cnt[i]/total)

int($(NF-1))对数组进行取整

四舍五入可以用int($(NF-1) + 0.5)

sort -n结果按数字排序

print和printf可任意选取使用

统计每小时处理时间的平均值

cat file | awk '{print $NF, $4}'| awk -F"[ :]" '{print $1,$3}' | awk '

{

sum[$2]+=$1;

cnt[$2]++

}

END {

for(i in sum) {

print i, sum[i]/cnt[i]

}

}' | sort -n

-F "[ :]"指用空格或者冒号作为分隔符

由于一次切割不容易获取到想要的字符串,故多做几次切割

用两个数组用于分小时统计

linux取整个日志文件,高效日志分析 - 人人必学的awk相关推荐

  1. Zookeeper日志文件事务日志数据快照

    Zookeeper持久化两类数据,Transaction以及Snapshot,logDir存储transaction命令,dataDir存储snap快照,其下子目录名称以version-2命名,子目录 ...

  2. logback多进程写同一日志文件导致日志混乱问题

    记录一次logback多进程写同一日志文件导致日志混乱问题 参考该博客解决问题

  3. 磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制

    RAID磁盘阵列 • 廉价冗余磁盘阵列 – Redundant Arrays of Inexpensive Disks – 通过硬件/软件技术,将多个较小/低速的磁盘整合成一 个大磁盘 – 阵列的价值 ...

  4. 分析mysql日志文件_MySQL日志文件与分析

    1.查询日志.慢查询日志.二进制日志对比 查询日志 general_log 会记录用户的所有操作,其中包含增删查改等 可以指定输出为表 慢查询日志 slow_log 只要超过定义时间的所有操作语句都记 ...

  5. java分析日志文件_java程序如何对监控软件的日志文件进行如下分析?

    一个监控软件的日志文件,内容如下: 日期               时间          接口       设备      状态 2016-09-01   08:00     J1         ...

  6. log4j日志文件的使用及log4j日志文件失效原因分析

    log4j的使用步骤 1.导入log4j-*.jar,例:log4j-1.2.17-jar; <dependency><groupId>log4j</groupId> ...

  7. mac apache 日志_Mac OS X中的Apache日志文件并进行分析

    mac apache 日志 In last article, we saw how to install Apache on Mac OS X, today we will learn some ba ...

  8. SpringBoot_日志-指定日志文件和日志Profile功能

    这也只能改个别的配置,Springboot对日志到底是怎么样的呢spring-boot-1.5.12.RELEASE.jar如果你用logback日志文件是什么样的org.springframewor ...

  9. mysql 日志文件_Mysql 日志文件类型

    简介: Mysql 中提供了多种类型的日志文件,分别反映 Mysql 的不同信息,了解它们很有必要. 1.Error log ( 错误日志 ) 错误日志记录了 Mysql Server 运行过程中所有 ...

最新文章

  1. e.V4p.C0/index.php,php-fpm进程在Kubernetes中接收SIGKILL信号
  2. python余弦相似度
  3. 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...
  4. idea启动tomcat很慢_idea使用maven创建web项目
  5. 前端学习(226):定位使用
  6. DataCleaner(4.5)第一章
  7. RunLoop已入门?不来应用一下?
  8. Wu-Manber字符串多模式匹配
  9. openGL ES 教程(二):渲染管线
  10. 2018年3月江苏省计算机二级C语言真题第1套
  11. java 64位 32位_32位和64位的java程序可以通用吗
  12. Oracle P6培训系列:09定义计划编制视图
  13. [MLDN魔乐科技]Oracle视频教程
  14. 除了深度学习,你需要知道AI技术的23个方向
  15. 深投控合作之后 国美更具有想象力
  16. 浅谈全国统一规范普通高等学校学费标准问题
  17. iOS 上传苹果商店失败记录
  18. 在线光纤网速测试软件,在线网速测试_测网速_宽带测速
  19. 如何用photoshop给图片添加水印?
  20. 电子设计中常用的运放电路

热门文章

  1. HMC5883L 电子指南针
  2. NLP训练营学习记录(一)
  3. 开源python语音识别_5 款不错的开源语音识别/语音文字转换系统
  4. 家用投影仪不会选?记住这几个方面,帮你选到适合你的投影仪
  5. string.Format()之格式化数值类型数据
  6. 新概念英语1册57课
  7. 中国建筑设计行业市场调查研究及发展前景展望报告(2022-2028年)
  8. 没有公网IP,自建网站如何让外网访问?
  9. 测试音响声音啸叫软件,公共广播专业音响系统啸叫声与电流声排除方法_航天广电软件...
  10. 教你解决路由黑洞5招