日志结构分析

分析日志状态码所在位置为第九个

遍历取出第一行日志的每个字段

//取出第一行日志
awk 'NR==1{for(i=1;i<=NF;i++)print i"= "$i}' nginx.log

for循环取出每个字段
awk 'NR==1{for(i=1;i<=NF;i++)print i"= "$i}' nginx.log

练习1

找出所有404和500的错误日志,统计错误日志的行数

使用正则筛选出404 和500的类型的状态码,管道拼接统计总个数
完整命令 :cat nginx.log | awk '{print $9}' | grep -E '404|500'|wc -l
解法2:
使用awk 直接匹配第九个是400/500的状态码的值,awk 理论上可以替代grep awk 'pattern{action}'
awk 'BEGIN{} END{}’开始和结束
awk ' /Running/’正则匹配
awk ' / aa/ ,/bb/'区间选择
用法 :cat nginx.log | awk '/ 404 | 500 /{print $9}' | wc -l
awk '$2~/xxx/'字段匹配
用法:awk '$9~/404|500/{print $9}' nginx.log | wc -l
awk 'NR==2'取第二行
awk 'NR>1’去掉第一行
使用t+1自增 计算统计: awk '$9~/404|500/{t+=1}END{print t}' nginx.log

练习2:

统计IP访问量(独立ip访问数量)

# 打印所有ip, sort- u 去重排序,wc-l 统计总共数目
awk '{print $1}' nginx.log |sort -u |wc -l

练习3:

查看某一时间段的IP访问量(1-2点)

查找出排序,unqi-c去重
grep "05/Dec/2018:0[1-2]" nginx.log|' | sort | uniq -c| sort -nr | wc -l
简洁版:
grep "05/Dec/2018:0[1-2]" nginx.log | awk '{print $1}|sort -u |wc -l

练习4:

查看访问最频繁的前10个IP

查找ip 去重后,倒序排序,展示前10个
awk '{print $1}' nginx.log |sort -n |uniq -c|sort -rn| head -10

练习5

查看访问100次以上的IP

sort 排序 sort -n 按数字排序 sort-r 反转
uniq 去重 uniq -c 去重并统计重复次数
head -3 头三个 tail -3 尾三个

#去重找到所有ipi地址,awk 判断 将大于100的访问次数打印后降序排序
awk '{print $1}' nginx.log |sort -n |uniq -c|awk '{if($1>100) print $0}'| sort -rn

练习6

找出名称为 /topics 的平均响应时间,响应时间在倒数第二个字段

得知/topics 所在为第7个字段

#算出全部响应时间 为倒数第二个字段: total和为{total+=$(NF-1) ,总次数为自增数据
less nginx.log | awk '$7=="/topics"{total+=$(NF-1);count+=1}END{print total/count}' nginx.log

响应时间在倒数第二个字段

练习7

找出访问量最高的页面地址 借助于sed的统计分析

根据日志分析的页面的地址,需要使用sed -E s (-e script 指定sed编辑命令 )替换

查找替换: s /REGEXP/REPLACEMENT /[FLAGS]

将第2替换为x:echo 1234 | sed 's#2#x#'

将第2和3替换为xecho 12433 | sed 's#[2-3]#x#g'

分组匹配与字段提取:sed 's#([0-9]*)l([a-z]*)#\1 \2#'

语法解析

未替换前语句

使用 sed -E 's#[0-9]{4,}'#_id_#' ' 将第四位的数字替换为_id_(注:s后的符号可以跟任意符号)

- /topics/16689/replies/124751/edit 把数字替换为 /topics/_id_/replies/_id_/edit
- /_img/uploads/photo/2018/c54755ee-6bfd-489a-8a39-81a1d7551cbd.png!large 变成 /_img/uploads/photo/2018/_id_.png!large
- /topics/9497 改成 /topics/_id_
- url中的query可以去掉
- 其他规则参考如上 awk '{print $7}' nginx.log |
sed -E \
//替换字母数字编码的图片前缀为_id_
-e 's#/[0-9]*/[a-z0-9\-]*\.(png|gif|jpeg|jpg).*#/_id_/_id_.image#' \
//替换问号和感叹问为空
-e 's#[\?!].*##' \
-e 's#/(topics|replies|avatar)/[0-9]{1,}#/\1/_id_#g' \
// 替换topics|followers|following|favorites|replies|columns|reward|calendar|people 字段后的id
-e 's#/[^/]*/(topics|followers|following|favorites|replies|columns|reward|calendar|people)#/_uid_/\1#' \
-e 's#^/[^/]*$#/_top_#' \
-e 's#/topics/node[0-9]*#/topics/node#' |
sort | uniq -c | sort -nr
}

练习7

性能统计脚本 perf_avg, 统计Linux进程中 AliYunDun 进程的cpu与mem,持续统计20s,每秒输出一下即时的cpu与mem的利用率,并在最后结束时候给出cpu与mem的平均值

//使用top -b 高亮展示当前进程,-d 1 每1s更新一次,-n 更新为3次
top -b -d 1 -n 3
// grep 实时取出数据,
grep --line-buffered -i aliyundun$
//计算cpu与mem的利用率
cpu=$(NF-3);mem=$(NF-2);cpu_total+=cpu;mem_total+=mem;
//完整语句
top -b -d 1 -n 3 | grep --line-buffered -i aliyundun$ |
awk
//先打印抬头
'BEGIN{OFS="\t";print "CPUf", "MEM"}
{cpu=$(NF-3);mem=$(NF-2);print cpu,mem;cpu_total+=cpu;mem_total+=mem;
}
//最后打印数据
END{print "\navg:" ;print cpu_total/NR, mem_total/NR}'

