Awk获取最大值、最小值、平均值和求和

背景交代

在zabbix的监控中,很多场合需要监控到日志里的一些数字,比如下面这个日志:

1
2
3
4
2019-04-22 10:43:53.231 [pool-12-thread-2] INFO com.hswx.css.ads.pojo.M3uFile [221]  cloud upload index success, CloudfileName=/4J0463CPAG1FEDD_record/cloud_1/20190422104242898_0_c3237911422543f8a66816d043eabb50.m3udeviceId4J0463CPAG1FEDD cost:7
2019-04-22 10:43:52.795 [pool-9-thread-13] INFO com.hswx.css.ads.pojo.M3uFile [333] cloud upload record success, CloudFileName=/4G00B65PAG1C125_record/cloud_1/20190422103141454_0_9d3ccc60d3f6429c8b5d79aa3222991f_365b2bc872ed42d59de82f0af9b1016d-68237400_1047356.dav deviceId=4G00B65PAG1C125 cost:12
2019-04-22 10:43:52.888 [pool-9-thread-19] INFO com.hswx.css.ads.pojo.M3uFile [333] cloud upload record success, CloudFileName=/4G00B65PAG7A8B1_record/cloud_1/20190422104014516_0_76184831e6e0400994cf6baf45952368_fdbe495eee81458a8e55ec0bfdebecd5-8385407_1045239.dav deviceId=4G00B65PAG7A8B1 cost:16
2019-04-22 10:43:52.939 [pool-9-thread-7] INFO com.hswx.css.ads.pojo.M3uFile [333] cloud upload record success, CloudFileName=/5A00D4EPBZE212D_record/cloud_1/20190422104228493_0_2165fd85c6064b43abf0398bdf9c0916_fd279fa8809f45279ae76577629d27f5-43910516_1058372.dav deviceId=5A00D4EPBZE212D cost:12

这段日志主要记录m3u录像文件上传到云存储的情况,后面”cost:”那部分就是记录本次上传操作耗时的时间,我们现在要监控这个时间,如果这个时间大于100,我们就认为线路出了问题。

但是这里有一个问题,因为日志量比较大,一秒钟会刷出来很多的值,比如使用tail 日志文件路径|grep "cost:" | cut -d ":" -f 4
akb48

那么我们就要从这里面取出最大值,这样的场景用awk是最方便的。

具体语句

求最大值:awk 'BEGIN {max = 0} {if ($1+0 > max+0) max=$1} END {print "", max}'
求最小值:awk 'BEGIN {min = 65536} {if ($1+0 < min+0) min=$1} END {print "Min=", min}'
求和:awk '{sum+=$1} END {print "Sum= ", sum}'
求平均值:awk '{sum+=$1} END {print "Avg= ", sum/NR}'

把上面的语句用于本次案例中,效果如下:
akb48

然后就是配置到zabbix-agent.conf里即可。如果要用zabbix用户登录bash,使用命令:su -s /bin/bash zabbix
akb48

感谢您请我喝咖啡~O(∩_∩)O,如果要联系请直接发我邮箱chenx1242@163.com,我会回复你的
-------------本文结束感谢您的阅读-------------