Linux下快速提取指定時間段日志的三種方法
前言
做后端開發(fā)或運(yùn)維的同學(xué),一定都經(jīng)歷過這樣的場景:
線上服務(wù)出了 Bug,老板讓你查一下今天上午 10:00 到 11:00 到底發(fā)生了什么。你登錄服務(wù)器一看,app.log 已經(jīng)跑到了 10GB。
這時候如果你直接 vim 打開,服務(wù)器可能會卡死;如果你用 cat 或 tail 慢慢翻,眼睛都要看瞎。
其實(shí),在 CentOS(以及絕大多數(shù) Linux 發(fā)行版)下,我們完全不需要寫復(fù)雜的腳本,只需要一行命令,就能把指定時間段的日志另存為一個新的文件。
今天就分享三種最常用的姿勢,由淺入深,總有一款適合你。
準(zhǔn)備工作
假設(shè)我們的日志文件名為 app.log,格式如下(標(biāo)準(zhǔn)的日期開頭):
2023-10-27 10:00:01 [INFO] User login success
2023-10-27 10:00:05 [WARN] Database query slow
...
我們的目標(biāo)是:將 10:00 到 11:00 的日志,另存為 bug_report.log。
姿勢一:sed —— 簡單粗暴(推薦日志連續(xù)的情況)
sed 是流編輯器,它非常適合處理這種“從 A 開始,到 B 結(jié)束”的任務(wù)。
命令模板:
sed -n '/開始時間/,/結(jié)束時間/p' 原日志 > 新日志
實(shí)戰(zhàn)操作:
sed -n '/2023-10-27 10:00:00/,/2023-10-27 11:00:00/p' app.log > bug_report.log
優(yōu)點(diǎn):
- 命令簡單,好記。
- 處理速度極快。
缺點(diǎn)(非常重要):
sed 是完全匹配字符串。如果你的日志里正好沒有 10:00:00 這一秒的記錄(比如那一秒沒人訪問),sed 就會找不到開始標(biāo)記,導(dǎo)致截取失敗。
姿勢二:awk —— 精準(zhǔn)打擊(最穩(wěn)健的方案)
如果你擔(dān)心日志中間有斷檔(比如某一秒沒有日志),awk 是最佳選擇。它不看字符串是否相等,而是把時間當(dāng)做字符進(jìn)行比較(大于/小于)。
只要日志行首是時間,它就能精確捕捉范圍。
命令模板:
awk '$0 >= "開始時間" && $0 <= "結(jié)束時間"' 原日志 > 新日志
(注:$0 代表整行內(nèi)容,如果只需要比較第2列時間,可以用 $2)
實(shí)戰(zhàn)操作:
awk '$0 >= "2023-10-27 10:00:00" && $0 <= "2023-10-27 11:00:00"' app.log > bug_report.log
優(yōu)點(diǎn):
- 容錯率高:即使日志里沒有 10:00:00 這一行,它也會從 10:00:01 開始截取。
- 邏輯清晰,支持復(fù)雜的過濾條件。
姿勢三:grep —— 模糊搜索(適合“按小時”抓?。?/h2>
如果你不需要精確到秒,只是想把“10 點(diǎn)這一小時”的所有日志都拉出來看看,grep 是最快的。
命令模板:
grep "^時間前綴" 原日志 > 新日志
實(shí)戰(zhàn)操作(抓取 10 點(diǎn)段所有日志):
grep "^2023-10-27 10:" app.log > 10_am_logs.log
優(yōu)點(diǎn):
- 幾乎沒有心智負(fù)擔(dān),最常用的命令。
- 適合快速排查故障范圍。
總結(jié)與建議
| 方案 | 命令關(guān)鍵字 | 適用場景 | 穩(wěn)健性 |
| 方案一 | sed | 確定起始時間點(diǎn)一定存在時 | ??? |
| 方案二 | awk | 生產(chǎn)環(huán)境首選,時間點(diǎn)可能不連續(xù) | ????? |
| 方案三 | grep | 只需要按小時/按分鐘模糊查詢 | ???? |
建議:
如果你在寫自動化腳本來備份日志,請務(wù)必使用 方案二 (awk),因?yàn)樗粫驗(yàn)槟骋幻肴罩镜娜笔Ф鴮?dǎo)致腳本失效。
到此這篇關(guān)于Linux下快速提取指定時間段日志的三種方法的文章就介紹到這了,更多相關(guān)Linux提取指定時間段日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Linux下修改/設(shè)置環(huán)境變量JAVA_HOME的方法
這篇文章主要介紹了淺談Linux下修改/設(shè)置環(huán)境變量JAVA_HOME的方法,環(huán)境變量一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù)。環(huán)境變量是在操作系統(tǒng)中一個具有特定名字的對象,它包含了一個或者多個應(yīng)用程序所將使用到的信息。感興趣的可以了解一下2020-07-07
如何禁止網(wǎng)站內(nèi)容被搜索引擎收錄的幾種方法講解
今天小編就為大家分享一篇關(guān)于如何禁止網(wǎng)站內(nèi)容被搜索引擎收錄的幾種方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
Linux centos如何讓普通用戶獲取root權(quán)限
這篇文章主要介紹了Linux centos如何讓普通用戶獲取root權(quán)限問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
有關(guān)Ubuntu在關(guān)蓋休眠后可行的拯救方法
這篇文章主要介紹了有關(guān)Ubuntu在關(guān)蓋休眠后可行的拯救方法的相關(guān)資料,需要的朋友可以參考下2026-02-02
CentOS環(huán)境下安裝Redis3.0及phpredis擴(kuò)展測試示例
這篇文章主要介紹了CentOS環(huán)境下安裝Redis3.0及phpredis擴(kuò)展測試,結(jié)合實(shí)例形式分析了CentOS下Redis安裝相關(guān)步驟、命令及phpredis擴(kuò)展的測試代碼,需要的朋友可以參考下2018-04-04

