服务器出厂定制化定位指导
概述
本文档介绍如何通过日志快速分析和定界服务器出厂定制化失败的原因。通过本文档的学习,管理员可以掌握典型场景的定位思路和案例,提高问题解决效率。
认识定制化
定制化简介
服务器出厂定制化是指根据客户需求对 BMC 系统进行个性化配置的过程,包括:
- 配置文件定制 - 根据客户需求修改系统配置
- 功能定制 - 启用或禁用特定功能
- 界面定制 - 修改 Web 界面和标识信息
- 网络定制 - 配置网络参数和安全策略
常见定制化失败原因
| 失败原因 | 描述 | 占比 |
|---|---|---|
| 配置文件问题 | 配置文件格式错误、路径错误等 | 40% |
| 组件问题 | 组件版本不兼容、依赖缺失等 | 40% |
| 其他问题 | bmc系统异常、进程或协程异常退出等 | 20% |
日志分析基础
认识日志系统
openUBMC 使用结构化日志系统记录系统运行信息,问题定位日志常见为以下级别:
| 级别 | 名称 | 描述 | 用途 |
|---|---|---|---|
| 1 | ERROR | 错误 | 错误信息 |
| 2 | WARNING | 警告 | 警告信息 |
| 3 | NOTICE | 通知 | 正常但重要 |
日志文件位置
定制化相关的日志文件:
| 日志文件 | 描述 | 位置 |
|---|---|---|
| app.log | 组件日志 | /var/log/ |
定制化流程关键日志
product_mgmt组件
text
# 正常场景:定制开始日志
set custom settings...
# 异常场景:重复定制
Customization in progress.
# 正常场景:定制任务开始日志
Custom task start.
Customization begin.
# 异常场景: 默认定制项加载失败
Failed to load json object, ErrMsg: xxxx
Failed to load default customset file.
# 异常场景: 用户定制项加载失败
ini_parse.load_file failed, ErrMsg: xxxx
Failed to load user customset file.
# 异常场景: 合并默认定制项和用户定制项失败
Failed to get custom config, ErrMsg: xxxx
# 正常场景: 配置导入流程开始
Begin to import custom config.
# 异常场景: 保存配置文件失败
Save import config file failed, ret: xxxx
# 异常场景: 配置导入流程失败
Failed to import config, ErrMsg: xxxx
# 异常场景: 配置导入任务丢失
Get custom import task failed, id: xxxx
# 异常场景: 配置导入任务超时
Wait custom import task timeout.
# 正常场景: 定制结束日志
Customization finish.oms组件
text
# 异常场景: 重复导入配置
A file transfer task is being performed or another configuration import operation is in progress
# 异常场景: 文件路径非法
File path is invalid
# 正常场景: 开始配置导入
Import task start
Local import start
# 正常场景: 开始分发配置给各个组件
Start to distribute configuration
# 异常场景: schema文件校验失败
Service(xxxx) config is invalid, error info: xxxx
Validate import value failed
Schema of service(xxxx) verify failed, ret: xxxx
Process configuration of service(xxxx) failed, ret: xxxx
# 正常场景: 子组件配置导入成功
Call configuration import of service(xxxx)
Import service(xxxx) config done
# 异常场景: 分发配置给子组件失败
Distributing configurations failed, no available service match name(xxxx)
Import service(xxxx) config failed, ret: xxxx.
# 正常场景: 更新配置导入任务
Update task by services status start
# 异常场景: 更新配置导入任务超时
Update task status time out
# 正常场景: 更新配置导入任务结束
Update task by services status finished查询日志
查询定制服务日志
bash
# 查看定制服务日志
tail -f /var/log/app.log
# 过滤错误信息
cat /var/log/app.log | grep product_mgmt问题定位总体思路
问题场景
定制化失败,定制项效果不符合预期
定位思路
- 过滤product_mgmt或oms的日志 - 确认定制出错流程
- 配置文件加载或校验失败问题 - 确认配置文件是否正确
- 子组件配置导入失败问题 - 确认子组件配置导入处理是否正确
- 任务丢失或任务处理超时 - 确认bmc系统是否正常
通过过滤product_mgmt或oms的日志,确认定制出错流程
bash
# 一键收集日志
ipmcget -d diag
# 过滤错误日志
cat /var/log/app.log | grep product_mgmt
cat /var/log/app.log | grep oms
# 通过对照上文梳理的流程确认出错点配置文件加载或校验失败问题
如果通过日志确发现是配置文件加载或校验失败问题,可根据配置项和组件名,在社区profile_schema仓根据组件名和配置项检查配置项的配置。配置样例:
json
"Custom_HostnameUpdatePolicy": {
"type": "integer",
"AttributeType": "ImportAndExport",
"enum": [0, 1],
"CustomDefault": 0
}结合配置项说明,去检查定制项配置是否合理,是否符合这个版本的要求
子组件配置导入失败问题
如果通过日志发现是子组件配置导入失败问题,可根据配置项和组件名,去进一步过滤app.log日志,再根据子组件的日志定位。
bash
cat /var/log/app.log | grep 组件名任务丢失或任务处理超时
如果通过日志发现是任务丢失或任务处理超时问题,可根据时间戳,去查看framework.log和bmc_health.log日志。
bash
# 查看异常时间节点,是否有组件异常,是否有进程、协程异常退出
cat /var/log/framework.log
# 查看异常时间节点,是否有CPU、内存使用异常
cat /var/log/bmc_health.log附录
参考资料
- openUBMC 社区:https://www.openubmc.cn/