linux - 从 Apache/Nginx Access.log 检索用户代理
问题描述
我有下面的命令,它打印出命中、主机 IP(本地服务器/负载平衡器)和外部 IP(导致命中的那个)我还想在给出的信息旁边打印出用户代理信息。请问如何实现?
cat access.log | sed -e 's/^\([[:digit:]\.]*\).*"\(.*\)"$/\1 \2/' | sort -n | uniq -c | sort -nr | head -20
我得到的是下面...
命中、主机 IP、外部 IP
如果可能的话,我想要什么...
点击、IP(主机示例)、外部 IP(导致点击)、用户代理
10000 192.168.1.1 148.285.xx.xx Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/98 Safari/537.4
下面附上日志的摘录
192.168.xxx.x - - [10/Jun/2019:12:40:15 +0100] "GET /company-publications/152005 HTTP/1.1" 200 55848 "google.com" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6" "xx.xx.xx.xx"
解决方案
如果 GNU AWK ( gawk
) 可用,请尝试以下操作:
awk -v FPAT='(\"[^"]+\")|(\\[[^]]+])|([^ ]+)' '
{ gsub("\"", "", $9); gsub("\"", "", $10); print $1 " " $10 " " $9 }
' access.log | sort -n | uniq -c | sort -nr | head -20
- 的值
FPAT
表示 中每个字段的正则表达式access.log
。即:“用双引号括起来的字符串”、“用方括号括起来的字符串”或“用空格分隔的字符串”。 - 然后,您可以将每一行拆分
access.log
为字段:$1
forhost IP
、$10
forexternal IP
和$9
foruser agent
。
推荐阅读
- android - 在 Textview 中加载包含图像的 HTML 文件
- asp.net-mvc - .net MVC 将嵌套模型发布到控制器,数据集为空
- angular-material - 未定义标识符“categoryName”。'Array' 不包含这样的成员
- docker - 如何在 aerokube selenoid docker 映像上启动文件服务器
- openstack - 无法对 openstack 运行实例进行 ssh
- php - 防止 dql 加入实体
- sorting - 如何在 COGNOS Graph 中对月份(如 APR-17、APR-18、AUG-17、DEC-18、DEC17)应用升序排序
- c# - 无法访问类变量 C#
- encryption - 始终加密不适用于加入查询
- typescript - TypeScript 中的多态性