统计UPD丢包工具

简介: 下载位置:https://github.com/eyjian/libmooon/tree/master/shell #!/bin/bash # 统计UPD丢包工具 # 可选参数1:统计间隔(单位:秒,默认10秒) ...
下载位置:https://github.com/eyjian/libmooon/tree/master/shell

  1. #!/bin/bash
  2. # 统计UPD丢包工具
  3. # 可选参数1:统计间隔(单位:秒,默认10秒)
  4. # 可选参数2:是否输出丢包为0的记录,注意有参数1时,参数2才会生效
  5. #
  6. # 运行结果会写日志,日志文件优先存工具相同的目录,
  7. # 但如果没有权限,则选择当前目录,
  8. # 当前目录无权限,则存tmp目录,
  9. # 如果tmp目录还无权限,则报错退出。
  10. #
  11. # 输出格式:统计日期 统计时间 丢包数
  12. # 输出示例:
  13. # 2018-09-03 17:22:49 5
  14. # 2018-09-03 17:22:51 3
  15. #
  16. # 可用UDP测试工具:https://iperf.fr/
  17. flag=0
  18. stat_seconds=10
  19. if test $# -gt 2; then
  20. echo "Usage: `basename $0` [seconds] [0|1]"
  21. exit 1
  22. fi
  23. if test $# -gt 1; then
  24. flag=$2 # 值为1表示输出丢包为0的记录
  25. fi
  26. if test $# -gt 0; then
  27. stat_seconds=$1
  28. fi
  29. # 下段不允许出错
  30. set -e
  31. # 日志文件
  32. basedir=$(dirname $(readlink -f $0))
  33. logname=`basename $0 .sh`
  34. logfile=$basedir/$logname.log
  35. if test ! -w $basedir; then
  36. basedir=`pwd`
  37. logfile=$basedir/$logname
  38. if test ! -w $basedir; then
  39. basedir=/tmp
  40. logfile=$basedir/$logname
  41. fi
  42. fi
  43. # 备份日志文件
  44. bak_logfile=$logfile.bak
  45. if test -f $logfile; then
  46. rm --interactive=never $logfile
  47. touch $logfile
  48. fi
  49. # 恢复
  50. set +e
  51. # 统计哪些网卡,不填写则自动取
  52. #ethX_array=()
  53. #
  54. #if test $# -eq 0; then
  55. # ethX_array=(`cat /proc/net/dev| awk -F[\ \:]+ '/eth/{printf("%s\n",$2);}'`)
  56. #else
  57. # ethX_array=($*)
  58. #fi
  59. old_num_errors=0
  60. for ((;;))
  61. do
  62. # 相关命令:
  63. # 1) 查看队列中的包数:netstat –alupt
  64. # 2) 查看socket读缓冲区大小:cat /proc/sys/net/core/rmem_default
  65. # 3) 查看socket读缓冲区大小:cat /proc/sys/net/core/wmem_default
  66. # 4) 查看网卡队列大小:ethtool -g eth1
  67. # 5) 查看arp缓存队列大小:cat /proc/sys/net/ipv4/neigh/eth1/unres_qlen
  68. # 6) 查看CPU负载:mpstat -P ALL 1 或 vmstat 1 或 top 或 htop 或uptime
  69. #
  70. # 取得丢包数
  71. # 命令“cat /proc/net/snmp | grep Udp”比命令“netstat –su”好
  72. # num_drops=`netstat -su | awk -F[\ ]+ 'BEGIN{flag=0;}{ if ($0=="Udp:") flag=1; if ((flag==1) && (match($0, "packet receive errors"))) printf("%s\n", $2); }'`
  73. num_errors=`cat /proc/net/snmp | awk -F'[ ]'+ 'BEGIN{ line=0; }/Udp/{ ++line; if (2==line) printf("%s\n", $4); }'`
  74. if test $old_num_errors -eq 0; then
  75. old_num_errors=$num_errors
  76. elif test $num_errors -ge $old_num_errors; then
  77. num_drops=$(($num_errors - $old_num_errors))
  78. if test $flag -eq 1 -o $num_drops -ne 0; then
  79. line="`date '+%Y-%m-%d %H:%M:%S'` $num_drops"
  80. # 得到日志文件大小(5368709120 = 5 \* 1024 \* 1024 \* 1024)
  81. logfile_size=`ls -l --time-style=long-iso $logfile 2>/dev/null| awk -F[\ ]+ '{ printf("%s\n", $5); }'`
  82. if test ! -z "$logfile_size"; then
  83. if test $logfile_size -gt 5368709120; then
  84. echo $line | tee -a $logfile
  85. mv $logfile $bak_logfile
  86. rm -f $logfile
  87. fi
  88. fi
  89. echo $line | tee -a $logfile
  90. fi
  91. fi
  92. sleep $stat_seconds
  93. done

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
存储 Oracle 关系型数据库
Oracle优化07-分析及动态采样-DBMS_STATS 包
Oracle优化07-分析及动态采样-DBMS_STATS 包
89 0
Oracle优化07-分析及动态采样-DBMS_STATS 包
|
存储 监控 算法
hsql统计两天数据差异的算法及lag()/led()分析函数的使用
hsql统计两天数据差异的算法及lag()/led()分析函数的使用
hsql统计两天数据差异的算法及lag()/led()分析函数的使用
|
SQL 监控 数据库
网站流量日志分析--统计分析--分组 topN--row_number over 函数使用|学习笔记
快速学习网站流量日志分析--统计分析--分组 topN--row_number over 函数使用
229 0
网站流量日志分析--统计分析--分组 topN--row_number over 函数使用|学习笔记
|
SQL 监控 OLAP
网站流量日志分析--统计分析--分组 topN--业务需求|学习笔记
快速学习网站流量日志分析--统计分析--分组 topN--业务需求
127 0
网站流量日志分析--统计分析--分组 topN--业务需求|学习笔记
|
网络协议
【TCP/IP】【调试】丢包、流不通、错包等问题查证手段系列之一——日志方式
【TCP/IP】【调试】丢包、流不通、错包等问题查证手段系列之一——日志方式
210 0
|
监控 网络协议 NoSQL
如何精确监控DB响应延时
如何精确监控DB响应延时
|
云安全 存储 安全
操作日志查询-谁动了我的 NAT
为了指导用户用好操作审计,为了填补产品功能与用户真实需求的鸿沟,我们开始了操作审计最佳实践的编写。
操作日志查询-谁动了我的 NAT