自動匯報錯誤工具(ABRT)
ABRT 是一套抱著三個目標而開發出來的小型工具:
- 簡化用戶匯報軟件問題的程序
- 在提交給開發者的報告中提供全面的資訊
- 提供重要的故障數據以便排列優先次序及安排支援
假如你有興趣協助開發者排列他們的工作的優先次序,而你願意提供匿名的報告,請利用以下指令啟用自動匯報
abrt-auto-reporting enabled
詳情見 迷你報告的網上文檔及 abrt-auto-reporting(1)。
1. ABRT 工作流程
- 在最常用的編程環境下掛入專用的故障處置器
- 為 C/C++ 應用程式註冊故障時用的 core dump 程式
- 為漏網的 Python 異常註冊處置器
- 為漏網的 Ruby 異常註冊處置器
- 提供 JNI 代理器偵測漏網的 Java 異常
在系統日誌內搜尋可疑的字串
- 偵測內核 oops
- 偵測 Machine-check 異常
- 在 Xorg 的日誌內偵測 Xorg 故障
- 檢查描述問題的檔案是否存在
- 偵測及檢閱 kdump 建立的內核傾印檔
- 提供指令行及圖像介面工具(abrt-cli 及 gnome-abrt)發送報告及檢閱已發報告
- 在 ABRT 的故障數據伺服器上收集數據。ABRT 伺服器的主要用途是協助維護者安排工作的優先次序,及就已知或已修正的問題向用戶提供指引。
2. ABRT 架構
一旦偵測到問題,ABRT 便會在預設的路徑建立一個目錄,然後將收集到的所有數據以普通文檔的方式放進該目錄。
用來建立問題目錄的預設路徑是:
/var/spool/abrt(CentOS 6)
/var/tmp/abrt(CentOS 7)
每個問題目錄內最有趣的檔案包括:
executable |
出現問題的執行檔的絕對路徑 |
package |
該執行檔的所屬 rpm 套件 |
count |
該問題在系統上出現的次數 |
time |
該問題首次出現的 unix 時戳 |
coredump |
編譯程式故障時的 core dump 檔(C/C++) |
backtrace |
現行呼叫函數的清單 |
dso_list |
故障時已載入的動態函數庫清單 |
var_log_messages |
系統日誌內有關此問題的記錄 |
如果你需要手動式檢閱問題目錄,或只是想明白問題是關乎甚麼,ABRT 為你提供數個好用的小型工具。這些工具的名稱都以 abrt-action 起首,因此你可以進入問題目錄,輸入 abort-action 再按 Tab 鍵。
3. 從 coredump 檔讀取 backtrace 的範例:
ABRT 不會自動從 core dump 檔讀取 backtract,因為這個動作需要偵錯用的資料。
你可以透過 debuginfo-install 指令手動安裝 gdb 建議的偵錯用資料:
$ gdb $(cat executable) -c coredump
你也可以讓 ABRT 為你做所需的事情:
$ abrt-action-analyze-ccpp-local
abrt-action-analyze-ccpp-local 啟用所有 *debug* yum 軟件庫,下載違漏的偵錯資料套件,在 /var/cache/abrt-di/ 下解壓它們,執行 gdb 並將輸出存於 backtrace 檔內。
其實 ABRT 容許用戶透過指令行(abrt-cli)及圖像介面(gnome-abrt)以更舒服的方式處理這些問題。
4. 通知
ABRT 提供了數個可設定的方法通知用戶有關操作系統的故障。預設的通知方法有桌面通知,發電郵姶 root(採用預設 MTA,設定可在 /etc/libreport/events.d/mailx_event.conf 內修改)及控制台通知,例如
ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1414407227
5. 安裝
在無頭系統執行以下指令:
$ yum install abrt-cli
或者在桌面執行
$ yum install abrt-desktop
abrt-cli 和 abrt-desktop 是中繼套件,將會為你的系統引進最有用的套件。
6. 設定
設定檔都收藏在:
/etc/abrt
/etc/libreport
7. 匯報給 CentOS 的錯誤追縱器
由 CentOS 7.1.1503 起,ABRT 能向 bugs.centos.org 匯報故障。若要遞交錯誤報告,你必須在 bugs.centos.org 建立你的帳戶 —— ABRT 在遞交錯誤報告前將會詢問該帳戶的資料。
此功能亦需要從 coredump 檔建立 backtrace。ABRT 有能力在本地建立 backtrace,當中涉及下載 debuginfo 套件至 /var/cache/abrt-di;或在 https://fedorahosted.org/abrt/wiki/AbrtRetraceServer 上遠端建立 backtrace,這涉及把 coredump 檔上載至互聯網。
ABRT 提供兩個建立 backtrace 的方案,因為 coredump 檔內或許會含有敏感資料,而在本地建立 backtrace 可能需要下載 GiBs 的 debuginfo 套件。然而,retrace 伺服器在開發時著重安全性,亦瞭解為用戶帶來的好處。
由於 ABRT 所遞交的錯誤報告是公開的,而故障數據往往包含密碼等敏感資料,因此遞交程序中有兩個檢閱發佈數據的步驟。首先,ABRT 會標示出「可疑」的字串,你也可以搜尋自定義的字串。接著,你可以從發佈數據中排除某些檔案。
8. 自動提交故障數據
除了偵測問題及建立全面的錯誤報告外,ABRT 亦提供了一個功能,在偵測到問題時自動為故障提交名為微報告(uReport)的精簡、匿名描述。
微報告是匿名的,它們不含甚何有關 IP 位址、主機編號或主機名稱的資料、甚至不含記憶體或檔案系統的快照。微報告的已修輯至剩下最扼要的內容,有助伺服器辨認重複的問題。
ABRT 伺服器收集微報告,以便能為開發者提供故障數據,有助安排工作的優先次序。
你可以透過下列指令啟用 ABRT 的這個功能:
$ abrt-auto-reporting enabled
在預設的設定中,ABRT 把故障數據發送至 ABRT 伺服器
9. 參考
有關 ABRT 如何運作的詳情,請拜訪此連結:http://abrt.readthedocs.org/en/latest/
要是你無法採用某些功能,這裡或許會有答案:http://abrt.readthedocs.org/en/latest/faq.html
如果你對 ABRT 的進階功能有興趣,請查閱它的範例頁:http://abrt.readthedocs.org/en/latest/examples.html
ABRT 計劃位於 github.com 上:https://github.com/abrt
Translation of revision 10