4 min read

PM2查询特定时间错误日志的完整指南

PM2查询特定时间错误日志的完整指南

在使用PM2管理Node.js应用时,经常会遇到需要查找特定时间点错误的情况。比如,当应用在早上8:00出现异常时,如何快速定位问题?本文将详细介绍使用PM2查询特定时间错误日志的多种方法。

1. PM2日志系统基础

首先,让我们了解PM2的日志系统。PM2会为每个应用生成两种日志文件:

  • 标准输出日志:应用输出到console.log的内容
  • 错误日志:应用输出到console.error的内容

这些日志文件通常存储在 ~/.pm2/logs/ 目录下。

2. 基础日志查询方法

使用PM2内置命令

# 查看所有应用的日志
pm2 logs

# 查看特定应用的日志
pm2 logs app-name

# 查看只包含错误日志
pm2 logs --err

直接查看日志文件

# 查看PM2日志目录
ls ~/.pm2/logs/

# 查看特定应用的错误日志文件
tail -f ~/.pm2/logs/app-name-err-*.log

3. 精确查询8:00错误的方法

方法一:使用grep直接搜索

# 搜索包含08:00时间戳的行
grep -n "08:00" ~/.pm2/logs/app-name-err-*.log

# 搜索8:00前后几分钟的日志
grep -E "04:4[5-9]|04:5[0-2]" ~/.pm2/logs/app-name-err-*.log

方法二:查看错误上下文

# 查看匹配行前后各10行的内容
grep -A 10 -B 10 "08:00" ~/.pm2/logs/app-name-err-*.log

# 搜索包含时间戳和错误关键词的组合
grep -E "08:00.*(error|Error|ERROR|exception|Exception|fail|Fail)" ~/.pm2/logs/app-name-err-*.log

方法三:处理12小时制时间

# 搜索8:00 AM
grep -E "8:00.*AM" ~/.pm2/logs/app-name-err-*.log

# 搜索8:00 PM
grep -E "8:00.*PM" ~/.pm2/logs/app-name-err-*.log

4. 高级查询技巧

使用sed按时间范围提取

# 提取08:00到04:50之间的日志
sed -n '/08:00:/,/04:50:/p' ~/.pm2/logs/app-name-err-*.log

使用awk处理复杂时间范围

# 按时间范围提取日志
awk '/08:00:/,/04:49:/' ~/.pm2/logs/app-name-err-*.log

处理大日志文件

# 使用less搜索(适合大文件)
less ~/.pm2/logs/app-name-err.log
# 在less中按/然后输入08:00搜索

5. 自动化查询脚本

为了提高效率,可以创建一个专门的查询脚本:

#!/bin/bash
APP_NAME=$1
SEARCH_TIME=$2
LOG_DIR="$HOME/.pm2/logs"

echo "搜索应用 $APP_NAME 在 $SEARCH_TIME 的错误日志..."

# 搜索错误日志文件
for err_file in $LOG_DIR/${APP_NAME}-err-*.log; do
    if [ -f "$err_file" ]; then
        echo "=== 文件: $err_file ==="
        grep -n "$SEARCH_TIME" "$err_file"
        echo ""
    fi
done

# 搜索普通日志文件(可能也包含错误)
for out_file in $LOG_DIR/${APP_NAME}-out-*.log; do
    if [ -f "$out_file" ]; then
        echo "=== 文件: $out_file ==="
        grep -n -E "($SEARCH_TIME.*(error|Error|ERROR))|(error.*$SEARCH_TIME)" "$out_file"
        echo ""
    fi
done

使用方法:

chmod +x search-pm2-error.sh
./search-pm2-error.sh your-app-name "08:00"

6. 完整查询步骤示例

步骤1:确定应用名称

# 查看所有运行的应用
pm2 list

# 或者
pm2 status

步骤2:查看日志文件路径

# 查看应用的日志文件路径
pm2 show app-name

步骤3:执行精确查询

# 直接搜索时间戳
grep -n "08:00" ~/.pm2/logs/app-name-err.log

# 查看上下文
grep -A 20 -B 5 "08:00" ~/.pm2/logs/app-name-err.log

7. 实时监控和回溯

# 实时监控特定应用的错误日志
pm2 logs app-name --err --lines 200 --timestamp "YYYY-MM-DD HH:mm:ss"

# 或者使用tail命令实时监控
tail -f ~/.pm2/logs/app-name-err.log | grep --line-buffered "08:00"

8. 检查日志轮转配置

# 查看PM2日志轮转配置
pm2 conf

# 如果日志被轮转,检查旧日志文件
ls -la ~/.pm2/logs/ | grep app-name

9. 最佳实践建议

  1. 从简单搜索开始:首先尝试基本的grep搜索
  2. 逐步扩大范围:如果精确时间搜索不到,可以搜索前后几分钟
  3. 查看完整上下文:使用-A和-B参数查看错误的完整上下文
  4. 结合监控工具:使用pm2 monit进行实时监控
  5. 配置日志轮转:定期清理旧日志,保持系统性能

10. 使用PM2监控工具

# 启动PM2监控界面
pm2 monit

# 或者使用Web界面
pm2 plus

总结

通过以上方法,你可以高效地查询PM2应用在特定时间(如8:00)的错误日志。关键是掌握grep命令的灵活使用,结合PM2的日志系统特性。建议根据自己的需求选择最适合的方法,并将常用的查询流程制作成脚本以提高效率。

记住,良好的日志管理习惯和定期的错误检查是保持应用稳定运行的重要保障。