Журналы Stackdriver не отображаются в GKE - PullRequest
1 голос
/ 11 апреля 2019

Я не могу видеть сообщения журнала, отправленные из моих кластеров 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)
    }
}

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Таким образом, решение оказалось проще, чем я ожидал. Я пока не до конца понимаю, но, похоже, работает стековый драйвер.

Когда я запускаю локально, мои журналы отображаются в Google Project -> Идентификатор проекта -> Имя журнала

Когда я запускаю в GKE, он отображается в Экземпляре ВМ -> Идентификатор экземпляра (или весь Экземпляр) -> Имя журнала

Я бы действительно ожидал, что он будет постоянно отображаться в проекте Google. Либо это не так, либо я неправильно настроил Stackdriver.

0 голосов
/ 15 апреля 2019

Смотрите здесь:

https://cloud.google.com/kubernetes-engine/docs/tutorials/authenticating-to-cloud-platform

Ваш контейнерный клиент не может пройти проверку подлинности с помощью службы ведения журнала Cloud Platform.

Вы не объясняете, как вы проходите аутентификацию при локальном запуске клиента, но этот механизм необходимо воспроизвести в Kubernetes.

Если вы проверяете журналы контейнера, они должны подтвердить невозможность аутентификации в службе журналов.

НТН!

...