- 重要な情報
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
NodeJS アプリケーションからのログ収集に Winston を使用すると、ログ戦略の構築に必要なすべての機能を得ることができます。
Winston は、NPM から入手できます。最初に、コードに依存関係を追加する必要があります。
npm install --save winston
package.json
が更新され、対応する依存関係が追加されます。
{
"name": "...",
//...
"dependencies": {
//...
"winston": "x.y.z",
//...
}
}
ブートストラップファイルまたはコード内のいずれかの場所で、次のようにロガーを宣言します。
const { createLogger, format, transports } = require('winston');
const logger = createLogger({
level: 'info',
exitOnError: false,
format: format.json(),
transports: [
new transports.File({ filename: `${appRoot}/logs/<FILE_NAME>.log` }),
],
});
module.exports = logger;
// ログの例
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new (winston.transports.File)({
name: '<LOGGER_NAME>',
filename: '<FILE_NAME>.log',
json: true,
level: 'info'
})
]
});
// ログの例
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });
<FILE_NAME>.log
ファイルの内容をチェックして、Winston がすべてのログを JSON で記録していることを確認します。
{"level":"info","message":"Hello simple log!","timestamp":"2015-04-23T16:52:05.337Z"}
{"color":"blue","level":"info","message":"Hello log with metas","timestamp":"2015-04-23T16:52:05.339Z"}
APM が有効になっているアプリケーションの場合は、APM Nodejs の指示に従いログにトレース ID、スパン ID、env
、service
、version
を自動的に追加し、ログとトレースを接続します。
注: APM トレーサーがログに service
を挿入する場合、Agent 構成で設定されている値は上書きされます。
conf.d/
フォルダーに次の内容の nodejs.d/conf.yaml
ファイルを作成します。
init_config:
instances:
##Log section
logs:
- type: file
path: "<ファイル名パス>.log"
service: nodejs
source: nodejs
sourcecategory: sourcecode
ホストに Agent をインストールしなくても、アプリケーションから Datadog にログをストリーミングできます。ネイティブ接続管理を提供するため、Agent を使用してログを転送することをお勧めします。
Winston HTTP 転送を使用して、Datadog Log API を介してログを直接送信します。 ブートストラップファイルまたはコード内のいずれかの場所で、次のようにロガーを宣言します。
const { createLogger, format, transports } = require('winston');
const httpTransportOptions = {
host: 'http-intake.logs.datadoghq.com',
path: '/api/v2/logs?dd-api-key=<DATADOG_API_KEY>&ddsource=nodejs&service=<APPLICATION_NAME>',
ssl: true
};
const logger = createLogger({
level: 'info',
exitOnError: false,
format: format.json(),
transports: [
new transports.Http(httpTransportOptions),
],
});
module.exports = logger;
// サンプルログ
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });
注: コミュニティでサポートされている [Datadog Transport][2] も確認できます。
const { createLogger, format, transports } = require('winston');
const httpTransportOptions = {
host: 'http-intake.logs.datadoghq.eu',
path: '/api/v2/logs?dd-api-key=<DATADOG_API_KEY>&ddsource=nodejs&service=<APPLICATION_NAME>',
ssl: true
};
const logger = createLogger({
level: 'info',
exitOnError: false,
format: format.json(),
transports: [
new transports.Http(httpTransportOptions),
],
});
module.exports = logger;
// サンプルログ
logger.log('info', 'Hello simple log!');
logger.info('Hello log with metas',{color: 'blue' });
アプリケーションで DNS 参照エラーやクラッシュが発生すると、それが logstash 例外にリンクされて捕捉されなくなる可能性があります。 次のハンドラーを追加してください。
var logstash = new winston.transports.Logstash({ ... });
logstash.on('error', function(err) {
console.error(err); // ここは、独自の機能に置き換えます
});
パラメーター max_connect_retries
を 1
に設定しないようにしてください (デフォルトは 4
)。