Graylog: 與 Node.js 一起使用
如何從 Node.js 發送日誌到 Graylog
👋 歡迎來到 Stackhero 文件!
Stackhero 提供即用型的 Graylog cloud 解決方案,帶來多項好處,包括:
- 包含無限和專用的 SMTP 電郵伺服器。
- 只需一鍵即可輕鬆更新。
- 使用 HTTPS 保護的可自訂域名(例如,https://logs.your-company.com)。
- 由專用私有 VM提供的最佳性能和強大安全性。
節省時間並簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Graylog cloud hosting 解決方案!
使用 graylog2 套件將 Node.js 日誌發送到 Graylog(推薦)
從 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 repository。
warning 請不要忘記設定您的 Graylog input(詳情見下方)。
使用 Winston GELF 套件將 Node.js 日誌發送到 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 input(詳情見下方)。
設定 Graylog input
在 Graylog 介面中,請前往 System/Inputs,建立一個新的 "GELF UDP" 類型 input,然後點擊「Launch new input」。在彈出視窗中,勾選「Global」,填寫標題,並直接確認,不需修改其他設定。
就是這麼簡單!您的 Graylog 現在已經可以接收來自 Node.js 應用程式的日誌。
為了提升安全性,建議您限制哪些 IP 可以傳送資料到 12201 埠口。您可以在 Stackhero 控制台選擇您的 Graylog 服務,然後在「Firewall」設定中只允許您的 IP。