我有一个 Node.js 应用程序,在 Docker 容器内运行并使用 Stackdriver 记录事件。
它是一个 Node.Js 应用程序,与 Express.js 和 Winston 一起运行,用于记录和使用 StackDriverTransport。
当我在本地运行此容器时,所有内容都会正确记录并显示在云控制台中。当我在 GCE VM 中使用相同的环境变量运行同一个容器时,日志不会显示。
我有一个 Node.js 应用程序,在 Docker 容器内运行并使用 Stackdriver 记录事件。
它是一个 Node.Js 应用程序,与 Express.js 和 Winston 一起运行,用于记录和使用 StackDriverTransport。
当我在本地运行此容器时,所有内容都会正确记录并显示在云控制台中。当我在 GCE VM 中使用相同的环境变量运行同一个容器时,日志不会显示。
你说的本地是什么意思?您是在 Cloud Shell 上运行容器还是在实例上运行容器?请记住,如果您创建的容器或实例必须执行需要权限的操作(例如 Stackdriver 日志记录客户端库)并运行它,如果该实例没有设置了该角色/权限的服务帐户,它将获胜不行。
Yu 提到您使用相同的环境变量,我认为其中一个环境变量指向您的 json 密钥文件。密钥文件是否存在于实例的该路径中?
从Winston 文档看来,您需要为服务帐户指定密钥文件位置:
const winston = require('winston');
const Stackdriver = require('@google-cloud/logging-winston');
winston.add(Stackdriver, {
projectId: 'your-project-id',
keyFilename: '/path/to/keyfile.json'
});
您是否检查过这是否是使用具有日志记录角色的服务帐户的密钥定义的?