我被赋予了监控公司代理服务器的任务。 我编写了一个命令来检查代理缓存同步状态并输出:
[root@bmark1 ~]# check ny4a
#===# NY4A: #===#
7 36079435
3 36079441
Would you like to view specific list? [y/n] y
[java] ny4aproxy5.company.com,36079435
[java] ny4aproxy4.company.com,36079435
[java] ny4aproxy12.company.com,36079441
[java] ny4aproxy11.company.com,36079435
[java] ny4aproxy3.company.com,36079435
[java] ny4aproxy2.company.com,36079435
[java] ny4aproxy1.company.com,36079435
[java] ny4aproxy10.company.com,36079435
[java] ny4aproxy9.company.com,36079441
[java] ny4aproxy13.company.com,36079441
#===# The check is based on file: /workspace/repository/proxyui/proxy_list.csv #===#
[root@bmark1 ~]#
check命令返回每个服务器上缓存文件的大小。
最佳做法是使所有文件具有相同的大小或具有少量增量。 在某些方面,一些代理服务器不同步,其缓存文件大小被卡住而没有更新。
因此,您可以在我的命令输出中看到有7个服务器的缓存文件大小为:36079435字节,还有3个服务器不同步,缓存文件大小为36079435。 我想写一个脚本/检查,它会发现任何服务器的缓存文件大小是否大于10%。
我知道如何解析缓存文件大小,但不知道如何编写脚本并获得10%差异指示。 你能帮助我吗?
答案 0 :(得分:0)
假设您自己的命令生成此标准输出:
[java] ny4aproxy5.company.com,36079435
[java] ny4aproxy4.company.com,36079435
[java] ny4aproxy12.company.com,36079441
[java] ny4aproxy11.company.com,36079435
[java] ny4aproxy3.company.com,36079435
[java] ny4aproxy2.company.com,36079435
[java] ny4aproxy1.company.com,36079435
[java] ny4aproxy10.company.com,36079435
[java] ny4aproxy9.company.com,36079441
[java] ny4aproxy13.company.com,30079441
以下命令仅返回阈值以下的缓存:
yourcommand | awk -F, -v max=`yourcommand | awk -F, 'OFS=","{if ($2>max) max=$2}END {print max}'` '{if (($2/max)<0.9) print "outside threshold: " $0 }'
我冒昧地改变了最后一个缓存编号,给出了一个指示性的&lt; 90%的例子。输出:
outside threshold: [java] ny4aproxy13.company.com,30079441
或者如果您想知道所有百分比:
yourcommand | awk -F, -v max=`yourcommand | awk -F, 'OFS=","{if ($2>max) max=$2}END {print max}'` '{print $0, (max-$2)/max*100 }'
输出:
[java] ny4aproxy5.company.com,36079435 1.663e-05
[java] ny4aproxy4.company.com,36079435 1.663e-05
[java] ny4aproxy12.company.com,36079441 0
[java] ny4aproxy11.company.com,36079435 1.663e-05
[java] ny4aproxy3.company.com,36079435 1.663e-05
[java] ny4aproxy2.company.com,36079435 1.663e-05
[java] ny4aproxy1.company.com,36079435 1.663e-05
[java] ny4aproxy10.company.com,36079435 1.663e-05
[java] ny4aproxy9.company.com,36079441 0
[java] ny4aproxy13.company.com,30079441 16.63
<强>解释强>
yourcommand | awk
:这个位将自定义命令的标准输出管道输出到awk
awk -F,
:将输入分隔符声明为逗号
-v max=...
:因为我们需要迭代输出两次以获得最大值然后与max进行比较,我们必须提供awk操作以找到第二次awk操作的最大值。即通过反引号中的第一个awk函数获取最大值,并通过-v标志将变量'max'传递给第二个awk函数。
{if ($2>max) max=$2}END {print max}
:查找最大值的简单循环
{print $0, (max-$2)/max*100 }
:计算与最大值和打印原始行+附加百分比
if (($2/max)<0.9) print "outside than threshold: " $0
:进行简单检查,看看缓存大小的比例是否至少为最大值的90%。如果没有,请打印'违规'行