分析nginx日志常用的命令总结

1. 利用grep ,wc命令统计某个请求或字符串出现的次数

比如统计GET /app/kevinContent接口在某天的调用次数,则可以使用如下命令:

cat /usr/local/nginx/logs/access.log | grep ‘GET /app/kevinContent‘ | wc -l

其中cat用来读取日志内容,grep进行匹配的文本搜索,wc则进行最终的统计。

当然只用grep也能实现上述功能:

grep ‘GET /app/kevinContent‘  /usr/local/nginx/logs/access.log -c

统计所有接口的调用次数并显示出现次数最多的前二十的URL

 cat /usr/local/nginx/logs/access.log|awk ‘{split($7,b,"?");COUNT[b[1]]++;}END{for(a in COUNT) print  COUNT[a], a}‘| sort -k1 -nr|head -n20 

2722 /

10 /group1/M00/00/00/wKgKylqT3OCAUrqYAAAwK2jUNaY262.png

9 /group1/M00/00/00/wKgKylqUxBOAFo8hAAKHUIZ3K9s443.jpg

6 /group1/M00/00/00/wKgKylqUrceAGkPOAAAwK2jUNaY843.png

4 /group1/M00/00/00/wKgKylqTsFCAdeEuAAKHUIZ3K9s287.png

3 /group2/M00/00/00/wKgKy1qUtu2Acai1AAKHUIZ3K9s555.jpg

2 /favicon.ico

1 /group2/M00/00/00/wKgKy1qT3P-Ae-vQAAKHUIZ3K9s459.png

1 /group2/M00/00/00/wKgKy1qT3P-Ae-vQAAKHUIZ3K9s459.jpg

1 /group1/M00/00/00/wKgKylqUyMuAdkLwAAAwK2jUNaY176.png

解释说明:

这里awk是按照空格把每一行日志拆分成若干项,其中$7对应的就是URL,当然具体对应的内容和使用nginx时设置的日志格式有关。

这样就可以通过拆分提取出IP,URL,状态码等信息。splitawk的内置函数,在此的意思是按照“?”将URL进行分割得到一个数组,并赋值给b。

COUNT[b[1]]++表示相同的接口数目加1。sort用来排序,-k1nr表示要把进行排序的第一列作为数字看待,并且结果倒序排列。

head -n20意为取排名前二十的结果。

3. 统计报错的接口 

统计nginx日志中报错较多的接口,对于分析服务器的运行情况很有帮助,也可以有针对性的修复bug和性能优化。

[[email protected]_storage_s1 ~]# cat /usr/local/nginx/logs/access.log|awk ‘{if($9==500) print $0}‘|

awk ‘{split($7,b,"?");COUNT[b[1]]++;}END{for(a in COUNT) print  COUNT[a], a}‘|sort -k 1 -nr|head -n10

先用awk’{if(9==500)print0}’过滤出500错误的日志,然后在此基础上做统计,其思路同2类似!

4. 统计HTTP响应状态码

通过统计响应状态码可以看出服务器的响应情况,比如499较多时可以判断出服务器响应缓慢,再结合3可以找出响应慢的接口,

这样就能有针对性进行性能分析和优化。

[[email protected]_storage_s1 ~]# cat /usr/local/nginx/logs/access.log |awk ‘{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}‘

| sort -k 2 -nr

200 2733

304 20

404 11

5. 统计服务器并发量

cat /usr/local/nginx/logs/access.log |grep ‘10.15.19.138‘| awk ‘{COUNT[$4]++}END{for( a in COUNT) print a,COUNT[a]}‘

|sort -k 2 -nr|head -n20

nginx转发请求时可以记录响应请求的服务器IP,先通过grep过滤出某个服务器所有的请求,然后统计各个时间点的并发请求响应的数量即可得到某个服务器的并发量。

$4对应的是响应时间。当然,如果把grep的内容更换成某个接口也就可以统计出该接口对应的并发量了。

6. grep多条件与或操作

有时候我们需要在nginx日志通过多个条件来查找某些特定请求,比如我需要找个某个用户浏览文章的请求,则可以需要同时匹配两个条件:

浏览文章接口GET /app/kevinContent和userId=59h7hrrn。

grep对应的与操作命令如下:

[[email protected]_storage_s1 ~]# grep -E "GET /app/kevinContent.*userId=59h7hrrn" /usr/local/nginx/logs/access.log

grep与命令格式: grep -E “a.*b” file,ab条件同时成立

