日志幾百兆怎么看?運(yùn)維老鳥常用的高效排查套路
在日常運(yùn)維和開發(fā)工作中,日志就是系統(tǒng)的“黑匣子”。無論是排查故障、監(jiān)控運(yùn)行狀態(tài),還是追蹤安全事件,日志往往能給我們提供最關(guān)鍵的線索。
然而,很多新人常?!翱吹靡姡瑓s看不懂”,要么面對(duì)動(dòng)輒上百兆的日志文件束手無策,要么在調(diào)試問題時(shí)找不到重點(diǎn)信息。今天,我們就來系統(tǒng)梳理一下 Linux 日志查看的常用方法與實(shí)戰(zhàn)技巧,幫你從入門到進(jìn)階,玩轉(zhuǎn)日志排查!

Linux 日志都藏在哪里?
日志文件大多集中在 /var/log/ 目錄下,不同服務(wù)有對(duì)應(yīng)的日志:
(1) 系統(tǒng)級(jí)日志
- /var/log/messages:系統(tǒng)核心日志,涵蓋內(nèi)核消息、進(jìn)程運(yùn)行情況等。
- /var/log/syslog:在 Ubuntu/Debian 系統(tǒng)中取代 messages 的角色。
(2) 安全與認(rèn)證日志
- /var/log/auth.log(Debian/Ubuntu)
- /var/log/secure(CentOS/RHEL)記錄登錄、sudo 使用、SSH 認(rèn)證等安全事件。
(3) 服務(wù)相關(guān)日志
- /var/log/nginx/:Nginx 的訪問日志 (access.log) 和錯(cuò)誤日志 (error.log)
- /var/log/apache2/:Apache日志
- /var/log/mysql/:MySQL 啟動(dòng)、查詢、錯(cuò)誤日志
(4) 定時(shí)任務(wù)日志
/var/log/cron:所有定時(shí)任務(wù)的執(zhí)行情況。
小技巧:當(dāng)你不知道某個(gè)服務(wù)的日志在哪,可以直接去 /var/log/ 下按服務(wù)名搜索。
日志查看的常用命令
(1) cat 直接輸出日志
適合小文件、快速瀏覽。
# 查看系統(tǒng)日志
cat /var/log/messages
# 只看最后 10 行
cat /var/log/messages | tail -n 10(2) tail 實(shí)時(shí)追蹤日志(最常用)
# 實(shí)時(shí)輸出新增日志
tail -f /var/log/nginx/access.log
# 顯示最后 20 行并持續(xù)跟蹤
tail -n 20 -f /var/log/mysql/error.log
# 同時(shí)跟蹤多個(gè)文件
tail -f /var/log/nginx/access.log /var/log/nginx/error.log(3) head 查看日志開頭部分
# 默認(rèn) 10 行
head /var/log/auth.log
# 查看前 50 行
head -n 50 /var/log/boot.log(4) more/less 分頁(yè)查看大日志
當(dāng)日志文件幾百 MB 時(shí),分頁(yè)瀏覽才不會(huì)“卡屏”。
# 按空格翻頁(yè)
more /var/log/messages
# 更強(qiáng)大的 less,支持上下鍵和搜索
less /var/log/nginx/access.log日志分析進(jìn)階:篩選與提取
(1) grep 關(guān)鍵詞搜索
# 查找 SSH 登錄失敗記錄
grep "Failed password" /var/log/auth.log
# 查找 Nginx 500 錯(cuò)誤(忽略大小寫)
grep -i "500" /var/log/nginx/access.log
# 顯示匹配行上下文
grep -C 5 "error" /var/log/mysql/error.log
# 統(tǒng)計(jì)關(guān)鍵詞出現(xiàn)次數(shù)
grep -c "timeout" /var/log/nginx/error.log(2) awk 按列提取
# 提取 Nginx 日志中的 IP 和路徑
awk '{print $1, $7}' /var/log/nginx/access.log
# 統(tǒng)計(jì)訪問量前 10 的 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10(3) sed 按條件取日志片段
# 查看第 100-200 行
sed -n '100,200p' /var/log/messages
# 刪除 debug 相關(guān)行
sed '/debug/d' /var/log/app.log(4) 按時(shí)間篩選
# 查找 2023-10-01 08:00 ~ 09:00 的訪問記錄
grep "2023/10/01 08:" /var/log/nginx/access.log
# 更精準(zhǔn)的時(shí)間過濾(按字段對(duì)比)
awk '$4 >= "[01/Oct/2023:08:00:00" && $4 <= "[01/Oct/2023:09:00:00"' /var/log/nginx/access.log日志輪轉(zhuǎn)與歸檔
Linux使用 logrotate 定期壓縮和歸檔日志:
- messages-20231001.gz
- secure.1
查看歸檔日志:
# 直接查看壓縮文件
zcat /var/log/messages-20231001.gz | grep "error"
# 解壓后分析
gunzip /var/log/messages-20231001.gz
cat messages-20231001實(shí)戰(zhàn)案例
(1) 場(chǎng)景 1:排查 SSH 登錄失敗
grep "Failed" /var/log/auth.log | tail -n 20快速定位可疑 IP,防止暴力破解。
(2) 場(chǎng)景 2:分析 Nginx 訪問突增
tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 5一眼看出“流量大戶”,幫助甄別是否遭遇爬蟲或攻擊。
(3) 場(chǎng)景 3:跟蹤服務(wù)啟動(dòng)報(bào)錯(cuò)
journalctl -b | grep -i "failed"在systemd系統(tǒng)上,journalctl 是必備神器,比傳統(tǒng)日志更全面。
總結(jié)
日志排查的核心思路可以概括為:
找到 → 過濾 → 提取 → 分析
- 找到:熟悉 /var/log/ 目錄和服務(wù)日志位置
- 過濾:用 grep、awk、sed 精準(zhǔn)提取
- 提?。航Y(jié)合字段,按 IP、時(shí)間、狀態(tài)碼等統(tǒng)計(jì)
- 分析:形成自己的“故障排查手冊(cè)”
掌握這些方法,能讓你在面對(duì)故障時(shí)不再“瞎子摸象”,而是有章可循、快速定位問題。
日志是系統(tǒng)留給我們的“線索”,學(xué)會(huì)讀懂它,你就能更快找到真相!


























