Журнал FATAL помечен как INFO в Google Cloud Kubernetes - PullRequest
0 голосов
/ 05 марта 2020

У меня есть приложение, использующее Rails 2.5.1, которое развернуто в Google Cloud Kubernetes, но журналы не работают должным образом. ФАТАЛЬНЫЕ ошибки отображаются в виде журналов INFO, а не ERROR или CRITICAL.

enter image description here

Дополнительный контекст:

  • Рельсы 5.2.1
  • Это представление Logs Viewer
  • Я использую RAILS_LOG_TO_STDOUT=true. Если я удаляю это, журналы вообще не отображаются

Спасибо.

[ОБНОВЛЕНИЕ]

Я обновил свой кластер, чтобы использовать новейший API Stackdriver, но он все еще не работает и Rails.logger.error отображается как INFO.

enter image description here

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Я получил эту работу, меняя формат журнала на JSON.

config.log_formatter = proc do |severity, datetime, progname, msg|
    message = msg
    message << " from #{progname}" if progname.present?
    content = JSON.dump(timestamp: datetime.to_s, severity: severity, message: message)
    content << "\n"
    content
  end
0 голосов
/ 05 марта 2020

Ознакомьтесь с документацией Облачное ведение журнала для устаревшего раздела Ведение журнала и мониторинга Лучшие практики :

Серьезности : По по умолчанию журналы, записанные в стандартный вывод, находятся на уровне INFO , а журналы, записанные в стандартную ошибку, - на уровне ОШИБКА. Структурированные журналы могут включать в себя поле severity, которое определяет серьезность журнала.

и поскольку вы используете RAILS_LOG_TO_STDOUT=true события журнала, сгенерированные с помощью Ruby, вы можете видеть с серьезностью INFO.

Имейте в виду, что вам нужно перейти на Kubernetes Engine Monitoring:

Предупреждение : устаревшая поддержка ведения журнала и мониторинга для Google Kubernetes Engine устарела. Если вы используете Legacy Logging and Monitoring, то необходимо перенести в Kubernetes Engine Monitoring до того, как поддержка Legacy Logging and Monitoring будет удалена .

, лучше вернуться к этой проблеме «после миграции.

РЕДАКТИРОВАТЬ Ознакомьтесь с документацией Запись журналов раздел Запись записей журнала , где вы можете найти пример для Ruby:

Вот пример кода для записи одной записи журнала в mylog. Служба, регион, метки и другое содержимое будут меняться в зависимости от записи и приложения, которое пишет.

require "google/cloud/logging"

logging = Google::Cloud::Logging.new project: "my-gcp-project-id"

entry = logging.entry entry.log_name = "my_application_log" 
entry.payload  = "Log message" 
entry.severity = :NOTICE 
entry.resource.type = "gae_app" 
entry.resource.labels[:module_id] = "default" 
entry.resource.labels[:version_id] = "20160101t163030"

logging.write_entries entry
...