利用 awk 统计nginx 中某一个用户的访问次数
线上总是会遇到攻击,所以就需要分析 access.log 看看那些用户的访问次数不正常,针对这些不正常的用户,要做处理,以 access.log为例说明下怎么统计.
通过 access.log 日志来统计某个用户的访问次数的方法:(业务场景是登录,然后 access.log 里只有登录的 url,然后我们有一个特定的参数需要客户端传递过来,通过对此参数的过滤来分析行为,因为涉及到用户的数据都是加密的,没办法直接通过用户名直接过滤,access.log 的日志内容我做里处理,为了不泄露线上的数据.下面的 uniqueCode 和我们日志里的某一个字段对应,但是我们日志里是加密的,这里为了简单化,没做加密,统计的方法最重要。)
1)、access.log 日志内容如下:
1.2.3.4 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 896 "0.009" "okhttp/3.9.1" "userName=zhuzi&password=z13y14Bao&uniqueCode=88888888"
2.3.4.5 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 887 "0.010" "okhttp/3.9.1" "userName=zi&password=z13y14Bao&uniqueCode=99999999"
3.2.3.4 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 896 "0.009" "okhttp/3.9.1" "userName=haiyang&password=21131409oui&uniqueCode=11111111"
4.3.4.5 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 887 "0.010" "okhttp/3.9.1" "userName=anya&password=213sdfasdf&uniqueCode=44444444"
4.3.4.5 - - [04/May/2018:09:26:09 +0800] "POST /XXX/login.htm HTTP/1.1" 200 887 "0.010" "okhttp/3.9.1" "userName=anya&password=213sdfasdf&uniqueCode=44444444"
2)、取出 uniqueCode
因为uniqueCode 在最后,有一个 ",所以我们可以添加一个 & 1=1 ,
sed -i 's/"$/\&1=1"/g' access.log
grep 'uniqueCode' 1_access.log | awk -F '&' '{for(x=1;x<NF;x++)if(index($x, "uniqueCode")>0){print substr($x,12); break}}' >out.log
3)、统计每个 applicationId 的个数
cat out.log | awk '{arr[$1]+=1}END{for(i in arr)print i,arr[i]}' | sort -t ' ' -n -k2
好尴尬,费了好大劲,才写了上面的方法来统计,结果最近发现了一个更简单的方法来统计。哎,还是 linux 不熟呀.
sort out.log|uniq -c

好了,搞定收工.
利用 awk 统计nginx 中某一个用户的访问次数的更多相关文章
- Python统计列表中的重复项出现的次数的方法
本文实例展示了Python统计列表中的重复项出现的次数的方法,是一个很实用的功能,适合Python初学者学习借鉴.具体方法如下:对一个列表,比如[1,2,2,2,2,3,3,3,4,4,4,4],现在 ...
- HashTable集合和练习题_计算一个字符串中每一个字符出现的次数
HashTable集合 /** * java.util.Hashtable<K,V>集合 implement Map<K,V>接口 * Hashtable:底层也是一个哈希表, ...
- PHP 统计数组中所有的值出现的次数 array_count_values 函数
array_count_values() 函数用于统计数组中所有的值出现的次数. array_count_values() PHP array_count_values() 函数用于统计数组中所有的值 ...
- 获取一个字符串中每一个字母出现的次数使用map集合
package 获取字符串中单字符出现次数; import java.util.Scanner; import java.util.TreeMap; /* * 需求:获取一个字符串中每一个字母出现的次 ...
- String 类中的几个练习--获取指定字符串中,大写字母、小写字母、数字的个数||获取一个字符串中,另一个字符串出现的次数
package cn.homework.demo1; public class GetCount { /* * 获取一个字符串中,另一个字符串出现的次数 * 思想: * 1. indexOf到字符串中 ...
- Java 获取一个字符串中,另一个字符串出现的次数
Java 获取一个字符串中,另一个字符串出现的次数 思想: 1. indexOf到字符串中到第一次出现的索引2. 找到的索引+被找字符串长度,截取字符串3. 计数器++ 代码实现: public cl ...
- java统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /* ...
- PHP实现redis限制单ip、单用户的访问次数功能
本文实例讲述了PHP实现redis限制单ip.单用户的访问次数功能.分享给大家供大家参考,具体如下: 有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次 类似于这 ...
- linux中添加一个用户到指定用户组的两种方式,修改一个用户到指定用户组的一种方式
添加一个用户到指定用户组: gpasswd –a 用户名 组名usermod –G 组名 用户名 //第一种:gpasswd –a 用户名 组名 [root@localhost ~]# id user ...
随机推荐
- Linux samba服务搭建
实验准备: 准备两台机器,server0(172.25.0.11)和deskop0(172.25.0.12),要求在server0上实现samba共享,在desktop0上访问共享. 1.允许mark ...
- C++———Vector
#include<algorithm> #include <vector> #include <iostream> #include <stdio.h> ...
- 基于Eureka的服务治理
代码地址如下:http://www.demodashi.com/demo/11927.html 一.服务的注册与发现 关系调用说明: 服务生产者启动时,向服务注册中心注册自己提供的服务 服务消费者启动 ...
- CVTE C/C++开发工程师笔试题(一)
问题描述: 字符串组装. 现在需要将一些数据格式不同的数据组装成一个char型字符串输出,数据来源包含一个char型的字符串,一个short型的16进制数据: 举例: 假若定义如下2个变量: 1.ch ...
- java 调用存储过程
1.java 中调用pl/sql 中的存储过程 call 存储过程的名称(参数名称,参数名称) 在service 层中调用 存储过程 String sql=" call proc_ ...
- python 聊天程序(基于UDP)
from threading import Thread from socket import * updSocket = socket(AF_INET,SOCK_DGRAM) updSocket.b ...
- 位移运算 << >> >>>
位移运算都是补码的运算 左移<<:左移后第一位可能是1,也可能是0,所以可能是正数,也可能是负数,正负都补0 右移>>:抹掉最后一位,近似于十进制值除以2,负数右移高位补1,正 ...
- boost中bind的使用
:first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...
- 新手必备的Linux知识
测试人员为什么学习linux? 对于软件测试人员来说,我们测试的任何产品都是基于操作系统.比如我们每天都在使用的QQ软件,它有windows.ios.Android.Mac OS等版本,需要把QQ安装 ...
- gcc8.2安装__(沒有成功)
重要:https://gcc.gnu.org/install/prerequisites.html 官方安装所需要的工具文档 还有就是这篇文章 http://blog.51cto.com/2716 ...