grep - 文本搜索
grep "ERROR" /var/log/app.log
grep -A 3 -B 2 "Exception" app.log # 显示匹配行前后内容
awk - 文本处理
awk '{print $1}' app.log # 打印第一列
awk '/ERROR/ {count++} END {print count}' app.log # 统计错误数量
sed - 流编辑器
sed -n '/2023-10-01/,/2023-10-02/p' app.log # 提取日期范围内的日志
journalctl (systemd日志)
journalctl -u nginx.service --since "1 hour ago"
journalctl -u app.service -f # 实时跟踪
logrotate - 日志轮转
# 示例配置 /etc/logrotate.d/app
/var/log/app.log {
daily
rotate 7
compress
missingok
notifempty
}
top/htop - 进程监控
htop -u appuser # 按用户过滤
dstat - 综合监控
dstat -tcmnd --disk-util # CPU,内存,网络,磁盘
strace - 系统调用跟踪
strace -p <PID> -c # 统计系统调用
strace -ttT -o trace.log -p <PID> # 带时间戳记录
perf - 性能分析
perf top -p <PID> # 实时函数热点
perf record -p <PID> -g # 记录调用图
properties
# log4j.properties
log4j.rootLogger=ERROR, stdout
log4j.logger.com.myapp=INFO
json
{"timestamp":"2023-10-01T12:00:00Z","level":"ERROR","message":"DB connection failed","service":"payment"}
#!/bin/bash
LOG_FILE="/var/log/app.log"
# 统计不同错误类型
echo "Error Statistics:"
grep "ERROR" $LOG_FILE | awk -F']' '{print $2}' | sort | uniq -c | sort -nr
# 按小时统计错误
echo -e "\nHourly Error Distribution:"
grep "ERROR" $LOG_FILE | awk '{print $1}' | cut -d: -f1 | uniq -c
#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
# 分析响应时间超过1秒的请求
awk '($NF > 1) {print $7, $NF}' $LOG_FILE | sort -k2 -nr | head -20
通过合理使用这些工具和策略,您可以有效分析应用日志,快速定位问题,并优化应用性能。