ECS运维:操作系统有异常?诊断日志来帮忙!

云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。阿里云使用严格的IDC标准、服务器准入标准以及运维标准,保证云计算整个基础框架的高可用性、数据的可靠性以及云服务器ECS的高可用性。但在使用ECS实例的过程中,仍然有可能会出现由于操作系统配置不当或程序过载等原因导致系统内核崩溃的情况,这将导致系统夯机、异常重启或无法正常启动等问题。为了分析根本原因而避免问题反复发生,运维人员通常依靠查看系统日志来做分析诊断,然而此时也许实例已经无法正常SSH远程连接,让定位故障原因的过程变得非常困难。现在阿里云提供了一键查看系统日志和屏幕截屏的功能,为运维人员提供了一个方便的工具,给系统异常故障的分析诊断提供更多的支持。

为什么需要系统串口日志

当ECS实例发生了夯机、异常重启、或者无法正常启动时,运维人员需要定位导致问题发生的根本原因,及时解决问题并且避免该问题反复发生。

ECS实例运行的稳定性会受多方面影响,概括来说会存在于两个层面,一方面是承载ECS实例运行的基础设施硬件和软件环境,另一方面是ECS实例操作系统内部的运行环境。如果实例的异常状态是由于承载其运行的基础设施硬件或软件出现故障而导致的,阿里云会向用户提供系统事件信息,便于您了解这方面问题对实例运行的影响;如果实例的异常状态是由于操作系统内部内核bug、系统配置不当或程序过载等原因而导致的,就需要查看操作系统层面的日志信息来诊断问题了。
(如果您希望了解更多ECS系统事件的信息,可以查看帮助文档和云栖博客让运维更高效:关于ECS系统事件

在Linux操作系统层面,经过设置后,启动日志和异常故障等信息会通过服务器的串口(串行端口,Serial Port)打印输出。如果是物理服务器,运维人员通常会通过IPMI带外接口获得操作系统通过串口打印输出的日志信息。对于云服务器,运维人员同样需要这方面的日志信息帮助对异常故障做诊断分析,因此,云服务器的系统串口日志是运维诊断的重要一环。

系统串口日志会包含什么信息

系统通过串口打印输出的日志会包含两种类型的信息,一类是系统启动开机时的日志内容,另一类是系统内核故障或异常时的日志内容。

1. Linux操作系统启动开机时,默认会将开机过程产生的日志信息输出到串口。开机信息会被系统内核存储在ring buffer中,会显示系统架构、CPU、RAM、挂载的硬件以及软件启动相关的系统信息。这类信息帮助系统管理员了解系统是否正常启动,检查预先设定的应用程序是否随系统启动等情况。

2. 内核故障或异常错误发生时,系统会按照配置的日志级别(由内核参数kernel.printk决定,默认级别为4 - KERN_WARNING)将对应信息输出到串口。内核错误(Kernel panic)是指操作系统在监测到内部的致命错误,并无法安全处理此错误时采取的动作。操作系统内核中处理Kernel panic的子程序通常被设计用来向串口控制台输出错误信息,以便用于故障的调试,然后等待系统被手动重新引导,或自动重新引导。该程序提供的技术性信息通常是用来帮助系统管理员或者软件开发者诊断问题的。

附:内核日志级别:
日志级别 对应名称 说明
0 KERN_EMERG The system is unusable.
1 KERN_ALERT Actions that must be taken care of immediately.
2 KERN_CRIT Critical conditions.
3 KERN_ERR Noncritical error conditions.
4 KERN_WARNING Warning conditions that should be taken care of.
5 KERN_NOTICE Normal, but significant events.
6 KERN_INFO Informational messages that require no action.
7 KERN_DEBUG Kernel debugging messages, output by the kernel if the developer enabled

如何使用系统串口日志

使用ECS控制台时,对于状态为“运行中”的ECS实例,您可以通过实例列表或实例详情的操作菜单,获取实例系统日志。

控制台操作
  1. 登录 ECS管理控制台。
  2. 单击左侧导航栏中的 实例
  3. 选择 地域
  4. 找到需要排查异常故障的实例的 操作 菜单。
  5. 单击 更多 > 运维和诊断 > 获取实例系统日志 查看日志。
  6. 也可以选中需要排查异常故障的实例,单击实例进入 实例详情页,点击 更多 > 获取实例系统日志 查看日志。

如下图所示,当系统正常启动时,会显示启动过程中的相关日志内容:
ECS运维:操作系统有异常?诊断日志来帮忙!

当系统出现内核错误时,会显示相关错误信息:
ECS运维:操作系统有异常?诊断日志来帮忙!

结合日志中所显示的内容,可以帮助运维人员检查系统启动是否正常,以及诊断操作系统层面发生的异常故障。

此外,在某些时刻系统也会将异常信息输出到显示器(比如Windows系统“蓝屏”),由于云服务器没有连接物理显示器,因此可以使用获取实例屏幕截图的功能查看异常状态下输出到屏幕的信息,为问题分析提供辅助。

使用OpenAPI时,您可以使用 GetInstanceConsoleOutput ,获得通过Base64编码输出的日志内容。使用 GetInstanceScreenshot ,获得通过Base64编码输出的屏幕内容。

请注意,目前只有在 运行中 状态的实例可以查看系统日志和屏幕截屏。

写在最后

让ECS更好用是我们持续追求的目标。ECS主动运维和系统事件机制,可以提前发现基础设施层面对ECS运行的影响,并通过事件让运维人员及时感知并采取预防性措施,避免对在行业务的影响;而今天介绍的诊断日志功能,可以帮助运维人员在面对实例个体由于操作系统内部原因出现异常的情况下,分析原因避免同样的问题反复发生威胁业务连续性。后续我们会推出更多的运维工具和能力,让您使用ECS的过程更放心、更透明。敬请期待!
上一篇:CDH5 大数据实验平台搭建笔记


下一篇:6个强大的JavaScript日期操作插件(翻译)