Monitoring the Student Integration Flows Using Azure Application Insights
Administrators can view and monitor the integration details of Anthology Student and Anthology Reach Integration Flows using Azure Application Insights. Some of the details of the Student Integration Flows that can be monitored using the Azure Application Insights include:
-
Details of the Flow and its run details.
-
Flow execution statuses
-
Flow execution times for Integration related activities
Viewing the Application Insights for Student Integration Flows
This topic provides information on the query snippets and the steps to generate and view application insights for the student integration flows.
Query Snippets for Generating Application Insights for the Student Integration Flows
The Application Insights for the Student Integration flows can be generated using the following query snippets for each type of Flow:

let IntegrationStatusMap = dynamic(
{
"175490000": "Success",
"175490001": "Failed",
"175490002": "Pending",
"175490003": "Success (with warning)"
});
union traces
| where message startswith "Integration Log added for"
| extend
CorrelationId = tostring(customDimensions['prop__CorrelationId']),
EntityName = tostring(customDimensions['prop__EntityName']),
EntityId = tostring(customDimensions['prop__EntityId']),
IntegrationStatus = IntegrationStatusMap[tostring(customDimensions['prop__IntegrationStatus'])],
OperationType = tostring(customDimensions['prop__OperationType']),
IntegrationCategory = tostring(customDimensions['prop__IntegrationCategory']),
IntegrationSubCategory = tostring(customDimensions['prop__IntegrationSubCategory']),
StartDateTime = todatetime(customDimensions['prop__StartDateTime']),
EndDateTime = todatetime(customDimensions['prop__EndDateTime'])
| project
CorrelationId,
EntityName,
EntityId,
IntegrationStatus,
IntegrationCategory,
IntegrationSubCategory,
OperationType,
StartDateTime,
EndDateTime,
timeTaken = datetime_diff('millisecond', EndDateTime, StartDateTime)
| where IntegrationCategory == 'Reach-Student Integration'
| summarize
RunCount = count(),
SuccessCount = countif(IntegrationStatus == 'Success'),
FailedCount = countif(IntegrationStatus == 'Failed'),
WarningCount = countif(IntegrationStatus == 'Success (with warning)'),
PendingCount = countif(IntegrationStatus == ''),
SuccessRate = (countif(IntegrationStatus in('Success', 'Success (with warning)')) * 100) / count(),
AvgRunTime = avg(timeTaken)
by EntityName

let IntegrationStatusMap = dynamic(
{
"175490000": "Success",
"175490001": "Failed",
"175490002": "Pending",
"175490003": "Success (with warning)"
});
union traces
| where message startswith "FLOWEND - Executed Flow with FlowKeyName "
| extend
CorrelationId = tostring(customDimensions['prop__CorrelationId']),
FlowKey = tostring(customDimensions['prop__FlowKey']),
startTime = todatetime(customDimensions['prop__startTime']),
endTime = todatetime(customDimensions['prop__endTime']),
status = tostring(customDimensions['prop__status'])
| project
CorrelationId,
FlowKey,
startTime,
endTime,
status,
datetime_diff('millisecond', endTime, startTime)
| join kind = leftouter (
union traces
| where message startswith "Integration Log added for"
| extend
CorrelationId = tostring(customDimensions['prop__CorrelationId']),
EntityName = tostring(customDimensions['prop__EntityName']),
EntityId = tostring(customDimensions['prop__EntityId']),
IntegrationStatus = IntegrationStatusMap[tostring(customDimensions['prop__IntegrationStatus'])],
OperationType = tostring(customDimensions['prop__OperationType']),
IntegrationCategory = tostring(customDimensions['prop__IntegrationCategory']),
IntegrationSubCategory = tostring(customDimensions['prop__IntegrationSubCategory']),
StartDateTime = todatetime(customDimensions['prop__StartDateTime']),
EndDateTime = todatetime(customDimensions['prop__EndDateTime'])
| project
CorrelationId,
EntityName,
EntityId,
IntegrationStatus,
IntegrationCategory,
IntegrationSubCategory,
OperationType,
StartDateTime,
EndDateTime,
timeTaken = datetime_diff('millisecond', EndDateTime, StartDateTime)
)
on CorrelationId
| summarize
RunCount = count(),
SuccessCount = countif(IntegrationStatus == 'Success'),
FailedCount = countif(IntegrationStatus == 'Failed'),
WarningCount = countif(IntegrationStatus == 'Success (with warning)'),
PendingCount = countif(IntegrationStatus == ''),
SuccessRate = (countif(IntegrationStatus in('Success','Success (with warning)')) /count())*100,
AvgRunTime = avg(timeTaken)
by FlowKey

let IntegrationStatusMap = dynamic(
{
"175490000": "Success",
"175490001": "Failed",
"175490002": "Pending",
"175490003": "Success (with warning)"
});
union traces
| where message startswith "Integration Log added for"
| extend
CorrelationId = tostring(customDimensions['prop__CorrelationId']),
EntityName = tostring(customDimensions['prop__EntityName']),
EntityId = tostring(customDimensions['prop__EntityId']),
IntegrationStatus = IntegrationStatusMap[tostring(customDimensions['prop__IntegrationStatus'])],
OperationType = tostring(customDimensions['prop__OperationType']),
IntegrationCategory = tostring(customDimensions['prop__IntegrationCategory']),
IntegrationSubCategory = tostring(customDimensions['prop__IntegrationSubCategory']),
StartDateTime = todatetime(customDimensions['prop__StartDateTime']),
EndDateTime = todatetime(customDimensions['prop__EndDateTime'])
| project
CorrelationId,
EntityName,
EntityId,
IntegrationStatus,
IntegrationCategory,
IntegrationSubCategory,
OperationType,
StartDateTime,
EndDateTime,
timeTaken = datetime_diff('millisecond', EndDateTime, StartDateTime)
| where IntegrationCategory == 'Student-Reach Pull Integration'
| summarize
RunCount = count(),
SuccessCount = countif(IntegrationStatus == 'Success'),
FailedCount = countif(IntegrationStatus == 'Failed'),
WarningCount = countif(IntegrationStatus == 'Success (with warning)'),
PendingCount = countif(IntegrationStatus == ''),
SuccessRate = (countif(IntegrationStatus in('Success', 'Success (with warning)')) * 100) / count(),
AvgRunTime = avg(timeTaken)
by EntityName
Steps to View the Application Insights for Student Integration Flows
-
Login to https://portal.azure.com.
-
Navigate to the required environment and click Monitor > Logs.
-
On the right side, in the Query editor add the query snippet for the required flow. Use the query snippet from the Query Snippets for Generating Application Insights for the Student Integration Flows section.
-
click Run.
The Application Insight for the Flows will be generated and displayed.
The following images illustrate the Application Insights generated for each type of Integration Flow: