Graylog: Node.jsでの利用方法

Node.jsからGraylogへログを送信する方法

👋 Stackheroのドキュメントへようこそ!

Stackheroは、数多くの利点を提供する、すぐに使えるGraylogクラウドソリューションを提供しています。

  • 無制限で専用のSMTP メールサーバーが含まれています。
  • ワンクリックで簡単にアップデート
  • HTTPSで保護されたカスタマイズ可能なドメイン名(例: https://logs.your-company.com)。
  • プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ

時間を節約し、生活を簡素化:StackheroのGraylogクラウドホスティングソリューションを試すのに5分しかかかりません!

Node.jsからGraylogへログを送信するのは非常に簡単です。この例では、graylog2パッケージを利用してシームレスにログを送信する方法をご紹介します。

まず、以下のコマンドでパッケージをインストールしてください。

npm install graylog2

以下のようにしてログメッセージを送信できます。

const graylog2 = require('graylog2');
const crypto = require('crypto');

const logger = new graylog2.graylog({
  servers: [{ host: '<XXXXXX>.stackhero-network.com', port: 12201 }] // "host"はご自身のGraylogドメインに置き換えてください
});

// シンプルなメッセージをGraylogに送信
logger.log('Simple message example');

// メッセージにデータを付加して送信
logger.log(
  'Password recovery email', // メッセージ
  // 追加情報を含むJSONオブジェクト
  {
    subject: 'Password recovery',
    language: 'en_US',
    domain: 'gmail.com'
  }
);

// 応用例
const ip = '1.2.3.4';
const ipHash = crypto.createHash('md5').update(ip).digest('hex');

const userId = '1234';
const userIdHash = crypto.createHash('md5').update(userId).digest('hex');

logger.log(
  'API request', // メッセージ
  // さらに詳細なJSONオブジェクト
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // ms
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// Node.jsで未捕捉例外をログに記録
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

さらに例を見たい場合は、こちらのGitHubリポジトリをご参照ください。

warning Graylogのインプット設定を忘れずに行ってください(詳細は下記参照)。

warning プロジェクトにすでにWinstonが含まれていない限り、graylog2パッケージの利用を推奨します。Winstonを利用している場合は、winston-gelfに置き換えてください。

Winston GELFパッケージをインストールするには、以下を実行します。

npm install winston-gelf

Winstonがまだプロジェクトに含まれていない場合は、以下で追加できます。

npm install winston

基本的なセットアップ例は以下の通りです。

const winston = require('winston');
const winstonGelf = require('winston-gelf');
const process = require('process');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winstonGelf({
      // gelfProの全オプションはこちらを参照: https://www.npmjs.com/package/gelf-pro
      gelfPro: {
        fields: {
          env: process.env.NODE_ENV || 'development'
        },
        adapterName: 'udp',
        adapterOptions: {
          host: '<XXXXXX>.stackhero-network.com', // ご自身のGraylogドメインに置き換えてください
          port: 12201,
        }
      }
    })
  ]
});

// 情報ログの例
logger.info('This is a log information');

// エラーログの例
try {
  throw Error('This is an example error');
}
catch(error) {
  logger.warn({ message: 'Error triggered', error });
}

Graylogのインプット設定を忘れずに行ってください(詳細は下記参照)。

Graylogのインターフェースで「System」>「Inputs」に移動し、「GELF UDP」タイプの新しいインプットを作成して「Launch new input」をクリックします。表示されるモーダルで「Global」にチェックを入れ、タイトルを入力し、他の設定は変更せずに確定してください。

これで設定は完了です。Node.jsアプリケーションからGraylogへのログ送信が可能になりました。

セキュリティ強化のため、ポート12201への送信を許可するIPアドレスを制限することを推奨します。StackheroダッシュボードでGraylogサービスを選択し、「Firewall」設定から許可するIPのみを指定してください。