简介
本文档介绍在Finesse座席桌面环境中观察到的队列或技能组统计信息更新问题故障排除方法,特别是由计算机电话集成(CTI)服务器和Finesse服务器之间的消息延迟所导致的问题。文章提供了日志分析,最后给出了一个解决方法,以提高Finesse服务器在次优延迟网络中处理这些Stats Update消息的能力。
先决条件
要求
Cisco 建议您了解以下主题:
- 思科统一联系中心企业版(UCCE)CTI服务器(CTISVR)
- Cisco Finesse服务器
使用的组件
本文档中的信息基于以下软件和硬件版本:
- 安装了CTISVR的UCCE代理外围网关
- Finesse服务器集群
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
规则
关于文件规则的信息,请参见Cisco技术提示规则。
背景信息
订用作为CTI客户端的CTISVR的Finesse服务器提供类似于计算机电话集成对象服务器(CTIOS)和思科座席桌面(CAD)的座席功能。Finesse座席/主管还可以遇到CTIOS和CAD座席面临的一些问题。
其中一个问题是队列或技能组实时状态未更新到Finesse座席/管理引擎桌面。在CTIOS和CAD环境中,工程师通常会检查设计指南并验证配置限制(例如每个座席的技能组、每个外围设备的技能组总数和每个主管的团队等)是否已超订用。 工程师还会检查CTISVR上并发CTI客户端连接的数量,请参阅
相关信息也可以参考版本10.5(x)和版本11的设计指南。
在Finesse代理/管理引擎上排除此类故障时,也从上述设计限制验证开始。但是,Finesse代理可能会受到其他限制的影响,这些限制仅在Finesse服务器上提供。
问题症状
在以下情况下,通常会发现队列或技能组统计信息未更新问题:
- 当前座席状态不会反映在Finesse座席桌面上的单个技能/队列小工具中。但是,如果在座席外围设备网关(PG)上使用opctest和la命令检查座席状态,则表明技能组的座席状态正确。
- 处于TALKING状态的座席数已有一段时间,但Finesse座席或主管桌面在通话时间的技能/队列中仍显示为0。
- 重新启动Finesse服务器可使系统临时工作,但通常相同的问题会在几分钟或几小时内再次出现。
Finesse CTI消息传送和Finesse队列统计信息缓冲区
Finesse代理队列统计信息或技能统计信息更新通过在Finesse服务器中交换这些请求和响应CTI消息对来执行。
由Finesse发出的getQueryQueueStatisticsReq()消息请求,以为CTISVR响应的结果QuerySkillGroupStatisticsConf消息。
默认情况下,Finesse可在指定的10秒统计刷新间隔内处理751个技能组请求。未处理的请求会在消息队列中缓冲,以便稍后进行处理。默认情况下,Finesse使用此消息缓冲区队列进行初始化,以保留5000个REQUEST消息。
但是,如果缓冲区已满并且不堪重负,则其中一些队列状态请求消息会超时并被丢弃。
Finesse队列统计信息缓冲区溢出的可能原因
1.设计/配置超订用。例如每个座席的技能、每个外围设备的技能组总数、每个主管的团队等。有关建议的配置限制,请参阅。超订用可能导致统计信息更新上的CTI消息过多,从而超出Finesse队列统计信息请求缓冲区。
2.超过允许的最大并发CTI客户端连接(包括所有事件连接和监控模式连接)。CTISVR资源耗尽,导致CTI消息处理速度明显减慢。
3. PG性能,例如CPU、内存和磁盘I/O操作……
4.网络带宽不足,无法支持Finesse应用允许的CTI消息传递延迟,即62ms。
链接中提供的Finesse带宽计算器和当前设计规范,用于分配推荐的网络带宽。http://www.cisco.com/c/en/us/support/customer-collaboration/finesse/products-technical-reference-list.html
由于CTI消息延迟,Finess Queue Stats缓冲区溢出
基于此Finesse对REQUEST消息处理速度和消息缓冲区的限制,平均Finesse部署的最大平均请求/响应延迟的默认值为62毫秒。如果平均延迟显着超过62毫秒的基准,例如CTI消息延迟约100毫秒。然后,在这10秒的刷新间隔内,缓冲的getQueryQueueStatisticsReq()CTI消息永远无法发送到CTISVR,并以QuerySkillGroupStatisticsConf消息进行响应。其余超时getQueryQueueStatisticsReq()消息会从队列统计缓冲器中删除。
相关Finesse跟踪
可以在webservices finesse日志中找到队列统计信息。它需要DEBUG跟踪级别来显示详细的队列统计消息。
有关为Web服务启用DEBUG跟踪级别的步骤,请参阅此docwiki链接。
http://docwiki.cisco.com/wiki/Logging:_Enable_debug_level_logging
日志分析
当队列缓冲区溢出后,可以从Webservices日志中观察日志代码段
查找751队列状态请求更新一轮的开头,在10秒刷新间隔的开头:
eg.
Sep 22 2014 14:34:59.878 -0700: %CCBU_pool-21-thread-1-6-QUEUE_STATISTICS_REQUEST: %[count=751]: Starting new round of querying active queue statistics
在10秒后出现的下一轮751请求之间,使用文本工具eg进行过滤和验证。记事本++,如果有匹配的751条QuerySkillGroupStatisticsConf消息:
eg
Sep 22 2014 14:34:59.888 -0700: %CCBU_CTIMessageEventExecutor-0-6-DECODED_MESSAGE_FROM_CTI_SERVER: %[cti_message=CTIQuerySkillGroupStatisticsConf[peripheralID=5000, skillGroupNumber=28353, routerCallsQNow=0, longestRouterCallQNow=0, agentsNotReady=0, agentsReady=0, agentsTalkingIn=0, agentsTalkingOut=0, agentsTalkingOther=0, agentsWorkNotReady=0, agentsWorkReady=0]CTIMessageBean [invokeID=112223, msgID=115, timeTracker={"id":"QuerySkillGroupStatisticsConf","CTI_MSG_NOTIFIED":1411536082977,"CTI_MSG_RECEIVED":1411536082976}, msgName=QuerySkillGroupStatisticsConf, deploymentType=CCE]][cti_response_time=1]: Decoded Message to Finesse from backend cti server
例如,如果Finesse仅为此轮处理了329条QuerySkillGroupStatisticsConf消息,换而言之,缓冲区中必须排队422条消息。显然,如果每10秒要排队400条左右的消息,那么缓冲区可在3分钟内到达5000条消息的阈值。
搜索3分钟内第一次出现的轮询错误,即缓冲区溢出的信号:
Sep 22 2014 14:37:29.883 -0700: %CCBU_pool-21-thread-1-3-QUEUE STATISTICS POLLING ERROR: %[ERROR_DESCRIPTION= maximum pool and queue capacity reached so discarding execution][error_message=Thread pool saturated, discarding execution ]: Error during queue statistics polling
CTISVR处理延迟图示
- Finesse将getQueryQueueStatisticsReq()请求发送到CTISVR - tracking invokeId=112223,queueId=28353:
Sep 23 2014 22:21:22.875 -0700: %CCBU_pool-19-thread-4-7-CTIWriter.getQueryQueueStatisticsReq(): {Thrd=pool-19-thread-4} params : invokeId=112223, queueId=28353
match InvokeID:0x1b65f with invoked=112223 in the Finesse request
and SkillGroupNumber:28353 with queueId in the Finesse request
22:21:22:921 cg1A-ctisvr SESSION 9: MsgType:QUERY_SKILL_GROUP_STATISTICS_REQ (InvokeID:0x1b65f PeripheralID:5000
22:21:22:921 cg1A-ctisvr SESSION 9: SkillGroupNumber:28353 SkillGroupID:N/A )
22:21:22:999 cg1A-ctisvr SESSION 9: MsgType:QUERY_SKILL_GROUP_STATISTICS_CONF (InvokeID:0x1b65f PeripheralID:5000
22:21:22:999 cg1A-ctisvr SESSION 9: SkillGroupNumber:28353 SkillGroupID:9431 AgentsLoggedOn:0 AgentsAvail:0 AgentsNotReady:0
22:21:22:999 cg1A-ctisvr SESSION 9: AgentsReady:0 AgentsTalkingIn:0 AgentsTalkingOut:0 AgentsTalkingOther:0
22:21:22:999 cg1A-ctisvr SESSION 9: AgentsWorkNotReady:0 AgentsWorkReady:0 AgentsBusyOther:0 AgentsReserved:0 AgentsHold:0
22:21:22:999 cg1A-ctisvr SESSION 9: AgentsICMAvailable:0 AgentsApplicationAvailable:0 AgentsTalkingAutoOut:0
22:21:22:999 cg1A-ctisvr SESSION 9: AgentsTalkingPreview:0 AgentsTalkingReservation:0 RouterCallsQNow:0
- Finesse收到CTISVR响应,并形成QuerySkillGroupStatisticsConf消息:
Sep 23 2014 22:21:22.977 -0700: %CCBU_CTIMessageEventExecutor-0-6-DECODED_MESSAGE_FROM_CTI_SERVER: %[cti_message=CTIQuerySkillGroupStatisticsConf[peripheralID=5000, skillGroupNumber=28353, routerCallsQNow=0, longestRouterCallQNow=0, agentsNotReady=0, agentsReady=0, agentsTalkingIn=0, agentsTalkingOut=0, agentsTalkingOther=0, agentsWorkNotReady=0, agentsWorkReady=0]CTIMessageBean [invokeID=112223, msgID=115, timeTracker={"id":"QuerySkillGroupStatisticsConf","CTI_MSG_NOTIFIED":1411536082977,"CTI_MSG_RECEIVED":1411536082976}, msgName=QuerySkillGroupStatisticsConf, deploymentType=CCE]][cti_response_time=1]: Decoded Message to Finesse from backend cti server
请注意,如果这是平均响应时间,则Finesse需要100毫秒以上才能收到匹配的QuerySkillGroupStatisticsConf消息。Finesse可能会遇到缓冲区队列超限问题。
解决方法
aws.properties中有一个属性,用于设置Finesse服务器端上的刷新间隔。这基本上是从Finesse到CTISVR的两轮队列统计信息请求(一轮指此部署中的751个队列统计信息请求)之间的时间间隔。默认情况下,Finesse每10秒请求一次。该属性可能会更改为更高价值,这意味着Finesse将拥有更多时间(例如:20秒(而不是10秒),以便处理一轮队列统计信息请求。它还有效地将基准CTI技能统计请求/响应延迟从62毫秒扩展到124毫秒。
- 已获得Finesses OS平台的根访问权限
- VI到属性文件/opt/cisco/desktop/conf/webservices/aws.properties
- 将此属性值从10修改为20
com.cisco.cc.webservices.reporting.core.queue_statistics_refresh_interval
注意:队列统计信息的刷新间隔(秒)。
- 保存aws.properties文件
- 重启Finesse Tomcat服务
- 将在Finesse集群内的所有Finesse节点上执行相同的步骤