Ведение журнала Stackdriver не отображается для GKE - PullRequest
0 голосов
/ 14 декабря 2018

Мне кажется, что где-то не хватает какой-то конфигурации, но я не знаю, где.

Мое приложение (golang) использует ведение журнала в стеке.Когда я работаю локально, он работает нормально, и мои сообщения журнала отображаются в Stackdriver.Когда я запускаю в GKE, мои пользовательские сообщения регистратора не отображаются.

Любые стандартные выходные сообщения (fmt.println ()) будут отображаться в драйвере стека.Они просто не имеют должного уровня серьезности и предпочитают использовать логирование API.Что я мог неправильно настроить в своем экземпляре GKE, чтобы логгинг Google не отображался?

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

Вот мой код для отправки сообщений, если это помогает.

    func logMessage(message string, transactionID string, severity logging.Severity) {

        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)

        logger.Log(logging.Entry{Payload: message, InsertID: transactionID, Severity: severity})

        // Closes the client and flushes the buffer to the Stackdriver Logging
        // service.
        if err := client.Close(); err != nil {
            log.Panicln("Failed to close client: \n", err.Error())
            return
        }
        return
    }

Обновление:

Я получил мой SSH, работающий в узле (экземпляр виртуальной машины), и подтвердил, что, похоже, работает FluentD исобирая изменения.Я открыл файлы журнала и видел только вещи из fmt.Println и ничего из golang cloud Logger.

Может быть, я не понимаю, как Google Stackdriver Logging (https://godoc.org/cloud.google.com/go/logging) должен работать? Я явно что-то упускаю и просто не уверен, что еще.

Спасибо

1 Ответ

0 голосов
/ 17 декабря 2018

В GKE используется агент fluentd, который включается в образ виртуальной машины (узел).Его роль - наблюдать за изменениями в файлах журнала Docker, которые находятся в каталоге /var/lib/docker/containers/ и символически связаны с каталогом /var/log/containers, используя имена, которые фиксируют имя модуля и имя контейнера.Эти журналы затем отправляются в Google Cloud Logging, который предполагает установку подключаемого модуля облачного журналирования.

Вы можете настроить конфигурацию агента для потоковой передачи журналов с дополнительных входов, таких как Потоковая неструктурированная (текст)или структурированные (JSON) журналы через файлы журналов .

По умолчанию fluentd извлекает local_resource_id из тега для отслеживаемого 'k8s_container':

Ресурс.Формат:

'k8s_container.<namespace_name>.<pod_name>.<container_name>'.

Агент Fluentd переименовывает поле «log» в более общее поле «message».Таким образом, fluent-plugin-google-cloud знает, чтобы сгладить поле как textPayload вместо jsonPayload после извлечения 'time', 'severity' и 'stream' из записи.

Если значение 'серьезность' не установлено, предположим, что stderr - это ОШИБКА, а stdout - это ИНФО.

Агент может быть включен при создании кластера, тогда будет создан модуль по умолчанию для fluentd.

Вы также можете выполнить ручную установку агента ведения стека-драйверов в GKE (fluentd).

Сначала я предложу вам выяснить, работает ли у вас агент.

Чтобы сделать SSH к вашему узлу и проверить, работает ли агент, запустите следующую командную строку

ps ax | grep fluentd

Пример вывода:

2284 ?        Sl     0:00 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd [...]
2287 ?        Sl    42:44 /opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd [...]

Выполните тест, запустивприведенная ниже командная строка:

logger "Some test message"

Проверьте ведение журнала в стеке драйвера для вашего тестового сообщения

...