Python 为什么Stackdriver会合并多条消息?
我有一个GAE应用程序在Python中使用print()编写到标准输出。Stackdriver将其拾取并正确地将输出解释为JSON有效负载,基本上没有问题,除了每批大约三万条消息中有几千条消息,实际上它将多个JSON对象组合到一个日志条目中,并将其解释为文本有效负载——我希望它不要这样做 我被难住了,因为我甚至将print()移动到了一个单独的线程,并在每个print()之间引入了时间延迟,所以我不相信会发生这种情况。我也不断地搜索,发现有人遇到了同样的问题,但没有找到任何结果 下面是代码-Python 为什么Stackdriver会合并多条消息?,python,google-app-engine,stackdriver,google-cloud-stackdriver,Python,Google App Engine,Stackdriver,Google Cloud Stackdriver,我有一个GAE应用程序在Python中使用print()编写到标准输出。Stackdriver将其拾取并正确地将输出解释为JSON有效负载,基本上没有问题,除了每批大约三万条消息中有几千条消息,实际上它将多个JSON对象组合到一个日志条目中,并将其解释为文本有效负载——我希望它不要这样做 我被难住了,因为我甚至将print()移动到了一个单独的线程,并在每个print()之间引入了时间延迟,所以我不相信会发生这种情况。我也不断地搜索,发现有人遇到了同样的问题,但没有找到任何结果 下面是代码-wr
write()
获取一条消息,该消息将发布到PubSub主题:
def write(self, input):
self.future = self.publisher.publish(self.topic_name, input)
self.future.add_done_callback(self.callback)
log_thread = threading.Thread(target=self.log_message, kwargs={"input": input})
log_thread.start()
def log_message(self, input):
event = json.loads(input.decode("utf-8"))
event['topic'] = self.topic_name # the pubsub topic address
event['publish_time'] = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
print(payload)
time.sleep(0.01)
stackdriver的预期日志输出为:
{"unique_event_id": "x", "hashed_msisdn": "x", "event_timestamp": 1600449466477041, "event_name": "random_event", "topic": "projects/x/topics/y", "publish_time": "2020-09-21 17:32:09"}
相反,我得到的(有时)是2或3个事件组合在一个单独的日志行中,解释为文本:
{"unique_event_id": "x_event_1", "hashed_msisdn": "x", "event_timestamp": 1600449466477041, "event_name": "random_event", "topic": "projects/x/topics/y", "publish_time": "2020-09-21 17:32:09"}{"unique_event_id": "x_event_2", "hashed_msisdn": "x", "event_timestamp": 1600449466477123, "event_name": "some_other_random_event", "topic": "projects/x/topics/z", "publish_time": "2020-09-21 17:32:09"}
我能看到的唯一模式是,这些事件集群的发布时间(由datetime.utcnow()
确定)是相同的
我真的很想在这里得到一些见解/指导。谢谢 我是否正确地理解了即使没有单独的线程和时间延迟也会发生这种情况?发生这种情况时,请求的速率是多少?日志消息是来自相同的实例ID还是来自不同的实例?您可以尝试在输出中包含实例ID吗?是的,无论线程如何,都会发生这种情况。日志消息来自不同和相同实例的混合——调用相同服务的独立cron作业(我通常有2-4个活动实例)。我将在中添加实例ID,看看会出现什么。谢谢我是否正确地理解了即使没有单独的线程和时间延迟也会发生这种情况?发生这种情况时,请求的速率是多少?日志消息是来自相同的实例ID还是来自不同的实例?您可以尝试在输出中包含实例ID吗?是的,无论线程如何,都会发生这种情况。日志消息来自不同和相同实例的混合——调用相同服务的独立cron作业(我通常有2-4个活动实例)。我将在中添加实例ID,看看会出现什么。谢谢