Stackdriver 日志未显示在 GKE 中
Stackdriver logs not showing up in GKE
我无法看到使用 Golang 从我的 GKE 集群发送的日志消息。它们在本地 运行 但在 GKE 中的容器 运行 时工作正常。显然 GKE 中配置错误,但我没有看到任何错误,但不确定去哪里查看。任何见解或要检查的地方都会非常有用。
下面是我的代码和集群作用域(如果有帮助的话)。
谢谢。
范围:
oauthScopes:
- https://www.googleapis.com/auth/cloud-platform
- https://www.googleapis.com/auth/compute
- https://www.googleapis.com/auth/datastore
- https://www.googleapis.com/auth/devstorage.full_control
- https://www.googleapis.com/auth/devstorage.read_only
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/pubsub
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/source.full_control
- https://www.googleapis.com/auth/sqlservice.admin
- https://www.googleapis.com/auth/trace.append
代码:
func LogMessage(logLevel ReddiyoLoggingSeverity, message, domain, transactionID string) {
ctx := context.Background()
// Creates a client.
client, err := logging.NewClient(ctx, loggingData.ProjectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Selects the log to write to.
logger := client.Logger(loggingData.LogName)
labels := make(map[string]string)
labels["transactionID"] = transactionID
labels["domain"] = domain
var logSeverity logging.Severity
switch logLevel {
case debug:
logSeverity = logging.Debug
case info:
logSeverity = logging.Info
case warning:
logSeverity = logging.Warning
case reddiyoError:
logSeverity = logging.Error
case critical:
logSeverity = logging.Critical
case emergency:
logSeverity = logging.Emergency
default:
logSeverity = logging.Warning
}
logger.Log(logging.Entry{
Payload: message,
Severity: logSeverity,
Labels: labels})
// Closes the client and flushes the buffer to the Stackdriver Logging
// service.
if err := client.Close(); err != nil {
log.Fatalf("Failed to close client: %v", err)
}
}
看这里:
https://cloud.google.com/kubernetes-engine/docs/tutorials/authenticating-to-cloud-platform
您的容器化客户端无法针对云平台日志记录服务进行身份验证。
当 运行 客户端在本地时,您没有解释如何进行身份验证,但需要在 Kubernetes 上重现此机制。
如果您检查容器的日志,这些应该可以确认未能针对日志记录服务进行身份验证。
HTH!
所以解决方案比我预期的要简单。我还没有完全理解它,但似乎是 stackdriver 的工作原理。
当我在本地 运行 时,我的日志显示在 Google 项目下 --> 项目 ID --> 日志名称
当我在 GKE 中 运行 时,它会显示在 VM 实例中 --> 实例 ID(或所有实例)--> 日志名称
我实际上希望它一直出现在 google 项目下。要么没有,要么我错误配置了 Stackdriver。
我无法看到使用 Golang 从我的 GKE 集群发送的日志消息。它们在本地 运行 但在 GKE 中的容器 运行 时工作正常。显然 GKE 中配置错误,但我没有看到任何错误,但不确定去哪里查看。任何见解或要检查的地方都会非常有用。
下面是我的代码和集群作用域(如果有帮助的话)。
谢谢。
范围:
oauthScopes:
- https://www.googleapis.com/auth/cloud-platform
- https://www.googleapis.com/auth/compute
- https://www.googleapis.com/auth/datastore
- https://www.googleapis.com/auth/devstorage.full_control
- https://www.googleapis.com/auth/devstorage.read_only
- https://www.googleapis.com/auth/logging.write
- https://www.googleapis.com/auth/monitoring
- https://www.googleapis.com/auth/monitoring.write
- https://www.googleapis.com/auth/pubsub
- https://www.googleapis.com/auth/service.management.readonly
- https://www.googleapis.com/auth/servicecontrol
- https://www.googleapis.com/auth/source.full_control
- https://www.googleapis.com/auth/sqlservice.admin
- https://www.googleapis.com/auth/trace.append
代码:
func LogMessage(logLevel ReddiyoLoggingSeverity, message, domain, transactionID string) {
ctx := context.Background()
// Creates a client.
client, err := logging.NewClient(ctx, loggingData.ProjectID)
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
// Selects the log to write to.
logger := client.Logger(loggingData.LogName)
labels := make(map[string]string)
labels["transactionID"] = transactionID
labels["domain"] = domain
var logSeverity logging.Severity
switch logLevel {
case debug:
logSeverity = logging.Debug
case info:
logSeverity = logging.Info
case warning:
logSeverity = logging.Warning
case reddiyoError:
logSeverity = logging.Error
case critical:
logSeverity = logging.Critical
case emergency:
logSeverity = logging.Emergency
default:
logSeverity = logging.Warning
}
logger.Log(logging.Entry{
Payload: message,
Severity: logSeverity,
Labels: labels})
// Closes the client and flushes the buffer to the Stackdriver Logging
// service.
if err := client.Close(); err != nil {
log.Fatalf("Failed to close client: %v", err)
}
}
看这里:
https://cloud.google.com/kubernetes-engine/docs/tutorials/authenticating-to-cloud-platform
您的容器化客户端无法针对云平台日志记录服务进行身份验证。
当 运行 客户端在本地时,您没有解释如何进行身份验证,但需要在 Kubernetes 上重现此机制。
如果您检查容器的日志,这些应该可以确认未能针对日志记录服务进行身份验证。
HTH!
所以解决方案比我预期的要简单。我还没有完全理解它,但似乎是 stackdriver 的工作原理。
当我在本地 运行 时,我的日志显示在 Google 项目下 --> 项目 ID --> 日志名称
当我在 GKE 中 运行 时,它会显示在 VM 实例中 --> 实例 ID(或所有实例)--> 日志名称
我实际上希望它一直出现在 google 项目下。要么没有,要么我错误配置了 Stackdriver。