目录
- 一. 日志结构
- 二. 使用命令统计
- 三. 封装为函数统计
一. 日志结构
52.198.34.21 --[01/May/2026:00:00:03 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200612143"-"110279218654-13.231.88.102 --[01/May/2026:00:00:03 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200498132"-"98065022341-3.114.76.9 --[01/May/2026:00:00:03 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"500098"-"1500120045678-18.179.45.67 --[01/May/2026:00:00:04 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200530151"-"120081025612-54.250.190.11 --[01/May/2026:00:00:04 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200545149"-"118080024987-35.72.14.88 --[01/May/2026:00:00:04 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"404210120"-"90060014321-52.69.201.44 --[01/May/2026:00:00:05 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200520148"-"119080526001-18.182.33.90 --[01/May/2026:00:00:05 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200505140"-"115078023876-13.115.77.123 --[01/May/2026:00:00:05 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200490135"-"100070021045-3.112.200.55 --[01/May/2026:00:00:06 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200560155"-"125083027560-54.248.90.201 --[01/May/2026:00:00:06 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"5000100"-"1600130050234-18.180.61.77 --[01/May/2026:00:00:06 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200515142"-"117579024567-52.192.140.18 --[01/May/2026:00:00:07 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200525150"-"121081525890-13.230.55.66 --[01/May/2026:00:00:07 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"200535152"-"122082026234-3.115.99.101 --[01/May/2026:00:00:07 +0900]"POST /op/cmn/mpl_eu_api/cca HTTP/1.1"404220118"-"95064015002-- 倒数第2列是请求总耗时列,需要统计0点2分到3分的每秒的TAT值
200528151"-"120381625657- ↑ └─ 请求总耗时(微秒 or 毫秒)二. 使用命令统计
- 日志文件比较大,因为只需要统计2-3分的日志,因此将此部分的日志单独抽取出来
- 同时排除一些无用日志
grep-a-vi-E"resources|HealthCkeck"big_apache.log|grep"01/May/2026:00:0[2-3]:">apache.logsed -e "s/.*\[//g":将[之前的部分替换为空,即删除[之前的部分,包括[自身$(NF-1):倒数第二个字段NR:当前处理的总行数(记录数)
grep-a"01/May/2026:00:02:00"./apache.log|sed-e"s/.*\[//g"|awk'{m+=$(NF-1)} END {if(NR>0) print m/NR; else print 0 }'|xargs-I{}echo"00:02:00 平均TAT: {}"grep-a"01/May/2026:00:02:01"./apache.log|sed-e"s/.*\[//g"|awk'{m+=$(NF-1)} END {if(NR>0) print m/NR; else print 0 }'|xargs-I{}echo"00:02:01 平均TAT: {}"grep-a"01/May/2026:00:02:03"./apache.log|sed-e"s/.*\[//g"|awk'{m+=$(NF-1)} END {if(NR>0) print m/NR; else print 0 }'|xargs-I{}echo"00:02:03 平均TAT: {}"。。。省略。。。grep-a"01/May/2026:00:02:59"./apache.log|sed-e"s/.*\[//g"|awk'{m+=$(NF-1)} END {if(NR>0) print m/NR; else print 0 }'|xargs-I{}echo"00:02:59 平均TAT: {}"。。。省略。。。grep-a"01/May/2026:00:03:59"./apache.log|sed-e"s/.*\[//g"|awk'{m+=$(NF-1)} END {if(NR>0) print m/NR; else print 0 }'|xargs-I{}echo"00:03:59 平均TAT: {}"apluser@FengYeHong-HP:20260504$grep-a"01/May/2026:00:02:00"./apache.log|sed-e"s/.*\[//g"|awk'{m+=$(NF-1)} END {if(NR>0) print m/NR; else print 0 }'|xargs-I{}echo"00:02:00 平均TAT: {}"00:02:00 平均TAT:28891apluser@FengYeHong-HP:20260504$三. 封装为函数统计
echo {00..59}:用于生成00到59的数字
# 日志的绝对路径temp_log_path="/home/apluser/work/20260504/apache.log"# 统计TAT用的函数functionTATCount{prefix="$1"logPath="$2"foriin$(echo{00..59});dots="$prefix:$i"&&grep"$ts""$logPath"|sed-e"s/.*\[//g"|\awk-vtime="$ts"'{m+=$(NF-1)} END {if(NR>0) printf "%s 平均TAT: %.0f\n", time, m/NR; else printf "%s 平均TAT: 0\n", time}'done}# 统计TATCount"01/May/2026:00:00""$temp_log_path"TATCount"01/May/2026:00:01""$temp_log_path"