Журналы Stackdriver не отображаются в GKE

# #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.