我有一个简单的Python应用程序运行在googlekubernetes引擎的容器中。我正在尝试将标准Python日志记录连接到Google Stackdriver日志记录using this guide。我几乎成功了,但是我得到了重复的日志条目,其中一个总是处于“错误”级别。。。在
显示重复条目的Stackdriver日志的屏幕截图
这是我的python代码,根据上面的指南设置日志记录:
import webapp2
from paste import httpserver
import rpc
# Imports the Google Cloud client library
import google.cloud.logging
# Instantiates a client
client = google.cloud.logging.Client()
# Connects the logger to the root logging handler; by default this captures
# all logs at INFO level and higher
client.setup_logging()
app = webapp2.WSGIApplication([('/rpc/([A-Za-z]+)', rpc.RpcHandler),], debug=True)
httpserver.serve(app, host='0.0.0.0', port='80')
下面是从屏幕截图中触发日志的代码:
^{pr2}$以下是完整的Stackdriver日志,从屏幕截图展开,错误级别解释错误:
{
insertId: "1mk4fkaga4m63w1"
labels: {
compute.googleapis.com/resource_name: "gke-alg-microservice-default-pool-xxxxxxxxxx-ttnz"
container.googleapis.com/namespace_name: "default"
container.googleapis.com/pod_name: "esp-alg-xxxxxxxxxx-xj2p2"
container.googleapis.com/stream: "stderr"
}
logName: "projects/projectname/logs/algorithm"
receiveTimestamp: "2018-01-03T12:18:22.479058645Z"
resource: {
labels: {
cluster_name: "alg-microservice"
container_name: "alg"
instance_id: "703849119xxxxxxxxxx"
namespace_id: "default"
pod_id: "esp-alg-xxxxxxxxxx-xj2p2"
project_id: "projectname"
zone: "europe-west1-b"
}
type: "container"
}
severity: "ERROR"
textPayload: "INFO Entering PostEchoPost...
"
timestamp: "2018-01-03T12:18:20Z"
}
以下是完整的Stackdriver日志,从屏幕截图展开,具有正确解释的信息级别:
{
insertId: "1mk4fkaga4m63w0"
jsonPayload: {
message: "INFO Entering PostEchoPost..."
thread: 140348659595008
}
labels: {
compute.googleapis.com/resource_name: "gke-alg-microservi-default-pool-xxxxxxxxxx-ttnz"
container.googleapis.com/namespace_name: "default"
container.googleapis.com/pod_name: "esp-alg-xxxxxxxxxx-xj2p2"
container.googleapis.com/stream: "stderr"
}
logName: "projects/projectname/logs/algorithm"
receiveTimestamp: "2018-01-03T12:18:22.479058645Z"
resource: {
labels: {
cluster_name: "alg-microservice"
container_name: "alg"
instance_id: "703849119xxxxxxxxxx"
namespace_id: "default"
pod_id: "esp-alg-xxxxxxxxxx-xj2p2"
project_id: "projectname"
zone: "europe-west1-b"
}
type: "container"
}
severity: "INFO"
timestamp: "2018-01-03T12:18:20.260099887Z"
}
所以,这个条目可能是关键:
container.googleapis.com/stream: "stderr"
看起来除了我的日志设置工作之外,来自容器的所有日志都被发送到容器中的stderr,而且我相信在默认情况下,至少在Kubernetes容器引擎上,所有stdout/stderr都是由Google Stackdriver通过FluentD获取的。。。话虽如此,我在这一点上有些力不从心。在
你知道为什么我会得到这些重复的条目吗?在
问题在于日志客户端如何初始化根记录器
除了Stackdriver处理程序之外,它还添加了默认流处理程序。 我现在的解决方法是手动初始化适当的Stackdriver处理程序:
^{pr2}$相关问题 更多 >
编程相关推荐