grep或命令的格式为:grep -E “a|b” file ,ab两个条件有一个成立即可。

7. grep打印匹配的前后几行

有时候我们需要查找某个特定请求的前后几行的请求,以观察用户的关联操作情况。grep提供了一下几条命令:

# grep -C 5 ‘parttern‘ inputfile    //打印匹配行的前后5行。

# grep -A 5 ‘parttern‘ inputfile    //打印匹配行的后5行

# grep -B 5 ‘parttern‘ inputfile    //打印匹配行的前5行

grep -An  或grep -A n

grep -Bn  或grep -B n

grep -Cn  或grep -C n

如下,打印出access.log日志文件中匹配/app/kevinContent关键字符所在行的前后各10行

[[email protected]_storage_s1 ~]# grep -C 10 ‘GET /app/kevinContent‘ /usr/local/nginx/logs/access.log

原文地址:https://www.cnblogs.com/fengzhongzhuzu/p/8963673.html

时间: 2024-09-28 12:53:32

分析nginx日志常用的命令总结的相关文章

Awk,Cat,Head分析Nginx日志常用命令

Nginx 日志分析 1.根据访问IP统计UV awk '{print $1}'  access.log|sort | uniq -c |wc -l 2.统计访问URL统计PV awk '{print $7}' access.log|wc -l 3.查询访问最频繁的URL awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more 4.查询访问最频繁的IP awk '{print $1}' access.log|sort |

烂泥:利用awstats分析nginx日志

昨天把nginx的日志进行了切割,关于如何切割nginx日志,可以查看<烂泥:切割nginx日志>这篇文章. 今天打算分析下nginx日志,要分析nginx日志,我们可以通过shell脚本和第三方软件awstats进行分析,在此我们选择的是通过第三方软件awstats进行分析. 要使用awstats分析nginx日志,我们要安装awstats,而在安装awstats之前,我们需要先来介绍下awstats是什么? 一.awstats是什么 awstats是一个免费非常简洁而且强大有个性的基于Pe

awk分析nginx日志中响应时间的方法

针对响应时间慢的问题,我们在nginx日志格式中增加响应时间,现在需要针对响应时间进行分析,查找出相对较慢的响应时间. 1.确认下日志文件格式 日志格式: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_for

ELK分析nginx日志

开源实时日志分析 ELK 平台能够完美的解决我们上述的问题, ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products l   Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等. l   Logstash 是一个完全开源的工具,他可以对你的日志进行收集.分析,

shell脚本分析nginx日志

第一版,比较粗糙,仅限于能用 正在写入的文件不能用tar进行压缩 --------压缩日志---------------------- 94 access.log 95 tar: access.log: file changed as we read it 96 #### 压缩日志失败 #### #!/bin/sh #分析nginx日志 DATE=`date '+%Y%m%d-%H%M'` ARCHIVE=/usr/log_bak/nginx_$DATE.tar.gz MESSAGE=/usr/

awstats分析nginx日志文件

awstats分析nginx日志文件,将生成的结果(为txt文件)保存在/var/www/awstats目录下,通过apche来 显示生成的结果. nginx的域名为:www.a.com:80 LogFile="/usr/local/mybin/nginx/logs/access.log"  #nginx的日志文件路径 DirData="/var/www/awstats/" #awstats生成结果的保存路径 SiteDomain="www.a.com&q

python分析nginx日志

问题:分析nginx日志并找出访问最多10个IP地址的来源以及次数 使用python模块IP 使用方法以及下载地址:https://pypi.python.org/pypi/17MonIP 相关python脚本: #!/usr/bin/env python #coding:utf8 #Auth: lad #date:2016-12-05 #desc:parser the nginx's log,the head of 10  import sys reload(sys) sys.setdefau

python 正则分析nginx日志

有个需求要分析nginx日志,也懒得去研究logstach之类的开源工具,干脆直接写一个脚本,自己根据需求来实现: 先看日志格式:我们跟别人的不太一样,所以没办法了: 12.195.166.35 [10/May/2015:14:38:09 +0800] "list.xxxx.com" "GET /new/10:00/9.html?cat=0,0&sort=price_asc HTTP/1.0" 200 42164 "http://list.zhon

python分析nginx日志的ip,url,status

Python 脚本如下: #!/usr/bin/env python #_*_coding:utf-8 _*_ __author__ = 'lvnian' #!/usr/bin env python # coding: utf-8 import MySQLdb as mysql import sys, os db = mysql.connect(user="root",passwd="[email protected]",db="intest",