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:不触发。