一、背景:
以某物联网企业,传感器设备实时数据消费服务(Kafka-consumer)为例,调试筛选处理耗时的主题。
1. 原始日志格式(logback输出的):
2018-07-11 11:49:22.413 INFO 29244 --- [TW_safeclound_elec_line_v-1531280885818] c.s.s.s.l.TimeoutInvokeMethodAspect : 消费处理耗时: 10148 ms, method=ConsumerElecLineVDataListener.lineVData(..), args={"addr":"11111118","bid":"QQBE","cid":"BLWY","dataType":"ELE_R_LV","id":"11111118,85,117,ELE_R_LV,1531280962413","lineAB":396.77,"lineBC":395.75,"lineCA":396.42,"meterType":"117","order":"85","timestamp":1531280951758}
2. 使用tail+awk命令进行耗时执行方法筛选:
[root@web-prod ~]# tail -f /mnt/disk1/sink/logs/sink.log|grep 耗时| awk -F ' ' '$10>200 && $10<500{print $1,$2,$6,$10,$11}'
2018-07-14 22:59:40.163 [TW_safeclound_largestDemand-1531512341755] 441 ms,
2018-07-14 22:59:40.516 [TW_safeclound_rate_v-1531512332686] 363 ms,
2018-07-14 22:59:40.665 [TW_safeclound_rate_i-1531512317893] 375 ms,
2018-07-14 22:59:40.866 [TW_safeclound_water-1531512518874] 332 ms,
...
3. 注释:
a. 其中 awk的 -F 参数表示:日志字符串分隔符,默认为 ' ' 空格;
b. $10>100 表示我要筛选耗时大于 100 毫秒的日志;
c. {print $1,$2,$6,$10,$11} 表示打印被awk分隔后的 第1段(日期)、第2段(时间)、第6段(主题)、第10段(耗时)、第11段字符串(耗时单位);
d. 其中 $10>200 && $10<500 表示我要筛选耗时在200~500之前的消费主题;