linux取整个日志文件,高效日志分析 - 人人必学的awk
作为每一个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相关推荐
- Zookeeper日志文件事务日志数据快照
Zookeeper持久化两类数据,Transaction以及Snapshot,logDir存储transaction命令,dataDir存储snap快照,其下子目录名称以version-2命名,子目录 ...
- logback多进程写同一日志文件导致日志混乱问题
记录一次logback多进程写同一日志文件导致日志混乱问题 参考该博客解决问题
- 磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制
RAID磁盘阵列 • 廉价冗余磁盘阵列 – Redundant Arrays of Inexpensive Disks – 通过硬件/软件技术,将多个较小/低速的磁盘整合成一 个大磁盘 – 阵列的价值 ...
- 分析mysql日志文件_MySQL日志文件与分析
1.查询日志.慢查询日志.二进制日志对比 查询日志 general_log 会记录用户的所有操作,其中包含增删查改等 可以指定输出为表 慢查询日志 slow_log 只要超过定义时间的所有操作语句都记 ...
- java分析日志文件_java程序如何对监控软件的日志文件进行如下分析?
一个监控软件的日志文件,内容如下: 日期 时间 接口 设备 状态 2016-09-01 08:00 J1 ...
- log4j日志文件的使用及log4j日志文件失效原因分析
log4j的使用步骤 1.导入log4j-*.jar,例:log4j-1.2.17-jar; <dependency><groupId>log4j</groupId> ...
- 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 ...
- SpringBoot_日志-指定日志文件和日志Profile功能
这也只能改个别的配置,Springboot对日志到底是怎么样的呢spring-boot-1.5.12.RELEASE.jar如果你用logback日志文件是什么样的org.springframewor ...
- mysql 日志文件_Mysql 日志文件类型
简介: Mysql 中提供了多种类型的日志文件,分别反映 Mysql 的不同信息,了解它们很有必要. 1.Error log ( 错误日志 ) 错误日志记录了 Mysql Server 运行过程中所有 ...
最新文章
- e.V4p.C0/index.php,php-fpm进程在Kubernetes中接收SIGKILL信号
- python余弦相似度
- 如何用python做词云图_科学网—如何用Python做词云?(基础篇视频教程) - 王树义的博文...
- idea启动tomcat很慢_idea使用maven创建web项目
- 前端学习(226):定位使用
- DataCleaner(4.5)第一章
- RunLoop已入门?不来应用一下?
- Wu-Manber字符串多模式匹配
- openGL ES 教程(二):渲染管线
- 2018年3月江苏省计算机二级C语言真题第1套
- java 64位 32位_32位和64位的java程序可以通用吗
- Oracle P6培训系列:09定义计划编制视图
- [MLDN魔乐科技]Oracle视频教程
- 除了深度学习,你需要知道AI技术的23个方向
- 深投控合作之后 国美更具有想象力
- 浅谈全国统一规范普通高等学校学费标准问题
- iOS 上传苹果商店失败记录
- 在线光纤网速测试软件,在线网速测试_测网速_宽带测速
- 如何用photoshop给图片添加水印?
- 电子设计中常用的运放电路
热门文章
- HMC5883L 电子指南针
- NLP训练营学习记录(一)
- 开源python语音识别_5 款不错的开源语音识别/语音文字转换系统
- 家用投影仪不会选?记住这几个方面,帮你选到适合你的投影仪
- string.Format()之格式化数值类型数据
- 新概念英语1册57课
- 中国建筑设计行业市场调查研究及发展前景展望报告(2022-2028年)
- 没有公网IP,自建网站如何让外网访问?
- 测试音响声音啸叫软件,公共广播专业音响系统啸叫声与电流声排除方法_航天广电软件...
- 教你解决路由黑洞5招