溫馨提示×

Ubuntu Node.js日志中的請求跟蹤技術

小樊
44
2025-07-21 04:06:55
欄目: 編程語言

在Ubuntu系統中,通過日志追蹤Node.js應用程序的請求流程可以幫助你了解應用程序的運行狀況、性能瓶頸以及潛在的問題。以下是一些步驟和工具,可以幫助你實現這一目標:

啟用Node.js日志

  • 使用內置的 console.log
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Request received at', new Date());
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});
  • 使用更高級的日志庫如 winstonmorgan
const express = require('express');
const winston = require('winston');
const app = express();

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({ format: winston.format.simple() }));
}

app.get('/', (req, res) => {
  logger.info('Request received at', new Date());
  res.send('Hello World!');
});

app.listen(3000, () => {
  logger.info('Server is running on port 3000');
});

使用 pm2 管理Node.js進程

  • 安裝 pm2
sudo npm install pm2 -g
  • 啟動應用程序
pm2 start app.js --name my-app
  • 查看日志
pm2 logs my-app

使用 nginx 作為反向代理

  • 配置 nginx 日志

編輯 /etc/nginx/sites-available/default 文件,添加以下內容:

server {
  listen 80;
  server_name yourdomain.com;

  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
  }
}
  • 重啟 nginx
sudo systemctl restart nginx

使用 tcpdump 抓包分析

  • 安裝 tcpdump
sudo apt-get install tcpdump
  • 抓包
sudo tcpdump -i eth0 port 80 -w capture.pcap

使用 Wireshark 分析抓包文件

  • 安裝 Wireshark
sudo apt-get install wireshark
  • 打開抓包文件

啟動 Wireshark 并打開 capture.pcap 文件進行分析。

查找和分析慢請求日志

  • 使用 console.time()console.timeEnd() 記錄請求時間
console.time('requestTime');
// 執行請求邏輯
console.timeEnd('requestTime');
  • 使用日志庫記錄詳細日志
const winston = require('winston');
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});

app.use((req, res, next) => {
  logger.info({ method: req.method, url: req.url, responseTime: Date.now() - req.start, status: res.statusCode });
  next();
});
  • 分析日志文件

使用命令行工具如 tail、grep 等來分析日志文件,找出耗時較長的請求。

通過上述方法,你可以有效地追蹤和分析Ubuntu系統中Node.js應用程序的請求流程。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女