Boosting Observability with Tracked Properties
Centralized telemetry collection through Application Insights offers deep insights into your distributed application landscape, helping you monitor, diagnose, and optimize your systems. However, to truly unlock the full potential of Application Insights, leveraging tracked properties in Azure Logic Apps is key.
Tracked properties allow you to enrich your telemetry logs by attaching key identifiers—such as correlation IDs, message IDs, usernames, or order numbers. This not only enhances observability but also makes it significantly easier to filter, trace, and troubleshoot specific transactions across your applications.
In this blog, we’ll dive into how to configure tracked properties in Azure Logic Apps and how these properties are reflected in Application Insights. This hands-on guide will walk you through practical steps to improve your monitoring setup, ensuring you get the most out of your telemetry data.
Note that there are some limitations applicable for tracked properties, such as property length, which you can find here.
Understanding Tracked Properties for Logic Apps
For those familiar with BizTalk, think of tracked properties in Azure Logic Apps as a modern take on Message Properties. However, there’s a twist—they are deeply integrated with Azure’s ecosystem.
By assigning properties to specific actions or steps within a logic app, you can capture richer data that helps in debugging and monitoring. This feature, also used in .NET integrations with Application Insights, and is key for collecting diagnostics.
Tracked Properties let you log additional data (input or output) from an action directly into Application Insights. This data becomes accessible for querying in Azure Monitor using KQL (Kusto Query Language) or other tools, helping teams with better activity monitoring and troubleshooting.
Setting Up Tracked Properties in Azure Logic Apps
To configure custom-tracked properties in Azure Logic Apps, you can reference inputs from the trigger or the current shape in your workflow. For example, you might want to track a specific Order ID or a User ID to trace transactions more effectively.
Here’s a basic setup example:

| Key | Value |
|---|---|
| OrderId | @{triggerOutputs()?[‘body’]?[‘OrderId’]} |
| ShippingCode | @{body(‘HTTP_Create_DHL_Shipping’)?[‘BarCode’]} |
Integrating Tracked Properties with Application Insights
For enhanced telemetry, ensure that your Logic Apps are connected to Application Insights and are using the V2 schema for telemetry. This schema offers improved logging and tracking capabilities. Update your host.json file with the following code to enable the V2 schema: Learn more
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle.Workflows",
"version": "[1, 2.00]"
},
"extensions": {
"workflow": {
"Settings": {
"Runtime.ApplicationInsightTelemetryVersion": "v2"
}
}
}
}View Logic Apps Tracked Properties
Tracked properties are logged under the corresponding action in Application Insights.
For example, if you have configured tracked properties for an action named “HTTP Create DHL Shipping,” they will appear under the “custom properties” section in the telemetry data. This is particularly useful for identifying the cause of failures, as tracked properties are also logged when actions fail.

You can filter transactions by providing a string value, such as an Order ID, to search across all logged telemetry. This feature allows for quick identification and analysis of specific transactions or failures.
Now this is especially useful for any kind of failures, as we see in the below printscreen tracked properties are also logged when an action fails.

Filter for Tracked Property Value
Within all transactions, one can provide a string to search. In the image below I’m providing my custom OrderId, which searches among all transactions.

For the failed transactions, there is a similar functionality available, select tracked properties to filter and provide a contain value.

Useful KQL Queries for Tracked Properties
When you log tracked properties in Azure Logic Apps, they are stored in the customDimensions section. Here are some practical KQL queries to extract and analyze this data.
Wild Card KQL Search
Although it’s not the most performance-efficient method, a wildcard search can help you quickly find specific data.
requests
| where * has "OrderId\":\"2234234324"
| order by timestamp desc
Extend Tracked Properties
A better approach involves parsing the JSON format of tracked properties and extending them for reuse.
requests
| extend trackedprops = parse_json(tostring(customDimensions.trackedProperties))
Project Specific Tracked Properties
Use the extend clause to add specific tracked properties as columns in your query results.
requests
| extend trackedprops = parse_json(tostring(customDimensions.trackedProperties))
| extend OrderId = trackedprops.OrderId, ShippingBarcode = trackedprops.ShippingBarcode
| where trackedprops.OrderId == 2234234324
Project all Tracked Properties Dynamically
Tired of manually listing each tracked property? The bag_unpack function dynamically creates columns for each tracked property, simplifying your queries.
Tired of repeating each tracked property again and again in the extend query? With bag_unpack (one can dynamically create columns for each tracked property.
requests
| extend trackedprops = parse_json(tostring(customDimensions.trackedProperties))
| evaluate bag_unpack(trackedprops)
| where OrderId == 2234234324
