0

Google Compute Engine の Ubuntu 14.04 で nodeJS サーバーを実行しています。アプリケーションに Google クラウド ログを使用したいので、https: //cloud.google.com/logging/docs/agent/installation に従って Google fluentd ログ エージェントをインストールしました。

ログの書き込みには 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"    
}

ログを文字列ではなく JSON として表示する textPayload の代わりに structPayload を取得する方法。

4

1 に答える 1

0

Logging エージェントには独自の構成ファイルがあり、ほとんどの構成ファイルがありますformat none( https://github.com/GoogleCloudPlatform/fluentd-catch-all-configを参照)。したがって、すべてのログ行は に移動しtextPayloadます。

解決策は、独自の fluentd 構成ファイルを作成し、出力としてfluent-plugin-google-cloudを使用することです。fluent-plugin-google-cloud は、Logging Agent を使用せず、gem として直接インストールする必要があります。エントリが有効な 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 に答える