如何修复Stackdriver Winston“错误的元数据标头”错误

时间:2019-04-09 20:45:41

标签: node.js winston stackdriver google-cloud-stackdriver

我正在尝试在node.js应用程序中设置Stackdriver Winston登录(在localhost上运行,以部署到Kubernetes中的Docker容器)。正常运行时,会引发“来自元数据服务的无效响应:错误的Metadata-Flavor标头”。

http://localhost:8080上进行本地调试。我在GCP中使用具有Log-Writer,Admin和Log-Reader权限的服务帐户。设置记录器时,我尝试过设置GOOGLE_APPLICATION_CREDENTIALS env变量和显式身份验证。

软件包版本为“ winston”:“ ^ 3.2.1”和“ @ google-cloud / logging-winston”:“ ^ 0.11.0”。

const { createLogger, format, transports } = require('winston');
const { LoggingWinston } = require('@google-cloud/logging-winston');

const loggingWinston = new LoggingWinston({
    projectId: 'projectid',
    keyFilename: 'path_to_key"
  });

module.exports = createLogger({
    transports:[
        new transports.Console({
            format: format.combine(
                format.timestamp(),
                format.json()
            )
        }),
        loggingWinston
    ]
})

log.info('Test our logging');
log.error('Test logging again');

GCP Stackdriver日志查看器中没有记录的消息,日志类型下拉列表中没有winston_log,并且在“ node_modules \ gcp-metadata \ build \ src \ index”处引发了“来自元数据服务的无效响应:错误的Metadata-Flavor标头”异常.js:65:23”。尝试记录消息。

1 个答案:

答案 0 :(得分:0)

TL; DR:如果您在GCE VM上测试代码,那么您应该可以获得更多。

登录到Stackdriver需要monitored resource。通常,Stackdriver日志记录客户端将尝试通过从元数据服务器中查询Metadata-Flavor标头来查询GCE instance metadata,从而自动检测构造受监视资源所需的属性。 code希望响应的标头与发送的标头具有相同的Metadata-Flavor标头。

在GCE VM外部运行时,通常将无法访问元数据服务器。但是,您似乎实际上收到的响应不包含Metadata-Flavor标头。由于首先检查了标题的存在,所以您会看到此错误。