18 某公司方案设计说明书ITIL问题管理模块设计
文档信息
版本历史
1.设计概要
问题管理流程的根本目的是消除或减少生产环境中事件发生的数量和严重程度,从而为企业建立一个稳定的IT环境,提高IT服务的可用性。此流程对发生在生产环境中的问题进行管理,找出产生这些问题的根本原因,然后根据需要通过变更请求(RFC)、变通方法或建议的预防性措施来防止事件的再次发生。
问题管理流程着重于消除事件或减少事件发生,确定事件的根本原因。主要活动包括分析事件、找出问题、分派问题、确定根本原因以及找出解决方案、回顾及关闭,以消除事件或在其发生时降低对用户或业务的影响。
2.总体方案
问题管理概要流程描述如下:
序号 | 步骤名称 | 责任人 | 说明 |
200.1 | 问题确定与记录 | 问题处理专家/问题经理 |
|
200.2 | 问题确认与分派 | 问题处理专家/问题经理 |
|
200.3 | 分析并诊断问题/提供变通方法 | 问题处理专家/ 厂商 |
|
200.4 | 开发、确认、实施解决方案 | 问题处理专家/ 厂商 |
|
200.5 | 问题监控 | 问题经理/ 问题处理专家 | 问题经理和问题处理专家负责问题分析、诊断、解决过程中的跟踪和监控:
|
200.6 | 问题回顾 | 问题经理/ 问题处理专家 |
|
200.7 | 问题关闭 | 问题处理专家 |
|
问题管理存在以下实际应用场景:
- 突发事件升级为问题
- 运维人员手动提交问题
- 根据事件趋势分析结果提交问题
3.模块与周边产品集成
无
4.详细设计与开发指导
4.1.技术细节
4.1.1.表单(format)
- PM.problem.logging
PM.problem.planning
PM.problem.investigation
PM.problem.resolution
PM.problem.closure
添加“问题来源”、“重复问题”。
“问题来源:”的文本控件的输入属性为MS.source,值列表为“事件升级;维护提出;趋势分析”。
“是否为重复问题:”的组合控件的输入属性为MS.duplicate,值列表为“1;0”,显示列表为“是;否”。
“是否为重大问题:”的组合控件的输入属性为MS.critical,值列表为“1;0”,显示列表为“是;否”。
将标签“问题协调员”改为“问题处理人”。
将表单中“区域:”和“分区:”标签的标题分别修改为“领域:”和“子领域:”。
隐藏“文件夹:”的标签控件和文本输入控件。
隐藏“服务” 的标签控件和文本输入控件。
将“公司”选项卡的“可见条件” [$G.multi]=true去掉,并设置该选项卡为不可见。
将“任务”选项卡设置为不可见。
将“评估”选项卡改为“受影响的配置项”。并该选项卡下面的“估计每人每天的次数:”、“估计成本”的标签和文本控件隐藏。添加标签,设置标题为“请通过选择"主要配置项"来添加多个受影响的配置项:”。
将“活动”选项下面控件的标题修改如下:
- advFind.search.problem
添加“问题来源”、“重复问题”。
添加“问题来源”,输入属性为“MS.source”,值列表为“事件升级;维护提出;趋势分析”。
“重复问题”的选项控件的输入属性为MS.duplicate。
将表单中“区域:”和“分区:”标签的标题分别修改为“领域:”和“子领域:”。
标签“问题协调员”改为“问题处理人”。
将“搜索下列状态的记录单:”控件删除掉。
隐藏“文件夹”控件。
- 修改以下表单
PM.error.logging
PM.error.planning
PM.error.investigation
PM.error.resolution
PM.error.closure
“问题协调员:”改为“问题处理人:”
“匹配的配置项数:”改为“受影响的配置项数:”
“区域:”改为“领域:”
“子区域:”改为“子领域:”
隐藏“相关交互计数:”
隐藏“文件夹:”
“活动更新”改为“提供更新”
“日记更新”改为“日志”
“活动历史记录”改为“历史活动”
“更新类型:”改为“活动类型:”
- 创建表单PM.notify.registered
表单上用标签来显示问题工单各个字段的内容。比如标签“领域:”后面紧跟着还有一个标签,这个标签标题为空,它的输入属性为”subcategory”,以此来动态生成邮件内容。
- 表单PM.notify.assigned
表单上用标签来显示问题工单各个字段的内容。比如标签“领域:”后面紧跟着还有一个标签,这个标签标题为空,它的输入属性为”subcategory”,以此来动态生成邮件内容。
- 表单PM.notify.assigned.group
表单上用标签来显示问题工单各个字段的内容。比如标签“领域:”后面紧跟着还有一个标签,这个标签标题为空,它的输入属性为”subcategory”,以此来动态生成邮件内容。
4.1.2.表单控制(formatctrl)
- 表单控制rootcause
计算
将计算语句incident.category in $file="problem"改为incident.category in $file="故障"
验证
将以下验证语句去掉。
- 表单控制knownerror
加false将验证以下语句禁用。
4.1.3.处理定义(Process)
- process="rca.view.init"
将下面的初始表达式
if ($L.mode="add") then (rcStatus in $L.file="Open")
改为:if ($L.mode="add") then (rcStatus in $L.file="已登记")
4.1.4.显示选项(displayoptions)
- 将以下displayoption的用户条件设置为false :
id="rca.view_ok_1"
id="rca.view_ok"
id="rca.view_previousphase"
id="kne.view_previousphase"
id="kne.view_ok "
id="rca.view_getsla"
id="rca.task.view_getsla"
id="rca.view_do nothing"
id="rca.task.view_do nothing"
4.1.5.活动动作(activityactions)
- table#"rootcause"
将名称和描述改成中文。
Open:登记
Reassignment:重新分配
Assignment:分配
Phase Change:更改阶段
Reopen:重新打开
Status Change:更改状态
Closed:关闭
Cancelled:取消
Workaround Update:更新变通方案
External Update:外部更新
效果图如下:
- table#"knownerror"
将名称和描述改成中文。
Open:登记
Reassignment:重新分配
Assignment:分配
Phase Change:更改阶段
Reopen:重新打开
Status Change:更改状态
Closed:关闭
Cancelled:取消
Workaround Update:更新变通方案
External Update:外部更新
4.1.6.数据
为数据表注入定制好的中文数据。
请直接双击zip文件,解压出unl文件,然后用SM的数据库管理器导入数据。
问题阶段(表名:rootcausephase)
问题控制类别(表名:rootcausecat)
问题状态(表名:ModuleStatus)
问题活动(表名:activitytype)
已知错误阶段
已知错误类别
已知错误活动(表名:activitytype)
4.1.7.全局列表(globallists)
- name=”PM Activity Types”
更改值列表如下:
{"信息更新","分析与调查","已关闭","与客户沟通","与供应商沟通","已登记","操作员更新","已诊断部分问题","阶段变更","问题已标识","问题重现","重新分配","重新打开","来自客户的更新","变通方案", "已分配","状态变更","已取消","变通方案更新","解决方案更新"}
4.1.8.系统消息(scmessage)
- 把更新消息编号2210的文本“请提供更新。”改为“请提供当前更新的详细描述。”
语言代码: zh-Hans
类别: us
消息编号: 2210
严重度: 1
文本:请提供当前更新的详细描述。
- 将消息编号810的文本“请提供区域。”更改为“请提供领域。”
- 将消息编号811的文本“请提供子区域。”更改为“请提供子领域。”
- 将消息编号1502的文本“请提供标题。”更改为“请提供简要描述。”
- 将消息编号813的文本“请提供描述。”更改为“请提供详细说明。”
4.2.表结构
数据库表 | 标签 | 字段名 | 数据类型 | 是否为必填 | Oracle映射 |
rootcause | 问题来源 | MS.source | character | 否 | varchar2(40) |
rootcause | 是否为重复问题 | MS.duplicate | character | 否 | char(1) |
rootcause | 是否为重大问题 | MS.critical | Character | 否 | Char(1) |
SQL语句:
ALTER TABLE "SM7ADMIN"."ROOTCAUSEM1" ADD ( "MS_SOURCE" VARCHAR2(40), "MS_DUPLICATE" CHAR(1), "MS_CRITICAL" CHAR(1))
4.2.1.字段帮助内容
为以下数据库表的字段添加帮助内容:
数据库表 | 字段名 | 帮助内容 |
rootcause | MS.source | 描述问题的来源。 事件升级:事件恢复服务后提出的问题,以便对事件的根本原因进行分析。 维护提出:技术专家在日常维护工作中提出的问题。 趋势分析:通过分析事件记录找出的问题。 |
rootcause | MS.duplicate | 描述当前问题记录是否为重复问题。 |
rootcause | MS.critical | 描述当前问题记录是否为重大问题。如果是重大问题,在关闭问题前需要提供重大问题报告。 |
4.3.通知与告警
4.3.1.邮件(Notification)
创建以下通知定义。邮件的格式由“窗体”参数来控制。以下用到的窗体均已在表单设计章节创建。
ID:PM_Open_1
邮件消息编号等于900的触发条件为:assignee.name in $L.file~=operator() and assignee.name in $L.file~=nullsub(assignee.name in $L.file.save, "Empty")
邮件消息编号等于908的触发条件为:nullsub(assignee.name in $L.file, "")="" and assignment in $L.file~=nullsub(assignment in $L.file.save, "")
4.3.2.短信(SMS)
服务管理系统发送短信通知的实现设计如下:
服务管理系统在问题创建后,会向Oracle数据库中的OutBox表写入目标手机号码和短信内容;接下来外部的事件监控平台将OutBox表里的数据同步到XX短信通的数据库。XX短信通平台将把这些数据库记录作为短信发送给接收人。
触发事件:当用户创建问题时
接收人类型:分配组、问题处理人
处理规则:默认只发送邮件,如果优先级为严重和较高,则需要加短信。如果事件已经分配处理者,通知处理者;如果没有处理者,通知将发给整个分配组成员。
4.3.3.代码实现
- ScriptLibrary: MS_SMS_Notification
说明:给配置组发短信时,检索出各个配置组成员的移动电话号码,将短信依次写入OutBox表。给处理者发短信时,检索出处理者的移动电话号码,然后将短信写入OutBox表,接下来短信的实际发送由诺亚短信通来处理。
function sendMsgToGroup(group,msg,module)
{
var SMSFile=new SCFile("OutBox");
var AssignmentFile=new SCFile("assignment");
var rcAssignment=AssignmentFile.doSelect("name=\""+group+"\"");
if (rcAssignment==RC_SUCCESS)
{
var OperatorArray=system.functions.denull(AssignmentFile.operators);
var i=0;
for (i in OperatorArray)
{
var mobile=getOperatorMobile(OperatorArray[i]);
SMSFile.ID=generateOutBoxID();
SMSFile.ExpressLevel=2; //可通过此字段控制发送信息的先后顺序.0为最高优先级;1较高优先级;2普通优先级.
SMSFile.Sender=
SMSFile.ReceiverMobileNo=mobile;
SMSFile.Msg=msg;
SMSFile.SendTime=system.functions.tod();
SMSFile.CommPort=0; //当系统有多个设备同时工作的时候,如需指定使用某串口上的设备发送信息,则填写串口号,如不需要指定则填写0,这时系统根据各个设备的忙闲情况自动分配使用。
var rcSMSFile=SMSFile.doInsert();
if (rcSMSFile!=RC_SUCCESS)
{
print("发给用户"+OperatorArray[i]+"的短信写入数据库失败。");
}
}
}
}
function sendMsgToOperator(operator,msg,module)
{
var SMSFile=new SCFile("OutBox");
SMSFile.ID=generateOutBoxID();
SMSFile.ExpressLevel=2; //可通过此字段控制发送信息的先后顺序.0为最高优先级;1较高优先级;2普通优先级.
SMSFile.Sender=
SMSFile.ReceiverMobileNo=getOperatorMobile(operator);
SMSFile.Msg=msg;
SMSFile.SendTime=system.functions.tod();
SMSFile.CommPort=0; //当系统有多个设备同时工作的时候,如需指定使用某串口上的设备发送信息,则填写串口号,如不需要指定则填写0,这时系统根据各个设备的忙闲情况自动分配使用。
var rcSMSFile=SMSFile.doInsert();
if (rcSMSFile!=RC_SUCCESS)
{
print("发给用户"+OperatorArray[i]+"的短信写入数据库失败。");
}
}
function getOperatorMobile(operator)
{
var OperatorFile=new SCFile("operator");
var rcOperator=OperatorFile.doSelect("name=\""+operator+"\"");
if (rcOperator==RC_SUCCESS)
{
var ContactFile=new SCFile("contacts");
var rcContact=ContactFile.doSelect("contact.name=\""+ContactFile.contact_name+"\"");
if (rcContact==RC_SUCCESS)
{
return ContactFile.portable_phone;
}
}
}
function generateOutBoxID()
{
return system.functions.rtecall("callrad",rteReturnValue,"getnumb","OutBox", "ID","string");
}
- 为activityproblem表上创建触发器FireProblemNotification.aft.add
if (record.type=="已登记")
{
var ProblemFile=new SCFile("rootcause");
if (ProblemFile.doSelect("id=\""+ record.id+ "\"")==RC_SUCCESS)
{
system.library.MS_EMail_Notification.sendEmail(ProblemFile,"PM_Open");
if (ProblemFile.priority_code==1 || ProblemFile.priority_code==2)
{
var priority=(ProblemFile.priority_code==1)?"1 - 严重":"2 - 高";
var msg="新事件"+ProblemFile.id+ " 优先级"+priority+" "+ProblemFile.brief_description+"已登记。";
if (system.functions.nullsub(ProblemFile.assignee_name,"NULL")!="NULL")
{
system.library.SMSnotification.sendMsgToOperator(ProblemFile.assignee_name,msg);
}
else
{
system.library.SMSnotification.sendMsgToGroup(ProblemFile.assignment,msg);
}
}
}
}
4.4.角色及相关配置文件
- 打开数据库管理器,进入文件rcenv,搜索出已有的配置文件。
以problem analyst为模板添加安全配置文件:问题处理专家;
以problem manager为模板添加安全配置文件:问题经理.
- 打开数据库管理器,进入文件userrole,搜索出已有的突发事件用户角色。
以problem analyst为模板添加角色“问题处理专家”,并问题配置文件文件为:“问题处理专家”。
以prolem manager为模板添加角色“问题经理”,并将突发事件配置文件替换为“问题经理”。
5.人力评估
技能要求 | 人天数 | 说明 |
中级 | 17 | 工作难点: 模块裁剪; 流程定制; 邮件短信定制。 |
6.主要测试计划
详见问题管理单元测试计划