awk分析nginx日志里面的接口响应时间

本文介绍如何使用awk工具分析Nginx服务器的日志文件,以找出响应时间较长的请求,具体步骤包括提取响应时间、去除引号干扰、合并文件及筛选响应时间超过1秒的URL。

最近,有客户反应客户端卡,老板集合技术人员开会讨论,找出慢的原因,由此产生了分析nginx响应时间,由于线上环境nginx日志格式带上了引号,处理起来有点麻烦,以下是处理过程

一、nginx日志格式

log_format main ‘$remote_addr – $remote_user [$time_iso8601] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for” ‘
‘ “$upstream_addr” “$upstream_status” “$request_time” ‘;

二、nginx访问日志(/var/log/nginx

12.124.127.44 – – [29/Jul/2014:20:54:20 +0800] “GET / HTTP/1.1″ 200 211 “-” “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)” “-” “127.0.0.1:8081″ “200” “0.001”
115.29.113.101 – – [29/Jul/2014:20:54:22 +0800] “GET / HTTP/1.1″ 200 211 “-” “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)” “-” “127.0.0.1:8081″ “200” “0.005”
112.124.127.53 – – [29/Jul/2014:20:56:49 +0800] “GET / HTTP/1.1″ 200 211 “-” “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)” “-” “127.0.0.1:8081″ “200” “0.002”
112.124.127.44 – – [29/Jul/2014:20:59:20 +0800] “GET / HTTP/1.1″ 200 211 “-” “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)” “-” “127.0.0.1:8081″ “200” “0.002”
115.29.113.101 – – [29/Jul/2014:20:59:22 +0800] “GET / HTTP/1.1″ 200 211 “-” “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)” “-” “127.0.0.1:8081″ “200” “0.002”

三、分析nginx日志

3.1打印响应时间并且去除引号

cat website.access.log| awk ‘{print $(NF)}’ | awk -F “\”” ‘{print $2′}>a.txt

3.2合并文件,将时间重新补上去

paste -d ” ” website.access.log  a.txt > b.txt

3.3查找响应时间大于1秒的url

cat b.txt |awk ‘($NF>1){print $6$7 ” ” $NF}’>c.txt

结果如下图
QQ图片20141027145344

 
 
声明: 本文采用  BY-NC-SA 协议进行授权. 转载请注明转自:  awk分析nginx日志里面的接口响应时间
 
标签:  awkcatNginx
### 在 Nginx 中统计调用外部接口日志数据 为了在 Nginx 中统计调用外部接口日志数据,可以利用 Nginx日志功能进行自定义配置。Nginx 提供了灵活的日志记录机制,允许用户通过 `log_format` 指令定义日志格式,并结合 `access_log` 指令将请求信息记录到指定文件中[^1]。 以下是实现方法的详细说明: #### 1. 定义自定义日志格式 通过 `log_format` 指令定义一个包含所需字段的日志格式。例如,假设需要记录以下信息: - 请求的时间戳 - 客户端 IP 地址 - 请求的方法和路径 - 响应状态码 - 请求响应时间 - 转发的目标地址(即外部接口) 可以在 Nginx 配置文件中添加如下内容: ```nginx log_format external_api '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' 'proxy_time=$upstream_response_time ' 'proxy_host=$upstream_addr'; ``` #### 2. 配置代理日志 接下来,在代理外部接口的 `location` 块中启用日志记录。例如: ```nginx server { listen 80; server_name example.com; location /api/ { proxy_pass http://external-api.example.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 启用自定义日志 access_log /var/log/nginx/external_api.log external_api; } } ``` 上述配置中,所有匹配 `/api/` 路径的请求会被转发到 `http://external-api.example.com`,同时将相关日志信息记录到 `/var/log/nginx/external_api.log` 文件中[^1]。 #### 3. 日志分析 生成的日志文件可以使用工具如 `awk`、`grep` 或专门的日志分析工具(如 ELK Stack)进行解析和统计。例如,统计某个时间段内的请求数量或平均响应时间。 #### 示例代码:解析日志中的响应时间 以下是一个简单的 Bash 脚本示例,用于计算日志中所有请求的平均响应时间: ```bash #!/bin/bash LOG_FILE="/var/log/nginx/external_api.log" # 提取日志中的 upstream_response_time 字段并计算平均值 total_time=0 count=0 while read -r line; do time=$(echo "$line" | grep -oP '(?<=proxy_time=)[0-9\.]+') if [[ ! -z "$time" ]]; then total_time=$(echo "$total_time + $time" | bc) count=$((count + 1)) fi done < "$LOG_FILE" if [ $count -ne 0 ]; then avg_time=$(echo "scale=2; $total_time / $count" | bc) echo "Average response time: $avg_time seconds" else echo "No requests found in the log." fi ``` #### 注意事项 - 确保日志文件的路径和权限设置正确。 - 如果需要更高的性能,可以考虑将日志写入远程服务器或使用异步日志记录[^2]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值