nginx 日志格式如下:
log_format main '$remote_addr######-######$remote_user######[$time_local]######"$request"######'
'$status######$body_bytes_sent######"$http_referer"######'
'"$http_user_agent"######$request_time######$http_host######$request_id######$upstream_addr######$upstream_status######$http_X_Request_Id######$scheme######$upstream_response_time######$http_x_real_ip######$request_length';
111.78.77.85######-######-######[10/Apr/2023:11:43:36 +0800]######"POST /gateway/api HTTP/2.0"######500######576######"-"######"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36; Qing/0.0.8; lang:zh-CN;bno:4.1.4(2302271341);"######0.000######jxjgy.jxsjgjt.com######45cecf996dd72b3569244f890308f019############-######-######https######0.000######-######98
59.53.182.157######-######-######[10/Apr/2023:11:43:36 +0800]######"POST /gateway/api HTTP/2.0"######500######576######"-"######"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36; Qing/0.0.8; lang:zh-CN;bno:4.1.4(2302271341);"######0.000######jxjgy.jxsjgjt.com######e2ce75fb11e82a5e8c6253b7f9ea384c############-######-######https######0.000######-######98
59.53.182.157######-######-######[10/Apr/2023:11:43:36 +0800]######"POST /gateway/api HTTP/2.0"######500######576######"-"######"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36; Qing/0.0.8; lang:zh-CN;bno:4.1.4(2302271341);"######0.000######jxjgy.jxsjgjt.com######7f1cc65791c608b17dc7be55ebce8d38############-######-######https######0.000######-######100
日志字段分隔符: ######
第1列, $remote_addr 客户端IP地址
第2列, - 无意义字符
第3列,$remote_user 客户端用户名称,一般为空 ,当nginx开启了用户认证功能后,此变量记录了客户端使用了哪个用户进行了认证
第4列,[$time_local] 访问时间
第5列,$request 请求HTTP的方式以及URL
第6列,$status 返回给客户端状态码
第7列,$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小
第8列,$http_referer 记录从哪个页面访问过来的
第9列,$http_user_agent 记录客户端相关信息
第10列,$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止
第11列,$http_host 请求地址,即浏览器中你输入的地址(IP或域名)
第12列,$request_id nginx为每个请求生成唯一ID的描述
第13列,$upstream_addr 后端真正提供服务的主机地址
第14列,$upstream_status 从后端服务器获得响应的状态码
第15列,$http_X_Request_Id 上传请求的唯一 ID,通过该 ID 可快速定位用户请求的相关日志
第16列,$scheme 请求的协议
第17列,$upstream_response_time 建立连接和从上游服务器接收响应主体的最后一个字节之间的时间
第18列,$http_x_real_ip 获取客户端真实IP
第19列,$request_length 客户端请求长度
如何统计每小时 有多少条?
我们可以使用awk命令提取出日志中的时间戳部分,并将其格式化为只包含小时的形式。然后,使用uniq命令统计每个小时出现的次数。
awk命令使用方括号作为分隔符,提取时间戳的小时部分并打印。然后,使用sort命令对小时进行排序,最后使用uniq命令统计每个小时出现的次数。
$ cat access.log | awk -F'[][]' '{split($2, a, ":"); print a[2]}' | sort | uniq -c
image.png
如何统计每分钟 有多少条?
要统计这个小时内每个分钟有多少条日志,可以使用类似的方法,使用awk命令提取日志中的时间戳,并将其格式化为包含小时和分钟的形式。然后,使用uniq命令统计每个分钟出现的次数。
首先,使用awk命令提取日志中的时间戳,并将其格式化为小时:分钟的形式。然后,使用sort命令对小时和分钟进行排序,最后使用uniq命令统计每个分钟出现的次数。
$ cat access.log | awk -F'[][]' '{split($2, a, ":"); print a[2]":"a[3]}' | sort | uniq -c
image.png
网友评论