【问题标题】:FATAL log is marked as INFO on Google Cloud KubernetesFATAL 日志在 Google Cloud Kubernetes 上被标记为 INFO
【发布时间】:2020-06-18 03:03:05
【问题描述】:

我有一个使用 Rails 2.5.1 的应用程序,该应用程序部署在 Google Cloud Kubernetes 上,但日志无法正常工作。致命错误显示为 INFO 日志,而不是 ERROR 或 CRITICAL。

额外的上下文:

  • Rails 5.2.1
  • 此视图来自Logs Viewer
  • 我正在使用RAILS_LOG_TO_STDOUT=true。如果我删除它,则根本不会显示日志

谢谢。

[更新]

我更新了我的集群以使用最新的 Stackdriver API,但它仍然无法正常工作,Rails.logger.error 显示为 INFO。

【问题讨论】:

  • 貌似这个话题github.com/googleapis/google-cloud-ruby/issues/3990是同一个问题
  • 您的 GKE 集群是否使用旧版日志记录和监控?如果是的话,在这里你可以找到一些解释cloud.google.com/monitoring/kubernetes-engine/…“默认情况下,写入标准输出的日志在INFO级别,写入标准错误的日志在ERROR级别。结构化日志可以包含一个严重性字段,它定义日志的严重性。”
  • @SerhiiRohoza 也是从我这里打开的。
  • 好的。您是否为 GKE 集群使用旧版 Logging 和 Monitoring?
  • @SerhiiRohoza 是的,我是。

标签: kubernetes google-cloud-platform ruby-on-rails-5 stackdriver google-cloud-logging


【解决方案1】:

查看文档 Cloud Logging 的旧版日志记录和监控部分 Best practices

严重性:默认情况下,写入标准输出的日志位于 INFO 级别 和写入标准错误的日志在 ERROR 等级。结构化日志可以包含一个severity 字段,它定义了 日志的严重性。

并且因为您使用的是由 Ruby 生成的 RAILS_LOG_TO_STDOUT=true 日志事件,所以您可以看到严重性 INFO。

请记住,您应该迁移到 Kubernetes Engine Monitoring:

警告:对 Google Kubernetes 的旧版日志记录和监控支持 引擎已弃用。如果您使用的是旧版日志记录和监控, 那么您必须先迁移到 Kubernetes Engine Monitoring,然后才能获得支持 旧版 Logging 和 Monitoring 已删除

迁移后最好回到这个“问题”。

编辑查看文档Writing Logs 部分Writing log entries,您可以在其中找到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

【讨论】:

  • 我更新了堆栈驱动程序,但仍然遇到同样的问题。 Rails.logger.error 正在打印为 INFO。
  • 你还在用RAILS_LOG_TO_STDOUT=true吗?
  • 是的。我还在用。
  • 我认为 rails 没有发送具有正确严重性的日志。我基于此:cloud.google.com/logging/docs/setup/ruby#run-gae
  • 除了您的链接之外,我还更新了我的答案,其中包含文档链接编写日志条目
【解决方案2】:

我得到了这项工作,将日志格式更改为使用 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

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 2018-11-16
    • 2018-07-17
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2019-12-29
    相关资源
    最近更新 更多