我正在(短期内)监控几个 UNIX 文件的大小,并且可以轻松地将数字导出到 Excel 电子表格。这些文件最终将由 Splunk 编入索引,该团队想知道预期的每日容量。我目前每小时对文件大小进行抽样。我的文件大小通常有两种类型,不断增长或周期性增长。我对周期性的定义是:文件增长,然后重置为 0 大小,然后增长,然后重置,等等。数字图可以定义为锯齿状图案。
Excel 能否确定文件属于哪一类别,是不断增长还是周期性? 最终数字不必精确,但必须能很好地反映每日交易量。(我可以手动完成,但我希望 Excel 能允许我偷懒。)
我问的原因是:
- 如果文件被重置为零,通常每天发生三次(但有时更频繁),我想报告三个最大文件大小的总和。作为奖励,如果重置发生得更频繁,也许 Excel 知道这一点,我可以乘以该常数。
- 如果某个文件不断增大,则它就是日志文件轮换的候选对象,我将报告早期和晚期文件大小之间的差异,以获取每日文件量。(并了解如何运行轮换脚本。)
- 如果文件大小始终不变,则需要检查生成文件的程序。我可以通过比较 min() 和 max() 值来发现这一点。
以下是从我的电子表格中直接提取的一些示例数据。您可以看到顶部和底部行一直增长到第 5 列,即 16:05。可以肯定的是,在 15:55 样本之后的某个时间点,文件大小被重置为 0。中间行继续增长。
14:05 14:55 15:05 15:55 16:05 16:55 17:05 17:55 18:05
3,307,183 3,692,602 3,872,188 4,301,423 61,010 467,733 554,456 981,851 1,068,804
36,348,105 36,888,709 37,003,076 37,541,343 37,650,979 38,182,932 38,292,337 38,838,988 38,947,009
1,666,276 1,879,624 1,945,419 2,164,186 29,410 238,368 293,786 518,526 565,455
(我在每小时样本上作弊了。我想捕捉重置实际发生的时间。现在我知道了,我将回到每小时监控,并使用我保留的数据重新计算旧时间。我将监控文件大约一周。)
我将从第一行和第三行报告的输出将是最大值的三倍,即此处的 15:55 列。实际上,我可能会使用类似的东西=LARGE(B1:ZZ1,1) + LARGE(B1:ZZ1,2) + LARGE(B1:ZZ1,3)
,但我需要知道这是周期性文件增长。
第二行的输出将是今天 23:55 的大小减去昨天 23:55 的大小,但我需要知道这是文件的持续增长。
然后我将把所有尺寸加起来以得到总数。
答案1
这个问题似乎很适合用 Excel 来解决。但首先,让我先来回答一下你的问题。假设你的数据如下所示:
60 120 180 45 90 135 35 70 105 60
您提到使用 选择三个最大的值LARGE()
。上面的三个最大值是 120、180 和 135。这是您想要的吗,还是您想要峰值:180、135 和 105?我会回到这个问题上。
设置一个矩形区域,其大小和形状与数据相同。它可以位于数据下方、右侧或不同的工作表上。我假设它位于同一张工作表上,位于数据下方,行号为 12-14。将
=IF(A2>B2, A2, IF(A2=B2, "same", ""))
进入单元格A12
,然后向右向下拖动/填充。如果相应数据单元格中的值大于同一行中下一个单元格中的值,则计算结果为该值。在您的数据中,这对于局部最大值(即峰值)是正确的。当两个相邻数据值相等时,计算结果为文本值same
。否则,为空白。在这里,我修改了您的第 3 行数据,使其在中间包含一个相等的值块:
现在,该COUNT()
函数将告诉您一行中有多少个数字,即数据在两个连续单元格之间丢失的次数。对于稳定增加的值,它将为零;如果定期重置该值,它将显示它发生的次数。并COUNTIF(…, "same")
告诉您两个连续单元格相等的次数。这可能比简单地比较最小值和最大值更能检测死进程。
您可能会发现这些最大值对于您的统计很有用。考虑使用LARGE()
、AVERAGE()
或 来减少它们SUM()
。
答案2
实际上,我会在您捕获数据的脚本中执行此操作。除了在一个“数据”文件中捕获大小之外,还要保存当前大小,在下次运行时将新的当前大小与上一个进行比较。如果新大小小于旧大小,则在单独的 CSV 文件中针对文件名保存 TRUE,否则保存 FALSE。确保数据和此文件都按文件名编入索引,以便您可以匹配它们。
使用 Python 或 Node.js 等脚本语言可以使这项任务变得非常简单。这比尝试用一些复杂的 Excel 公式完成所有操作要容易得多。