【发布时间】:2019-01-29 05:50:08
【问题描述】:
TL,DR; 在使用 CloudLoggingHandler 从使用 Google Cloud Logging driver 的 Docker 容器中进行 Stackdriver 日志记录 API 调用时,将忽略日志级别。
细节; 从运行在 Google Compute Engine 上的 Docker 容器获取日志的推荐方法是使用Stackdriver Logging Agent:
最佳做法是在您的所有设备上运行 Stackdriver Logging 代理 虚拟机实例。该代理可在 Linux 和 Windows 下运行。安装 Stackdriver Logging 代理,请参阅安装 Logging 代理。
以下步骤已成功完成:
- 确保 Compute Engine 默认服务帐号具有
Editor和Logs Writer角色。 - 确保 VM 实例具有 Stackdriver Logging API(完整)的 Cloud API 访问范围
- 安装并启动 Stackdriver Logging Agent。
然后,我从 Google 的 Cloud Platform Python docs 复制了示例 CloudLoggingHandler example。
import logging
import google.cloud.logging
from google.cloud.logging.handlers import CloudLoggingHandler
client = google.cloud.logging.Client()
handler = CloudLoggingHandler(client)
cloud_logger = logging.getLogger('cloudLogger')
cloud_logger.setLevel(logging.INFO)
cloud_logger.addHandler(handler)
cloud_logger.error('bad news error')
cloud_logger.warning('bad news warning')
cloud_logger.info('bad news info')
Docker 容器以 Google Cloud Logging Driver 标志 (--log-driver=gcplogs) 启动:
sudo docker run --log-driver=gcplogs --name=server gcr.io/my-project/server:latest
这可行,但是 所有 日志,无论级别如何,仅在查看“任何日志级别”时在 Stackdriver 中可见。奇怪的是,消息本身包含关卡:
2018-08-22 22:34:42.176 BST
ERROR:bad news error
2018-08-22 22:34:42.176 BST
WARNING:bad news warning
2018-08-22 22:34:42.176 BST
WARNING:bad news info
这使得在 Stackdriver UI 中无法按级别进行过滤:
在下面的截图中,每个日志条目的 LHS 上的所有图标都显示级别为Any:
【问题讨论】:
-
由于您收到日志,因此您的配置没有问题。问题似乎更多在于 Stackdriver Logging 代理能够在日志上设置严重性。 @MartinZeitler 提供的链接来自两年前。我建议创建一个新的公共问题,GCP 团队可以在此处进一步调查 Stackdriver Logging 问题:issuetracker.google.com
-
您是否创建了问题?
-
@Jack 你知道了吗?
-
对于那些在 GCE 而不是 GKE 上遇到此问题的人,请尝试将您的实例切换到支持 Stackdriver Logging Agent 的操作系统而不是容器优化
标签: docker google-cloud-platform stackdriver google-cloud-stackdriver