워크플로 모니터
일반적으로 Windows 워크플로 오류는 다음 이유 중 하나로 인해 발생할 수 있습니다. 활성 경고 보기에 이 오류와 연결된 경고가 있습니다. 경고 정보는 오류의 자세한 원인을 나타냅니다. 관리 팩을 가져온 이후 이 모니터가 빨간색이 되었는데 경고 보기에 경고가 없으면 관리 팩을 가져오기 전에도 시스템에 워크플로 오류가 있었을 수 있습니다. 이 모니터를 녹색으로 전환하려면 Service Manager 콘솔에서 이전 워크플로 오류를 모두 무시하세요.
1. WF 워크플로 실패: 워크플로 오류는 워크플로에서 작동이 중지되도록 한 문제가 발생했음을 나타냅니다. 실패한 워크플로는 일반적으로 알려진 문제가 있음을 의미합니다. 워크플로 계정에 작업을 완료하는 데 필요한 수준의 사용 권한이 없음, 리소스를 사용할 수 없음, 연결 문제 등 여러 이유로 워크플로가 실패할 수 있습니다.
2. WF 워크플로 제출 실패: 이 워크플로가 모니터링 호스트에서 실행하도록 제출되지 않았습니다.
3. WF 워크플로 예외: 워크플로 상태에는 "성공"으로 표시되지만 예외가 발생했습니다. 예상된 결과를 얻었는지 확인해야 하며, 그렇지 않을 경우 워크플로를 시작하기 위해 수행한 작업을 반복해야 할 수 있습니다. 워크플로 코드의 소프트웨어 오류로 인해 실패하고 예외가 발생할 수 있습니다.
4. WF 워크플로 시간 제한: 워크플로가 25분 내에 작업을 완료하지 못하면 시간이 초과됩니다. 워크플로가 시작됨 또는 예약됨 단계에 멈춰 있을 수 있으며, Service Manager 콘솔에서 특정 유형의 워크플로에 대한 관리/워크플로/상태 보기에 있는 "주의 필요" 탭에 나타납니다. 서비스가 다시 시작될 때 실행, 긴 큐, 반환하는 데 시간이 오래 걸리는 API 등 워크플로 시간 초과에는 여러 가지 원인이 있습니다.
WF 워크플로 실패의 경우:
실패한 WF 워크플로는 Service Manager 콘솔에서 특정 유형의 워크플로에 대한 관리/워크플로/상태 보기의 “주의 필요” 탭에 표시됩니다.
"로그 보기"를 눌러 로그를 열고 워크플로 실패 원인에 대한 정보를 얻습니다.
문제를 해결하고 "다시 시도"를 눌러 워크플로를 다시 실행합니다.
문제가 계속되면 Service Manager 관리 서버에서 상태 서비스를 다시 시작합니다.
문제가 수동으로 해결되면 "무시" 단추를 눌러 "주의 필요" 보기에서 워크플로를 제거합니다.
WF 워크플로 제출 실패의 경우:
Service Manager 관리 서버에서 상태 서비스를 다시 시작합니다.
WF 워크플로 예외의 경우:
수동 단계를 수행하여 워크플로가 "성공"으로 완료되었지만 원하는 작업을 완료하지 못한 경우 해당 워크플로를 시작한 조건을 다시 만듭니다.
워크플로가 Service Manager 콘솔 관리 창의 워크플로 상태 보기에 표시됩니다.
WF 워크플로 시간 제한의 경우:
시간 초과된 WF 워크플로는 Service Manager 콘솔에서 특정 유형의 워크플로에 대한 관리/워크플로/상태 보기의 “주의 필요” 탭에 표시됩니다. 워크플로를 다시 시도하여 다시 실행하거나, 문제가 수동으로 해결된 경우 [무시]를 누릅니다.
워크플로가 실행되지 않는 상태에 멈춰 있는 경우 관리 서버에서 상태 서비스를 다시 시작하여 대기 중인 모든 워크플로를 다시 시도하고 다시 시작합니다.
Target | Microsoft.SystemCenter.ServiceManager.SmManagementServer |
Parent Monitor | Microsoft.ServiceManager.Workflows.AvailabilityHealthRollup |
Category | AvailabilityHealth |
Enabled | True |
Alert Generate | False |
Alert Auto Resolve | True |
Monitor Type | Microsoft.SystemCenter.ServiceManager.Workflows.OLEDB.Monitoring.DBProbeMonitorType |
Remotable | True |
Accessibility | Public |
RunAs | Default |
<UnitMonitor ID="Microsoft.SystemCenter.ServiceManager.WWFWorkflows.Monitor" Accessibility="Public" Enabled="true" Target="SM!Microsoft.SystemCenter.ServiceManager.SmManagementServer" ParentMonitorID="Microsoft.ServiceManager.Workflows.AvailabilityHealthRollup" Remotable="true" Priority="Normal" TypeID="Microsoft.SystemCenter.ServiceManager.Workflows.OLEDB.Monitoring.DBProbeMonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<OperationalStates>
<OperationalState ID="ComponentUnhealthy" MonitorTypeStateID="State1" HealthState="Warning"/>
<OperationalState ID="ComponentHealthy" MonitorTypeStateID="State2" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>60</IntervalSeconds>
<SyncTime/>
<ConnectionString>Provider=SQLOLEDB;Server=$Target/Property[Type='SM!Microsoft.SystemCenter.ServiceManager.SmManagementServer']/SmDbHostName$;Database=$Target/Property[Type='SM!Microsoft.SystemCenter.ServiceManager.SmManagementServer']/SMDbName$;Integrated Security=SSPI</ConnectionString>
<Query>
SELECT CONVERT(nvarchar,COUNT(*))
FROM dbo.WindowsWorkflowTaskJobStatus
LEFT OUTER JOIN dbo.JobStatusView
ON dbo.[JobStatusView].[BatchId] = dbo.[WindowsWorkflowTaskJobStatus].[BatchId]
LEFT OUTER JOIN dbo.MySubscriptions
ON dbo.[WindowsWorkflowTaskJobStatus].[RuleId] = dbo.[MySubscriptions].[RuleEntityId]
WHERE ((
dbo.[WindowsWorkflowTaskJobStatus].[Processed] IS NULL
AND
( (dbo.[WindowsWorkflowTaskJobStatus].[ErrorMessage] IS NOT NULL)
OR (dbo.[JobStatusView].Status = 3)
OR ((dbo.[JobStatusView].Status = 0 OR dbo.[JobStatusView].Status = 1)
AND
(DATEDIFF(MINUTE, dbo.[JobStatusView].TimeScheduled, GETUTCDATE()) >= 25)
)
OR( dbo.[JobStatusView].Status = 2)
OR( dbo.[JobStatusView].Status is NULL)
)
))
</Query>
<State1Filter>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Columns/Column[1]</XPathQuery>
</ValueExpression>
<Operator>NotEqual</Operator>
<ValueExpression>
<Value Type="String">0</Value>
</ValueExpression>
</SimpleExpression>
</State1Filter>
<State2Filter>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Columns/Column[1]</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">0</Value>
</ValueExpression>
</SimpleExpression>
</State2Filter>
</Configuration>
</UnitMonitor>