背景
宝塔面板 + Nginx 1.20.2 + PHP-7.2.33
实现步骤
记录操作步骤,方便日后查证
1. nginx 配置 http
log_format access_b1b_log
'[$remote_addr] $time_iso8601 [$request]'
'[$status] [$request_time]';
2. 网站配置
3. 统计请求时长 前100的请求
cat /www/wwwlogs/uat.b1b.com.log | awk '$2 >="[2024-09-20T15:01:20" && $2 <="[2024-09-20T16:48:17"' | awk '{print $NF " " $2" "$4}' | sort | uniq -c | sort -nr | head -n 100
根据个人需求,考虑设计一个脚本可以将需要的日志读取并存储到指定文件,方便后期的数据读取或直接查看
1. 设定日志文件路径
2. 提取日志中,请求耗时排名靠前的地址 (匹配一个小时前的数据)
3. 进行结果打印
4. 将得到的结果,可以整理打印到指定 日志文件
#!/bin/bash
# 设置日志文件路径
LOG_FILE="/www/wwwlogs/uat.b1b.com.log"
# 获取当前时间和一小时前的时间戳
HOUR_AGO=$(date '+%Y-%m-%dT%H' -d '1hour ago')
HOUR_AGO_SAVE=$(date '+%Y-%m-%d %H' -d '1hour ago')
# 提取日志中的 请求地址并统计出现次数
URL_TIME_LEN=$(cat $LOG_FILE |awk -v str_mz="$HOUR_AGO" '$2~ str_mz' |awk '!a[$4]++' | awk '{print $6 " "$2" "$4}' | sort | uniq | sort -nr)
# 提取前 100 个 请求地址
TOP_URL=$(echo "$URL_TIME_LEN" | head -n 100)
# 打印结果
echo ">>> Top 100 RequestUrl ($HOUR_AGO_SAVE时) :"
echo "$TOP_URL"
# 将结果整理打印到 日志文件
LOG_FILE_SUFFIX=$(date '+%Y-%m')
LOG_SAVE_FILE="/data/uat.b1b.com/storage/logs/access_analyze_$LOG_FILE_SUFFIX.log"
echo -e "\n>>> Top 100 RequestUrl ($HOUR_AGO_SAVE时)" >>$LOG_SAVE_FILE
TOP_URL2=$(echo "$URL_TIME_LEN" | head -n 100 >> $LOG_SAVE_FILE )
echo "$TOP_URL2"
附录