练习8:

网络连接数统计 net_avg

// 查看网络进程
netstat -tnp
//获取 ip 和监听状态
awk '{print $4,$6}'
//打印端口 号
awk -F : '{print $2}'
//完整命令
netstat -tnp |awk '{print $4,$6}'|awk -F : '{print $2}'|sort| uniq -c

优化

去除上图多余字段

//去除前两行数据
sed 1,2d
//完整
netstat -tnp |sed 1,2d | awk '{print $4,$6}' | awk -F: '{print $2}' | sort | uniq -c | sort -nr

Linu常用日志分析实战的更多相关文章

  1. Linux日志分析的实战专题

      来自 日志也是用户应该注意的地方之一.不要低估日志文件对网络安全的重要作用,因为日志文件能够详细记录系统每天发生的各种各样的事件.用户可以通过日志文件 检查错误产生的原因,或者在受到攻击和黑客入侵 ...

  2. nginx常用运维日志分析命令

    nginx常用日志分析命令 运维人员必备 常用日志分析命令 1.总请求数 wc -l access.log |awk '{print $1}' 2.独立IP数 awk '{print $1}' acc ...

  3. 《UNIX/Linux网络日志分析与流量监控》新书发布

    本书从UNIX/Linux系统的原始日志(Raw Log)采集与分析讲起,逐步深入到日志审计与计算机取证环节.书中提供了多个案例,每个案例都以一种生动的记事手法讲述了网络遭到入侵之后,管理人员开展系统 ...

  4. (转载)shell日志分析常用命令

    shell日志分析常用命令总结 时间:2016-03-09 15:55:29来源:网络 导读:shell日志分析的常用命令,用于日志分析的shell脚本,统计日志中百度蜘蛛的抓取量.抓取最多的页面.抓 ...

  5. HDInsight-Hadoop实战(一)站点日志分析

    HDInsight-Hadoop实战(一)站点日志分析 简单介绍 在此演示样例中.你将使用分析站点日志文件的 HDInsight 查询来深入了解客户使用站点的方式.借助此分析.你可查看外部站点一天内对 ...

  6. linux下常用的日志分析命令

    linux下常用的日志分析命令   本文介绍下,在linux中常用的一些分析日志的命令行或脚本,有需要的朋友参考下.     形如下面这样的access.log日志内容: 211.123.23.133 ...

  7. 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步

    第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...

  8. Linux常用的日志分析命令与工具

    >>基础命令 操作 命令 说明 查看文件的内容 cat -n access.log -n显示行号 分页显示文件 more access.log Enter下一行,空格下一页,F下一屏,B上 ...

  9. 利用ELK分析Nginx日志生产实战(高清多图)

    本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意 ...

随机推荐

  1. vulnhub-DC:6靶机渗透记录

    准备工作 在vulnhub官网下载DC:6靶机DC: 6 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 利用nmap ...

  2. 重返MySQL之MySQL基础

    重返MySQL之MySQL基础 本章详细介绍了,什么是数据库,常见的关系型数据库有哪些,什么是MySQL,及MySQL中DDL操作表,DML操作表记录. 1.0 数据库概述 1.1 数据存储的方式 目 ...

  3. [解决方案]docker: Error response from daemon: OCI runtime create failed

    错误原因 在新服务器上安装好docker后,发现无法运行,经常一顿搜索后,发现是docker安装的版本过高,最新版本docker-18.06 的核心好像没有经过充分的测试就发布了. 导致一运行,就提示 ...

  4. 如何将fidd上抓的包移到jmete中

    1.fiddler的安装配置就不说了, 网上有很多资源, 不会太难 2.使用fiddler抓包, 相信进来看这篇文章的博友都已经会使用fiddler抓包 3.打开jmeter, 添加>测试计划& ...

  5. vulnhub-DC:8靶机渗透记录

    准备工作 在vulnhub官网下载DC:8靶机DC: 8 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 利用nmap ...

  6. IOC(概念和原理)

    什么是 IOC (1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理 (2)使用 IOC 目的:为了耦合度降低 (3)做入门案例就是 IOC 实现 IOC 底层原理 xml 解 ...

  7. 10 个超棒的 JavaScript 简写技巧

    今天我要分享的是10个超棒的JavaScript简写方法,可以加快开发速度,让你的开发工作事半功倍哦. 开始吧! 1. 合并数组 普通写法: 我们通常使用Array中的concat()方法合并两个数组 ...

  8. spring-data-jdbc的基础使用(一)

    前言 很多人知道Mybatis,知道Jpa,但是对spring-data-jdbc可能了解的少之又少.注意我们这里说的是data-jdbc,而不是普通的jdbc.它拥有了类似jpa的一些特性,比如能够 ...

  9. Django3使用WebSocket实现WebShell

    前言 最近工作中需要开发前端操作远程虚拟机的功能,简称WebShell. 基于当前的技术栈为react+django,调研了一会发现大部分的后端实现都是django+channels来实现websoc ...

  10. SpringBoot-2-1-6-集成activiti7-1-0-M4

    pom.xml <dependencyManagement> <dependencies> <dependency> <groupId>org.acti ...