Graylog: 使用 Node.js

如何從 Node.js 發送日誌到 Graylog

👋 歡迎來到 Stackhero 文件!

Stackhero 提供一個即用型的 Graylog cloud 解決方案,帶來多項好處,包括:

  • 包含無限和專用的 SMTP 電郵伺服器
  • 只需一鍵即可輕鬆更新
  • 使用 HTTPS 保護的可自訂域名(例如,https://logs.your-company.com)。
  • 專用私有 VM提供的最佳性能和強大安全性

節省時間簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Graylog cloud hosting 解決方案!

從 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('簡單訊息範例');

// 附加資料到訊息
logger.log(
  '密碼恢復電子郵件', // 訊息
  // 包含額外詳細資訊的 JSON 物件
  {
    subject: '密碼恢復',
    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 請求', // 訊息
  // 包含更多詳細資訊的 JSON 物件
  {
    route: '/v1/messages/1234/',
    method: 'POST',

    responseTime: 12, // 毫秒
    responseCode: 200,

    ipHash,
    userIdHash
  }
);

// 記錄 Node.js 中未捕獲的異常
process.on(
  'uncaughtException',
  err => {
    logger.log(
      err,
      { type: 'uncaughtException' }
    );
  }
);

如需更多範例,您可以訪問此 GitHub 儲存庫

warning 別忘了配置您的 Graylog 輸入(詳情如下)。

warning 除非您的專案中已經包含 Winston,否則最好使用 graylog2 套件。如果是這種情況,您可以用 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('這是一條日誌資訊');

// 錯誤日誌範例
try {
  throw Error('這是一個錯誤範例');
}
catch(error) {
  logger.warn({ message: '錯誤觸發', error });
}

別忘了配置您的 Graylog 輸入(詳情如下)。

在 Graylog 介面上,導航到 System/Inputs,創建一個類型為 "GELF UDP" 的新輸入,然後點擊 "Launch new input"。在出現的模態窗口中,勾選 "Global",添加標題,並在不修改其他設置的情況下確認。

就是這麼簡單!您的 Graylog 現在已設置為接收來自您的 Node.js 應用程式的日誌。

為了增強安全性,考慮過濾允許發送資料到 12201 埠的 IP。您可以通過訪問 Stackhero 儀表板,選擇您的 Graylog 服務,並配置 "防火牆" 來僅允許您的 IP。