写之前吐槽一下,我在从业中发现,很多人喜欢鼓吹XXX比较吃经验,我早期也比较信奉这一点,感觉各行各业应该都有自己的玄学解决问题的方式。
但是笔者也发现很多做了很多年的员工,遇到了问题就是在常用的几个地方点点点,几个参数调来调去靠穷举解决问题,比如上应用配代理,一会404了一会403了,改一改又变成503 504,然后碰巧解决了,有意识的员工就把这个问题的解决方法记录下来,然后美其名曰积累经验。
每次看到这种现象就觉得很无语,这根本就不是积累经验好吧,完全是野路子。一定要记住一点如果你使用的是常见的技术栈,那么大概率是有日志打印的,找到这个日志基本能定位90%的故障原因,就算定位不到,起码也能有一点线索,而不是像无头苍蝇一样到处乱撞。
真正的积累经验是在没人涉足的地方留下自己的脚印或者是面对复杂系统的排障能力。所以借着今天的这个吐槽,整理一下常用的日志位置或命令,希望对大家有帮助。
系统日志目录:
/var/log/syslog
/var/log/messages
安全日志
CentOS/RHEL:/var/log/secure
Ubuntu/Debian:/var/log/auth.log
Nginx 日志目录:
/var/log/nginx/error.log
/var/log/nginx/access.log
系统服务日志目录:
journalctl
/var/log/journal/
应用程序日志目录:
logs
子目录中 Nginx:/var/log/nginx/error.log
和 /var/log/nginx/access.log
这里插一句,关于NGINX的错误日志,这篇文章写得非常好,可以看看
nginx(二十九)error.log记录报错信息分析_nginx error_log-CSDN博客
Apache:/var/log/apache2/error.log
和 /var/log/apache2/access.log
MySQL:/var/log/mysql/error.log
APISIX 错误日志:/usr/local/apisix/logs/error.log
APISIX 访问日志:/usr/local/apisix/logs/access.log
DNS - Bind 错误日志:/var/log/named/named.log
DNS - Bind 查询日志:/var/log/named/query.log
DHCP 错误日志:/var/log/dhcpd.log
DHCP 启动日志:/var/log/dhcpd-startup.log
NTP 错误日志:/var/log/ntp.log
NTP 启动日志:/var/log/ntpstart.log
Docker 守护进程日志:/var/log/docker.log
Docker 容器日志位置:/var/lib/docker/containers/
实时查看日志:
tail -f /path/to/logfile
使用 journalctl
查看 Systemd 日志:
journalctl
journalctl
进阶用法:
journalctl --since "2024-01-01" --until "2024-01-02"
journalctl -u nginx -xe
按关键词过滤日志:
grep "error" /path/to/logfile
按时间戳过滤日志:
awk '/^2024-01-01/ {print}' /path/to/logfile
查看最新的 N 行日志:
tail -n N /path/to/logfile
使用 dmesg
查看内核日志:
dmesg
使用 less
逐页查看日志:
less /path/to/logfile
查看压缩的日志文件:
zcat /path/to/logfile.gz
systemctl
命令:
systemctl status serviceName
lsof
命令(查看打开的文件和进程):
lsof -i :portNumber
netstat
命令:
netstat -an
tcpdump
工具:
tcpdump -i eth0
strace
命令:
strace -p PID
tail
和 grep
组合使用:
tail -f /path/to/logfile | grep "error"
awk
和 sed
命令:
awk '/pattern/ {print $1, $2}' /path/to/logfile
自定义脚本和工具:
根据需要编写脚本或使用特定工具进行日志分析。Logrotate 工具:
自动管理和轮转日志文件,防止日志文件过大:logrotate