0

我在 Google Compute Engine 的 Ubuntu 14.04 上运行 nodeJS 服务器。我想为我的应用程序使用谷歌云日志记录,所以我按照https://cloud.google.com/logging/docs/agent/installation安装了谷歌流利的日志记录代理

我使用 winston 和 winston-syslog 编写日志。这是代码。

var winston = require('winston');
var winstonsyslog = require('winston-syslog').Syslog;

var options = {
    json : true
};

winston.add(winston.transports.Syslog, options);

当我使用写日志时

winston.log('info', "27", { anything: 'This is metadata' });

我正进入(状态

{
  metadata: {…}    
  textPayload: "May 14 10:47:44 localhost node[7633]: {"anything":"This is metadata","level":"info","message":"27"}"    
  insertId: "..."    
  log: "syslog.local0.info"    
}

如何获取 structPayload 而不是 textPayload,它将日志显示为 JSON 而不是 String。

4

1 回答 1

0

日志代理有它自己的配置文件,其中大部分都有format none(参见https://github.com/GoogleCloudPlatform/fluentd-catch-all-config)。因此,所有日志行都转到textPayload.

解决方案是编写自己的 fluentd 配置文件并使用fluent-plugin-google-cloud作为输出。fluent-plugin-google-cloud 应该直接作为 gem 安装,而不是使用 Logging Agent 只要您的条目是有效的 JSON,您就会在 Stackdriver 上看到该条目已structPayload正确设置。键/值过滤器也可以工作。

我从未使用过winston,但这里是示例配置:

<source>
    @type tail
    format apache
    path /var/log/apache/access.log
    tag apache.access
</source>

<match **>
    @type google_cloud
    buffer_chunk_limit 10k
</match>

请注意buffer_chunk_limit 10k,将其设置为太大的值或将其保留为默认值可能会导致Google::Apis::ClientError badRequest: Request payload size exceeds the limit.

于 2016-09-09T09:36:54.003 回答