统计指定时间内的 GCP 日志条目数

Posted

技术标签:

【中文标题】统计指定时间内的 GCP 日志条目数【英文标题】:Count number of GCP log entries during a specified time 【发布时间】:2018-10-06 18:10:21 【问题描述】:

是否可以从 GCP Stackdriver 日志记录中计算特定时间段内特定日志消息的出现次数?回答“此事件在此时间段内发生了多少次”的问题。基本上我想要下图中曲线的积分。

它不必是一个移动的窗口,这一次它更像是一个一次性任务。如果可用,高级日志查询上的计数聚合器或类似功能也可以使用。

查询如下所示:

(resource.type="container"
logName="projects/xyz-142842/logs/drs"
"Publish Message for updated entity"
) AND (timestamp>="2018-04-25T06:20:53Z" timestamp<="2018-04-26T06:20:53Z")

上图的基于日志的指标如下所示:

我的仪表板是这样设置的:

【问题讨论】:

使用基于日志的指标时,请勿在过滤器中添加时间戳限制,因为基于日志的指标会在创建后及时计数日志条目。 @SummitRaj 感谢您的评论。我不知道它在创建后开始计算! 【参考方案1】:

我最终构建了堆叠条。

使用正确的缩放级别,我可以很容易地总结出现次数。直接从图形(积分)中获取计数本来是一个不错的功能,但现在可以使用。

【讨论】:

请记住,如果您认为 Google 产品应该引入新功能,您可以随时提出新功能请求:issuetracker.google.com/issues/… 如果您有兴趣,可以直接提出或愿意为了更准确地改写您感兴趣的内容,我可以代表您发布。 (我在 Google Cloud Platform Support 工作) 谢谢!我认为本质是从云控制台的日志视图中计算特定过滤器(特定时间段)的命中数!然后这可以在未来通过指标、警报等进行扩展,但第一步功能请求肯定是日志的 count(*) 聚合器。可能只是 GUI 中的输出,其中包含所选时间段的点击次数和使用的过滤器。我很乐意指定更多需要的内容,但我现在想不出更好的描述。 对不起,回答晚了,我阅读了功能描述,但仍然不完全理解。我建议您创建它,并通过一个小示例使其更加清晰,但是如果有不清楚的地方,团队可能会与您联系,以便获得更多详细信息来决定是否值得添加。 【参考方案2】:

有多种方法可以做到这一点,我看到实际有效并且可以适用于您的情况的两种方法如下:

使用Logs-based Metrics。例如,它们可以记录包含特定错误消息的日志条目的数量,或者它们可以提取日志条目中报告的延迟信息。

Stackdriver Logging 基于日志的指标可以是以下两种指标类型之一:计数器或分布。 [...] 计数器指标计算与高级日志过滤器匹配的日志条目数。 [...] 分布指标从匹配过滤器的日志条目中累积数字数据。

我建议您阅读文档以检查此功能是否完全涵盖您的用例。

您可以export your logs to Big query,一旦有了它们,您就可以使用groupbyselect 等经典工具以及 BigQuery 为您提供的所有工具。

Here 您可以找到关于如何导出日志以及如何使用 BigQuery 分析审核日志的非常简单的分步指南,但我相信您可以在网上找到很多资源。


产品和方法确实不同,我想说 BigQuery 更灵活,但配置和正确使用它也更复杂。如果您找到第三种更好的方法,请使用这些信息更新您的问题。

【讨论】:

我用更多信息更新了这个问题。我确实使用了一个基于日志的计数器类型的度量,并将其显示在带有聚合总和的仪表板上,它确实计数,但每秒计数。我需要一个积分更长的时间。我会试试 Big Query 选项! 由于导出到 BigQuery 是一项持续的操作,它并不能真正满足我们的需求。这个场景更像是我们发现了一个错误,然后问“这在周末发生了多少次?”。 您可以使用 SUM Aligner 对对齐周期内的计数进行时间总和。【参考方案3】:

还有一种选择。 您可以使用 Stackdriver Monitoring API (https://cloud.google.com/monitoring/api/v3/) 读取您的自定义指标,并使用您需要的任何聚合在脚本中对其进行处理。

如果您正在使用 python - 您可以查看 gcloud python 库 https://github.com/GoogleCloudPlatform/google-cloud-python/tree/master/monitoring 这将是一个非常简单的脚本,您可以将计算结果流式传输到 bigquery 表中并在仪表板中使用它

【讨论】:

这是否需要我的代码不仅要记录数据,还要从我的代码中发送 Stackdriver 指标?我主要是在寻找一种方法来计算特定时间段的日志条目,在不从 y 代码发送特定指标的情况下获取数据。【参考方案4】:

首先你必须创建一个指标:

    转到日志浏览器。 输入您的查询 转到操作 >> 创建指标。

在监控仪表板中

    创建图表。 选择资源和指标。 转到“高级”并提供如下详细信息:

预处理步骤:速率

对齐功能:count

对齐周期:1

对齐单位:分钟

分组方式:日志

按功能分组:count

这将为您提供条形图中的可视化效果,其中包含所需事件的计数。

【讨论】:

【参考方案5】:

使用 PacketAI,您可以发送任意格式的日志,包括来自 GCP。然后日志仪表板将自动解析并分组为本视频所示的模式。 https://streamable.com/n50kr8

还会显示不同日志模式的计数和趋势

免责声明:我为 PacketAI 工作

【讨论】:

以上是关于统计指定时间内的 GCP 日志条目数的主要内容,如果未能解决你的问题,请参考以下文章

七.Excel统计函数

Python 统计时间内的并发数

词频统计——项目总结报告

词频统计代码任务总结

日志统计,两数之和

第一次个人作业之词频统计