# #go #logging #kubernetes #google-kubernetes-engine #google-cloud-stackdriver
#Вперед #ведение журнала #kubernetes #google-kubernetes-engine #google-cloud-stackdriver
Вопрос:
Я не могу видеть сообщения журнала, которые отправляются из моих кластеров GKE с помощью Golang. Они отлично работают при локальном запуске, но не из контейнера, запущенного в 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)
}
}
Ответ №1:
Итак, решение было проще, чем я ожидал. Я еще не до конца понимаю это, но, похоже, так работает stackdriver.
Когда я запускаюсь локально, мои журналы отображаются в разделе Google Project -> Идентификатор проекта -> Имя журнала
Когда я запускаюсь в GKE, он отображается в экземпляре виртуальной машины -> Идентификатор экземпляра (или всего экземпляра) -> Имя журнала
Я бы на самом деле ожидал, что он будет постоянно отображаться в Google project. Либо это не так, либо я неправильно настроил Stackdriver.