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('簡單訊息範例');
// 附加數據到訊息
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 輸入(詳情如下)。
使用 Winston GELF 套件將 Node.js 日誌發送到 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 輸入
在 Graylog 介面上,導航到 System/Inputs,創建一個類型為 "GELF UDP" 的新輸入,然後點擊 "Launch new input"。在出現的模態窗口中,勾選 "Global",添加標題,並在不修改其他設置的情況下確認。
就是這麼簡單!您的 Graylog 現在已設置好接收來自您的 Node.js 應用程式的日誌。
為了增強安全性,考慮過濾允許發送數據到端口 12201 的 IP。您可以通過訪問 Stackhero 儀表板,選擇您的 Graylog 服務,並配置 "防火牆" 以僅允許您的 IP 來實現。