awk与nginx日志分析

首先先了解下nginx日志的格式(未修改conf文件的日志格式)

220.248.44.xx- - [11/Jun/2019:08:32:47 +0000] "GET / HTTP/1.1" 200 53902 "http://47.102.121.2xx/" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0; SE 2.X MetaSr 1.0) like Gecko"
取一段测试日志进行分解

nginx.conf中日志格式
    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                                   ‘$status $body_bytes_sent "$http_referer" ‘
                                 ‘"$http_user_agent" "$http_x_forwarded_for"‘;

日志格式,对应变量如下

220.248.44.xx              $remote_addr  #请求者IP
-                                       - 格式
-                                      $remote_user   #请求者名称
 [11/Jun/2019:08:32:47 +0000]    [$time_local]  #时间
 "GET / HTTP/1.1"                        "$request"    #请求的内容
 200                                                  $status       #状态码
 53902                                             $body_bytes_sent  #请求文件的大小
 "http://47.102.121.2xx/"                "$http_referer"  #请求的页面
 "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0; SE 2.X MetaSr 1.0) like Gecko"       #来自何种方式(手机端,pc端等)
 "$http_x_forwarded_for"‘ #nignx请求头,此信息并不真实可信
 示例1:打印某个时段的日志
` awk ‘$4>="[14/Jun/2019:18:11:00" && $4<="[14/Jun/2019:18:20:00"‘ access.log`

示例2:打印某天访问IP的top10
awk ‘/14\/Jun\/2019/ {ips[$1]++} END{for (i in ips) { print i,ips[i]}}‘ access.log | sort -k2rn | head -10
首先正则过滤时间,将IP作为数组ips索引,值++ 行处理后遍历数组ips索引,最后打印索引和索引的值,进行排序  for(i in ips)取的是数组的索引

示例3:打印某天访问url的top10
awk ‘/14\/Jun\/2019/ {urls[$7]++} END{for (i in urls){ print i,urls[i]}}‘ access.log | sort -k2rn | head -10

示例4:打印某天访问url的大小统计top10及访问次数
awk ‘/14\/Jun\/2019/ {urls[$7]++;size[$7]+=$10} END{for(i in size){ print i,size[i],urls[i]}}‘ access.log | sort -k2rn | head -10
解释下为什么是urls[i],因为i从size中拿到了索引,索引是$7,也就是url.所以数组urls[i]等于urls[url],打印出来就是它++的值>,也就是次数

示例5:打印某天 ip访问状态码404的次数top10
awk ‘/14\/Jun\/2019/ {ip_stat[$1" "$9]++} END{for (i in ip_stat){ print i,ip_stat[i]}}‘ access.log | sort -k3rn | head -10

示例6:截取前一分钟的日志取ip行
date=`date -d "1 minute ago" +%d/%h/%Y:%H:%M`;awk -v date=$date ‘$0 ~ date {ips[$1]++} END{for (i in ips){ print i,ips[i]}}‘ access.log

原文地址:https://blog.51cto.com/13760226/2413526

时间: 2024-10-14 02:01:41

awk与nginx日志分析的相关文章

nginx日志分析利器GoAccess(转)

面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记忆能力以外,唯一的作用只有装A或者装C了. 对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快.满足这三点的goaccess确实是居家必备良药. 话说这个标题其实有点委屈GoAccess了,它是一个日志分析工具,并不只是为nginx使用的.你也可以用它来分析apa

ELKR分布式搭建nginx日志分析系统

ELKR分布式搭建nginx日志分析系统 一.名词介绍 1.什么是elk ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana.这三款软件都是开源软件,通常是配合使用. 2.Elasticsearch 2.1.Elasticsearch介绍 Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析.它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引

ELK系列二:kibana操作及nginx日志分析图表创建

本文主要介绍kibana4的基本操作,nginx日志分析饼形图.柱形图.客户端地理位置分布图等相关图表创建. 一.kibana基本操作 1.面板介绍 Settings:创建索引 Discover:查询数据,选择左上角的下拉按钮,可以选择相应的索引查找数据 Visualize:统计图表 Dashboard:显示面板,添加相应的图表在面板中 2.创建索引 索引创建时,按照不同的类型建,Time-field要选择@timestamp不选的话在discover面板中不出现时间过滤控件 二.饼形图创建(分

nginx日志分析利器GoAccess

面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记忆能力以外,唯一的作用只有装A或者装C了. 对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快.满足这三点的goaccess确实是居家必备良药. 话说这个标题其实有点委屈GoAccess了,它是一个日志分析工具,并不只是为nginx使用的.你也可以用它来分析apa

【分享】Nginx日志分析(上)

在很多时候,我们会非常关注网站的访问量,比如网站的日PV是多少.网站某个功能上线之后点击量是多少,像这些东西都是需要从web容器中的访问日志统计出来的,下面我们看一下如何在nginx中统计网站的访问信息 1.设置Nginx访问日志记录格式 在默认情况下,nginx只是记录相关get信息,像post页面是不记录的,所以下面需要修改nginx.conf,让其访问日志记录post等请求信息,在nginx.conf中server段中加入如下信息 log_format  access  '$remote_

Nginx 日志分析及性能排查

最近一直在做性能排查,思路就是根据分析Nginx日志,得到响应耗时的url.以及请求时间,再得到这段时间的请求量,并发量,分析是并发的原因,还是本身就比较慢,如果是应用本身的原因,只需要找到对应的代码,然后进行优化就好了 找到的几个原因,基本就是后端sql运行的比较多,单次访问看不出来,但是人比较多的时候就比较慢了,人少的时候20-200毫秒,人多的时候,200-6000毫秒,优化之后基本保持在几十毫秒,优化策略就是减少不必要的sql,加上缓存,基本解决了卡顿的问题,顺便把这次用的一系列命令记录

Goaccess---良心nginx日志分析工具

Goaccess是一个非常良心的开源软件,它的良心之处体现在如下方面: 1)安装简单: 2)操作容易: 3)界面酷炫: 安装Goaccess十分的简单,在centos里直接#yum install goaccess,如果yum源里没有goaccess,可以先安装epel.安装epel的方法如下: wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm wget http://rpms.famil

ELK安装配置及nginx日志分析

一.ELK简介1.组成ELK是Elasticsearch.Logstash.Kibana三个开源软件的组合.在实时数据检索和分析场合,三者通常是配合使用,而且又都先后归于 Elastic.co 公司名下,故有此简称.Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等.Logstash是一个完全开源的工具,它可以对你的日志进行收集.分析,并将其存储供以后使用.kibana 是一个开源和

使用elk+redis搭建nginx日志分析平台

logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录.其次,需要有个队列,redis的list结构正好可以作为队列使用.然后分析使用elasticsearch就可以进行分析和查询了. 我们需要的是一个分布式的,日志收集和分析系统.logstash有agent和indexer两个角色.对于agent角色,放在单独的web机器上面,然后这个agent不断地读取nginx的日志文件