操作日誌是管理後台的稽核軌跡,記錄「哪個管理員、從哪個來源 IP、在什麼時候、做了什麼動作、改了哪些欄位」。當您要追查某個設定是什麼時候被誰改掉的、想確認有沒有非預期的帳號異動,或需要向主管/客戶提出「這段期間沒有人動過這個設定」的證明時,就從這一頁找答案。
什麼時候會用到這一頁:
- 有人反映「某個帳號怎麼不見了」,要查出是誰刪的、什麼時候刪的
- 系統行為突然改變(例如某項服務被關掉),要確認是不是有人改了設定
- 要確認某段時間內有沒有人登入過管理介面(例如連續假期間)
- 稽核要求提供「設定變更歷程」,需要匯出成檔案留存
- 管理介面本身出現錯誤(白畫面、500 錯誤),需要看 Web 介面的錯誤日誌
同一頁也存放 Web 介面本身的存取與錯誤日誌,因此除了「誰做了什麼」,也能查到「管理介面被打開了哪些頁面、發生過什麼錯誤」。
記錄的內容
每一筆記錄就是一行,內容由「操作者與來源 IP」、「模組/動作」、「動詞與目標」以及「欄位異動」組成。
- 身分:格式為
[帳號@來源IP];由系統背景自動執行的動作沒有來源 IP,身分記為[SYSTEM] - 動詞:新增、修改、刪除類的動作統一為
CREATE、UPDATE、DELETE、SAVE;特殊動作保留原名,例如RESEND、CLEAR、UNBAN、RESTART、UPLOAD、REGISTER、CHARGE、KILL - 登入相關:成功登入記為
LOGIN OK、登出記為LOGOUT、雙重驗證記為TOTP VERIFY OK或TOTP VERIFY FAILED user=xxx - 欄位異動:
UPDATE與SAVE會附上實際變更的欄位,巢狀欄位以路徑表示(例如preset.quota:5120→8192代表配額從 5120 改成 8192);密碼、金鑰、權杖等敏感欄位的值一律以***代替,過長的值會被截斷 - 失敗記錄:動作失敗時記為「動詞 目標 FAILED」,與成功動作區分
記錄範圍只包含有副作用的動作(登入登出、新增修改刪除、設定變更、執行類操作)。單純瀏覽頁面或查詢資料不會留下記錄,所以看到「沒有記錄」不代表沒人開過那一頁。
日誌項目與檔案
「記錄」分頁上方有兩層選擇器:
- 日誌項目(共 4 項)
- 操作日誌 (
webadmin.log):本頁的主角,也就是上面說明的稽核軌跡,位於/var/log - Web界面操作日誌 (
access.log):管理介面的 HTTP 存取記錄,位於/var/log/webadmin - Web界面錯誤日誌 (
error.log):管理介面的錯誤記錄(例如 500、PHP 錯誤),位於/var/log/webadmin - Web核心日誌 (
php8.4-fpm.log):PHP 處理程序的日誌,位於/var/log
- 操作日誌 (
- 日誌檔案:該項目目前的檔案,以及輪替後的舊檔(含
.gz壓縮檔)。切換日誌項目時,系統會自動選取該項目的第一個檔案,您不必手動挑
找到操作日誌之後,平常只需要看 webadmin.log 這一個檔;輪替舊檔是當 webadmin.log 到達輪替條件(週期或大小上限)時被切出來的歷史檔。
日誌檔名規則可以幫您判斷新舊:沒有編號的是現役檔(正在寫入),有 .1、.2 這種編號的是輪替舊檔,加上 .gz 表示已壓縮。編號越大通常越舊。
列表與查詢
表格只有「日誌內容」一欄,一列就是一行日誌。
- 預設順序:由新到舊,可點欄位標題切換排序方向
- 每頁筆數:預設 50 筆,資料量大時請用搜尋縮小範圍
- 搜尋:即時全文檢索,符合的關鍵字會在結果中反白,方便快速掃描
- 搜尋語法(三個日誌頁以上都共用同一套規則)
關鍵字1,關鍵字2→ OR:任一個關鍵字命中就列出關鍵字1+關鍵字2→ AND:兩個關鍵字都要命中才列出- 逗號與加號不要混用:一旦混用(例如
a,b+c),整串會被當成一個關鍵字原樣比對,通常什麼都搜不到 - 關鍵字前後的空白會自動忽略
- 沒有資料時顯示「暫無管理介面日誌資料」
實際好用的搜尋範例:
- 查某個管理員做過什麼:搜尋
admin(或實際帳號),再搭配LOGIN、DELETE等動詞 - 查某個設定被改過幾次:搜尋
preset.quota這類欄位路徑 - 查某個 IP 的活動:直接搜尋該 IP(例如
192.0.2.10) - 同時要兩個條件:搜尋
admin+DELETE(只看 admin 的刪除動作) - 想同時看兩種動作:搜尋
DELETE,UPDATE
匯出與刪除
日誌檔案選擇器旁有兩個共用按鈕:
匯出
把目前選取的日誌檔下載為檔案:
- 純文字檔以
text/plain下載;.gz檔維持壓縮格式(application/gzip)下載,請自行解壓 - 下載檔名會自動加上下載時間戳,避免覆蓋舊檔。純文字檔接在尾端(
webadmin.log→webadmin.log_20260824-161832);.gz插在副檔名前(syslog.2.gz→syslog.2_20260824-161832.gz) - 按下「匯出」時畫面會先顯示「匯出中…」
刪除
刪除行為依檔案類型而不同,這是刻意的保護設計:
- 輪替舊檔(有
.1、.2.gz這類編號):整檔刪除。確認視窗顯示「確定要刪除日誌檔案「:file」嗎?」 - 現役檔(檔名後面沒有編號):只清空內容、保留檔案。因為檔案正在被寫入,直接刪除會讓寫入中的程序出錯。確認視窗會明確告知:「此為目前正在寫入的日誌,刪除將僅清空其內容(檔案保留)。確定要清空「:file」嗎?」
- 操作日誌的現役檔
webadmin.log受保護,完全不可刪除、也不可清空。刪除按鈕會停用並提示「操作日誌現役檔不可刪除」。這是為了保住最近的稽核記錄,請勿用其他方式(例如登入終端機)繞過 - 執行成功後顯示「日誌檔案「:file」內容已清空」或「日誌檔案「:file」已刪除」;失敗時顯示「刪除日誌檔案失敗」
- 刪除或清空日誌檔的動作本身也會寫入操作日誌,所以「誰把日誌刪掉了」同樣查得到
設定(輪替)
「設定」分頁的輪替參數由操作日誌與 Web 介面這 4 支日誌檔共用同一組設定:
- 記錄週期:每週(預設)或每天;週期到達就結算輪替
- 保留天數/保留週數:依上面選的週期決定是填「天」還是「週」,超過保留份數的舊檔會被清掉
- 單檔大小上限(MB):即使還沒到週期,單檔超過這個大小也會提前輪替。用意是防止某個時段大量日誌把單一檔案撐爆,導致查詢變慢
- 壓縮 rotate 檔:輪替後的舊檔以 gzip 壓縮成
.gz,可省下大量磁碟空間,代價是檢視時需要解壓(本頁會自動處理)
調整後按「儲存設定」,成功顯示「logrotate 設定已儲存」,失敗顯示「logrotate 設定儲存失敗」。
空間使用
「空間使用」分頁會依日誌項目分別列出相關檔案(含輪替檔與壓縮檔)的:
- 檔案名稱
- 最後修改時間
- 空間占用
並在下方列出「總計(N 個檔案)」,方便您判斷哪一支日誌吃掉最多空間。清單依時間倒序(新→舊)。若該項目還沒有任何檔案,顯示「目前沒有日誌檔。」;讀取失敗時顯示「讀取失敗」。
實務上最常需要處理的是 access.log 與 php8.4-fpm.log——網站被大量掃描或被搜尋引擎爬取時,這兩支會長得特別快。若發現某一支異常肥大,可以先縮短保留份數,或把「單檔大小上限」調小。
欄位名稱語系
操作日誌中「欄位異動」清單裡的欄位名稱,可在「系統設定 / 偏好設定」的「操作日誌欄位語系」決定:
- 程式欄位名(建議):一律寫程式內部的英文欄位名,便於用搜尋或 grep 稽核,不受介面語系影響
- 依操作者語系:依當時操作的管理員介面語言翻譯欄位名(換了語系看起來會不同,追溯時較易混淆)
- 固定:語系:不論操作者語系,一律使用指定的語言
若您需要長期稽核,建議選「程式欄位名」,欄位名稱才會穩定一致。
常見情境與判讀
- 「這個帳號是誰刪的?」:搜尋該帳號名稱,找
DELETE那一行,行首的[帳號@來源IP]就是操作者與他的來源 IP - 「昨天有人改過系統設定嗎?」:搜尋
SAVE或UPDATE,並搭配192.0.2.(您的管理網段)過濾來源 - 「這台機器半夜有被登入嗎?」:搜尋
LOGIN OK,比對時間欄位;若出現非預期的來源 IP,請立即改密碼並檢查「系統設定 / 偏好設定」的登入保護設定 - 「某個動作明明失敗了,為什麼沒有記錄?」:失敗的動作會記為
... FAILED,請搜尋FAILED - 「有
[SYSTEM]開頭的記錄是什麼?」:那是系統背景自動執行的動作(例如排程、授權檢查、自動刪除過期帳號),沒有來源 IP,不是有人登入操作
注意事項
- 操作日誌的現役檔(
webadmin.log)受保護,刪除按鈕會停用並提示「操作日誌現役檔不可刪除」;只有輪替舊檔可以刪除 - 刪除或清空日誌檔的動作本身也會寫入操作日誌
- 系統背景動作以
[SYSTEM]身分記錄,沒有來源 IP,看到時不必誤以為是登入者所為 - 這一頁是稽核依據,建議定期匯出備份,並確保只有必要人員能登入管理介面
- 管理介面登入失敗的防護(失敗間隔、每分鐘上限、臨時驗證碼)是在登入階段就擋下,相關設定在「系統設定 / 偏好設定」;被擋下的嘗試不一定會留下操作日誌,若要追查暴力嘗試請看「系統日誌 / 阻斷記錄」
- 想確認「某封信為什麼沒寄出去」不屬於本頁範疇,請改看「系統日誌 / SMTP日誌」