自动汇报错误工具(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
$HOME/.config/abrt
你提供给ABRT GUI的配置选项的值被存储在GNOME Keyring里。
7. 向 CentOS 的 Bug 追踪系统报告
由 CentOS 7.1.1503 起,ABRT可以向 bugs.centos.org 报告故障。为了发送 bug,你必须在 bugs.centos.org 创建你自己的账户,并且在提交 bug 报告之前 ABRT 会提示你提供你帐户的详细信息。
这个功能需要 coredump 产生的 backtrace 信息,ARBT 有能力在本地或远程使用 https://fedorahosted.org/abrt/wiki/AbrtRetraceServer 生成 backtrace 信息,本地生成涉及到从 /var/cache/abrt-di 下载调试信息包,远程生成涉及到上传 coredump 到因特网上。
ABRT 提供给你两个选项去产生 backtrace 信息,因为 coredump 文件也许包含一些敏感信息,本地生成的 backtrace 也许需要下载 GiBs 的调试信息包。然而,追溯服务在开发时着重于安全,它对用户的好处非常值得关注。
因为 ABRT 的 bug 报告文件是公开的,故障数据经常包含敏感的安全类信息,例如密码,所以报告过程包括了两步来检验发布的数据。第一步,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