Вход в Google Cloud в Google Container / Compute Engine с помощью Go

У меня есть приложение GKE с 20 узлами, на которых работает Go. Я хотел бы объединить все журналы для просмотра в программе просмотра журналов Google Developers Console, но у меня возникают 2 проблемы. Я не могу получить фильтрацию по степени серьезности, и каждая новая строка в моем сообщении журнала запускает новую запись журнала в средстве просмотра (проблематично с новыми строками в журнале).

У меня есть настройка google-fluent-d, поэтому весь стандартный вывод регистрируется в облаке, и я использовал log.Lshortfile, глубину вызова и log.Logger.Output, чтобы получить имя файла и номер строки из библиотеки «log».

Я просмотрел эту библиотеку: "google.golang.org/cloud/logging", но мне не удается заставить ее работать.

Есть где-нибудь библиотека или пример лучшего способа записи логов в GKE и GCE?




Ответы (2)


Есть несколько вещей, которые вы можете сделать в зависимости от того, насколько вы амбициозны.

Самый простой вариант - переключить формат ведения журнала на JSON. Агент google-fluentd автоматически проанализирует JSON за вас, экспортируя структурированные данные каждого сообщения в API облачного журналирования. Он автоматически получит информацию о серьезности, если поле severity находится в JSON, и использование JSON может предотвратить разрыв (экранированные) символы новой строки в ваших сообщениях.

Более сложным (но более гибким) вариантом было бы получить работающую клиентскую библиотеку. Я не уверен, совпадает ли он с тем, на который вы ссылались, но считаю, что это самый последний. Если вы можете подробнее рассказать о возникших у вас проблемах, я могу помочь или уговорить кого-нибудь из команды облачных журналов помочь.

person Alex Robinson    schedule 25.02.2016
comment
Спасибо! Есть ли документация о том, что можно добавить в журнал JSON? Например, ключ к фактическому сообщению или флаги. - person Michael; 01.03.2016
comment
Извините, это совсем не задокументировано. Специальные поля - это только действительно серьезность для серьезности журнала и сообщение для фактического сообщения журнала. Сам код - это то место, откуда я получил это: github.com/GoogleCloudPlatform/fluent-plugin-google-cloud/blob/ - person Alex Robinson; 01.03.2016
comment
Похоже, это перестало работать после обновления узлов до ›= 1.6. Теперь весь объект JSON отображается без анализа в textPayload :-( - person Martin McNulty; 26.06.2017
comment
Проблема, о которой я упоминал в своем предыдущем комментарии, - это проблема, которая, похоже, скоро будет исправлена ​​:) github.com/kubernetes/kubernetes/issues/48108 - person Martin McNulty; 27.06.2017

Я использовал собственный класс ведения журнала, и вместо того, чтобы регистрировать каждое сообщение, я сохранял их в переменной и отправлял после ответа сервера - так что, наконец, у меня в облаке Google есть только одно ведение журнала для каждого запроса с очень длинным textPayload.

Пользовательский класс ведения журнала выглядит примерно так:

class CustomLogging {
   
    messages = "";

    log(message) {
        this.messages += '\n' + message;
    }

    sendLogs(message) {
        console.log(this.messages);
    }

}

Журнал каждого запроса выглядит так:

введите описание изображения здесь

person Israel    schedule 15.12.2020