面向chatgpt运维:根据nginx日志输出每个接口的平均响应时间

发布时间 2023-03-29 15:46:42作者: 西门飘柔
Crafted by [Genie](https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode)

我的nginx日志最后一个字段是request time,怎么对每个url求平均访问时间,并分别列出来

Genie

您可以使用awk命令对日志文件进行处理来计算平均访问时间。

首先,您需要使用以下命令获取每个URL的请求时间:

awk '{split($7,url,"?"); count[url[1]]++; sum[url[1]]+= $NF} END {for (i in count) print i, sum[i]/count[i]}' access.log

解释:

  • split($7,url,"?") : 用 ? 字符串拆分第7列,将 URL 存储在数组变量 url 中。
  • count[url[1]]++:使用 url 数组中URL的第一个元素作为索引,在 count 数组中进行累加操作。
  • sum[url[1]] += $NF: 使用 url 数组中URL的第一个元素作为索引,在 sum 数组中进行请求时间的累加操作。
  • END: 在处理完所有行后执行。
  • for (i in count): 迭代统计出来的 count 数组中存储了次数(即请求数)的 URL,其中,i是URL地址
  • print i, sum[i]/count[i]: 输出每个URL的平均访问时间

请注意,这个命令假定日志文件名为 access.log。您需要把它替换成实际文件的名称和路径。

另外,如果您想要更精确的结果并排除较慢的响应,可以添加条件来排除请求时间超过某个阈值的日志记录,例如使用以下命令:

awk '{split($7,url,"?"); if ($NF < 1.0) {count[url[1]]++; sum[url[1]]+= $NF}} END {for (i in count) print i, sum[i]/count[i]}' access.log

在这个例子中,只计算请求时间小于1秒(即0到1秒之间)的记录。您可以根据实际情况调整这个阈值。