内核统一异常框架(UKFEF)

Alibaba Cloud Linux 3(内核版本5.10.60-9.al8.x86_64开始)增加了内核统一异常框架UKFEF(Unified Kernel Fault Event Framework),用于统计可能导致风险的系统异常事件,并以统一格式输出事件报告。本文主要介绍UKFEF所统计的事件、事件报告输出形式以及控制UKFEF的接口。

背景信息

操作系统在出现严重问题前,可能会输出一些特征或提示信息。在运维过程中,您可以利用这些信息进行故障预测和实施运维操作,但由于这些信息分散在系统中的不同模块,且输出格式各异。因此,您在收集系统异常事件时可能面临以下问题:

  • 解析系统异常事件(例如异常事件的含义、可能造成的影响等)需要一定的专业知识作为基础。

  • 不同格式的异常事件,对于自动化运维不友好,您需要在信息采集时做格式匹配,并需要做数据清洗。

基于以上问题,Alibaba Cloud Linux 3在操作系统内核层面提供了内核统一异常框架(UKFEF)。UKFEF针对各类可能导致风险的系统异常事件进行统计,并自动判断事件的严重程度,然后统一格式输出事件报告,报告包括了问题产生的场景以及建议的风险级别,从而简化运维过程中对系统异常的识别难度。同时,UKFEF将已知异常事件进行分级,并提供了历史内核版本不具备的系统风险报告。

UKFEF功能按照异常事件的类型、影响、统计等多个维度输出报告,便于您在运维时高效地对系统异常进行诊断。此外,事件报告通过多种形式输出,避免数据丢失。UKFEF

事件说明

UKFEF划分的事件类型、事件级别,以及事件报告形式的说明如下:

事件相关信息

说明

事件类型

UKFEF统一收集以下操作系统内核常见事件:

  • soft lockup

  • RCU(Read-Copy Update) stall

  • hung task

  • global OOM(Out of Memory)

  • cgroup OOM(Out of Memory)

  • page allocation failure

  • list corruption

  • bad mm_struct

  • I/O error

  • EXT4-fs error

  • MCE(Machine Check Exception)

  • fatal signal

  • warning

  • panic

事件级别

UKFEF将异常事件分为三个级别:

  • Slight:不影响系统继续运行,但系统内部署的业务可能发生抖动,您可以继续观察事件变化。

  • Normal:当前应用进程可能会出现异常。建议对当前应用采取措施,例如kill、重启或迁移。

  • Fatal:可能会对系统产生致命影响。建议立即进行业务迁移。

事件报告

UKFEF将通过以下方式输出事件报告:

  • 通过内核日志输出单次事件的详细信息。信息内容示例如下:

    class Fault event[module:type]:messages. At cpu cpuid, task pid(cmdline). Total fault: cnt

    具体说明如下:

    • class:对应异常事件的级别。

    • module:表示异常事件所属的模块(sched、mem、io、fs、net、hardware以及由多个模块引起的异常会输出general)。

    • type:对应异常事件的类型。

    • messages:事件自身的自定义消息。

    • cpuid:发生异常事件的CPU号。

    • pid(cmdline):异常事件对应进程的pid和cmdline。

      说明

      如果pid为-1,则表示没有对应的进程。

    • cnt:表示系统启动以来当前类型的异常事件出现的总和。

  • 通过/proc/fault_events文件输出各类异常事件的总和。文件输出内容示例如下:

    Total fault events: 0
    Slight: 0
    Normal: 0
    Fatal: 0
    soft lockup: 0
    rcu stall: 0
    hung task: 0
    global oom: 0
    cgroup oom: 0
    page allocation failure: 0
    list corruption: 0
    bad mm_struct: 0
    io error: 0
    ext4 fs error: 0
    mce: 0
    fatal signal: 0
    warning: 0
    panic: 0

控制UKFEF的接口说明

接口

说明

/proc/sys/kernel/fault_event_enable

该接口控制UKFEF的启用与关闭。取值范围:

  • 1:启用UKFEF。

  • 0:关闭UKFEF。

/proc/sys/kernel/fault_event_print

该接口控制UKFEF是否输出事件报告。取值范围:

  • 1:输出。

  • 0:不输出。

/proc/sys/kernel/panic_on_fatal_event

该接口控制出现Fatal事件时,是否触发操作系统的Panic机制。取值范围:

  • 1:触发。

  • 0:不触发。