为啥 Stackdriver 日志中会间歇性出现空行?

Posted

技术标签:

【中文标题】为啥 Stackdriver 日志中会间歇性出现空行?【英文标题】:Why do empty lines appear intermittently in Stackdriver logs?为什么 Stackdriver 日志中会间歇性出现空行? 【发布时间】:2020-03-17 21:39:21 【问题描述】:

我每分钟都在运行一个云功能。

Stackdriver 日志中间歇性出现空白行(请参阅下面的日志)。

我不相信这是由于我编写的功能代码。

可以用这个 main.py 重新创建错误:

import logging

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info(f"Logging __name__")


def main(event, context):
    logger.info("Message 1")
    logger.info("Message 2")
    logger.info("Message 3")

当 Cloud Scheduler 每分钟触发一次时,此函数会在几个小时内发出空白行。

如何预防这个问题?

更新:添加了两个扩展日志


 insertId: "000001-redacted-but-identical"  
 labels: 
  execution_id: "894004659398898"   
 
 logName: "projects/redacted/logs/cloudfunctions.googleapis.com%2Fcloud-functions"  
 receiveTimestamp: "2019-12-13T23:05:01.545007423Z"  
 resource: 
  labels: 
   function_name: "recreate_blank_lines"    
   project_id: "redacted"    
   region: "us-central1"    
  
  type: "cloud_function"   
 
 severity: "INFO"  
 timestamp: "2019-12-13T23:05:00.344Z"  
 trace: "projects/redacted/traces/c4ed0267fd9fa4bf9133043bdfe5b1e0"  



 insertId: "000000-redacted-but-identical"  
 labels: 
  execution_id: "894004659398898"   
 
 logName: "projects/redacted/logs/cloudfunctions.googleapis.com%2Fcloud-functions"  
 receiveTimestamp: "2019-12-13T23:05:01.545007423Z"  
 resource: 
  labels: 
   function_name: "recreate_blank_lines"    
   project_id: "redacted"    
   region: "us-central1"    
  
  type: "cloud_function"   
 
 severity: "INFO"  
 textPayload: "Message 2"  
 timestamp: "2019-12-13T23:05:00.345Z"  
 trace: "projects/redacted/traces/c4ed0267fd9fa4bf9133043bdfe5b1e0" 

【问题讨论】:

这听起来像是一个可以由 GCP 支持团队处理的错误,因为他们需要对您的问题进行进一步调查。使用以下链接“issuetracker.google.com”开始使用 已提交,但已标记为私有。将在此处发布结果。希望其他人以前解决过这个问题。 Issuetracker 一周多未上报或回复。 您能否展开日志条目,以便我们可以看到随之而来的元数据(加上“消息 3”条目之一以进行比较)? 是的,但不确定哪些字段是敏感的(如果有的话) 【参考方案1】:

同时,您可以向 stackdriver 添加过滤器以跳过包含空字符串的日志。

【讨论】:

谢谢。如果我添加一个这样的过滤器,它就会变成一个收费的自定义指标:cloud.google.com/stackdriver/pricing。理想情况下这不会发生,因为我只是想查看 INFO 日志计数是否一致。 哦,在这种情况下,您唯一的希望是 gcp 支持解决了这个问题,因为这似乎是他们应该处理的事情。【参考方案2】:

一种可能性是您的代码 - 或您导入的库 - print()s 为 stdout 或 stderr 的空白行作为 this is also soent to logs。

【讨论】:

谢谢,仔细检查。我没有在任何地方打印。【参考方案3】:

截至太平洋标准时间 2020 年 2 月 3 日 13:44:20.476,这个问题对我们来说似乎已经消失了

来自 issuetracker.google.com 上的支持工程师

似乎 stackdriver 使用两个日志之一记录了两次 有空的 textpayload。

我还了解到 stackdriver 会更新他们的日志传递 2020 年第一季度的机制,这可能会解决这个问题。

我将暂时保留这个 isuee 跟踪器。您将收到通知 当问题在 2020 年第一季度得到解决时。

【讨论】:

以上是关于为啥 Stackdriver 日志中会间歇性出现空行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Stackdriver 中导出以前的日志

为啥我在 for() 行上出现 EXC_CRASH (SIGABRT) 错误

需要帮助配置 Stackdriver 警报的条件

为啥 Azure 会出现间歇性错误 503。服务不可用?

为啥使用openmp时会间歇性出现“fatal error C1001”错误?

Adobe Flex:为啥在某些浏览器上会出现间歇性 SecurityError 事件?