首页 > 使用awk,sort和uniq从ATS访问日志中统计出异常链接域名的次数排名

使用awk,sort和uniq从ATS访问日志中统计出异常链接域名的次数排名

在运维过程中,发现portal中出现流量异常曲线,



就从排查ATS的访问日志中的异常域名开始,下面是我截获的对应时段的访问日志截图



发现里面有502,403等异常响应,我们将这段访问日志文件记为exception_peak.log。采用下面的命令来过滤出502的访问记录,并剥离出对应的访问链接的host,统计指定时段中的该host出现次数,最后逆序排名。

cat exception_peak.log | grep ' 502 ' | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | sort | uniq -c | sort -nr > host_peak.log

这里说明如下:

grep ' 502 ' 只过滤出502的访问记录,

awk -F '"' '{print $2}'表示以双引号为分隔线,取第2段子域,也就是访问链接,

awk -F '/' '{print $3}'表示从访问链接中提取出host

 sort | uniq -c  表示现将可能重复的行放到一起,再去掉重复行,并标注每行重复的次数

sort -nr  表示按重复次数逆序排名

这样处理的结果将会被重定向到一个名为 host_peak.log的日志文件中,它的内容如下



这就是我们想要的效果。

注意:如果采用下面的命令

cat exception_peak.log | grep ' 502 ' | awk -F '"' '{print $2}' | awk -F '/' '{print $3}' | awk 'a[$1]+=1;END{for(i in a){print a[i]" "i;}}' | sort -k1 -urn > host_peak.log

我们会发现有个小bug就是,数字ip的次数无法统计,参见下面的截图



另外,下面是可能需要用到的几个命令:

awk -F “/“ ‘{print $0}’ 

awk -F “/“ ‘{if ($1==502) print $2}’ 

awk -F “:“ ‘{print $1,$2}’ 

更多相关:

  • 文章目录awk和sed的区别awk脚本的流程控制awk 记录和字段字段的引用awk表达式赋值操作符算数操作符系统变量(awk本身自定义的系统变量)关系操作符布尔操作符awk 条件和循环条件语句循环awk 的数组数组的定义数组的遍历删除数组举例,编写awk脚本文件`avg.awk`命令行参数数组复杂数组的使用案例awk函数算数函数字符...

  • 变量传递 外部变量传入 lsblk|awk -v A=$A -v B=$B '{print A,B}'lsblk | awk '{print A,B}' A=$A B=$B 内部变量传出 eval $(lsblk|awk '{print "A='$1'"}')eval $(lsblk|awk 'printf("A=%s ",$1)...

  • awk的语法 awk [options] ‘Pattern {Actions}’ file1,file2… 之前介绍了三种模式:空模式,关系运算模式,BEGIN/END模式 正则模式 模式可以理解成条件,正则模式就是满足正则表达式条件的,就执行相应的动作,否则不执行。 如果我们想要找到在/etc/passwd文件中,...

  • awk有一些内置变量和外置变量,内置变量就是awk自带的变量,用户可以拿来直接使用,如FS,OFS等 awk常用内置变量如下几种: FS:输入单词分隔符,默认是空格 OFS:输出单词分隔符,默认是空格 RS:指定输入时候的换行符(awk是一行行处理数据的) ORS:指定输出的符号,替代换行符(awk以换行符...

  • #coding:utf-8'''Created on 2017年10月25日@author: li.liu'''import pymysqldb=pymysql.connect('localhost','root','root','test',charset='utf8')m=db.cursor()'''try:#a=raw_inpu...

  • python数据类型:int、string、float、boolean 可变变量:list 不可变变量:string、元组tuple 1.list list就是列表、array、数组 列表根据下标(0123)取值,下标也叫索引、角标、编号 new_stus =['刘德华','刘嘉玲','孙俪','范冰冰'] 最前面一个元素下标是0,最...

  • from pathlib import Path srcPath = Path(‘../src/‘) [x for x in srcPath.iterdir() if srcPath.is_dir()] 列出指定目录及子目录下的所有文件 from pathlib import Path srcPath = Path(‘../tenso...

  • 我在使用OpenResty编写lua代码时,需要使用到lua的正则表达式,其中pattern是这样的, --热水器设置时间 local s = '12:33' local pattern = "(20|21|22|23|[01][0-9]):([0-5][0-9])" local matched = string.match(s, "...

  • 在分析ats的访问日志时,我经常会遇到将一些特殊字段对齐显示的需求,网上调研了一下,发现使用column -t就可以轻松搞定,比如 找到ATS的access.log中的200响应时间过长的日志 cat access.log | grep ' 200 ' | awk -F '"' '{print $3}' > taoyx.log co...

  • Node.js 中文网Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。http://nodejs.cn/先安装nodejs 在自己的网站项目文件夹根目录...

  • 对象表示方式   1、第一种方式:使用new操作符后跟Object构造函数 var person = new Object();
    person.name = 'Nicholas';
    person.age = 29; 2、对象字面量表示法 var person = {name:'Nicholas',ag...

  • 一、使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章《尝试.Net Core—使用.Net Core + Entity FrameWork Core构建WebAPI(一)》一致。 但是在我们这里,由于docker中无法部署sql server,所以我采用了Mysql数据库,顺便...