Application Insights telemetry for Dynamics 365 Finance & Supply Chain takes about 15 minutes to configure, and data starts showing up in the log within 5 to 10 minutes of saving. That's the entire barrier to entry for the same usage data we use to right-size licenses and check which duties people are actually touching, not which duties their role happens to grant.

Everything below comes from a walkthrough we ran end to end on a live F&SC environment: the Azure setup, the two configuration screens inside F&SC itself, the KQL to query the log, and the real cost math against Microsoft's free tier.

The full recording this article is based on.

What telemetry actually captures

Telemetry is a resource inside Application Insights. It's Azure's built-in way of capturing runtime signals for the F&SC application and its services, automatically, without adding logging anywhere by hand. Here's what it captures out of the box:

All user activity gets recorded as data inside this same Application Insights log. That's the part that matters for licensing and security work: it's a queryable record of what people actually did, not a guess based on which security role they were handed.

What it actually costs

Application Insights gives you 5 GB of data ingestion free every month, and F&SC events typically run 2 to 10 KB each, 32 KB at the high end. At a 10 KB average, that free tier works out to roughly 166 MB a day, about 16,600 events a day before anything starts costing money.

F&O active usersEst. events / monthEst. events / user / day
100 100,000-200,000 ~33-67
300 400,000-500,000 ~44-56

Beyond the free tier, pay-as-you-go pricing runs $2.76 per GB. At a 10 KB average event size, that's roughly 100,000 events per GB, or about $0.0000276 per event, which works out to $2.76 per 100,000 events. Rates vary slightly by Azure region, so check the current rate for yours before you lock in a cost estimate.

ℹ If you read one line

Most tenants with a few hundred active F&O users or fewer stay entirely inside the free 5 GB a month tier. Telemetry for license and activity analysis often ends up costing nothing at all.

Data retention

Application Insights retains data for 90 days by default, included in the ingestion price, so there's no extra charge for standard retention. You can extend that up to 730 days, two years, but anything held past the 90-day window costs extra per GB per month. If you need to consume telemetry continuously instead of querying it in batches, Fabric's Eventstream can pull it directly from the underlying Event Hub.

Create the Application Insights resource

Start in the Azure portal. Search for Application Insights, and either open an existing resource or create a new one.

Azure portal search results for 'application insights', showing the Application Insights service and an existing D365_Telemetry resource under Recent.
Azure portal. Search for "application insights" to find the service and any existing resources.
Application Insights resource browse view listing an existing D365_Telemetry resource in the D365FO_Telemetry resource group, East US region.
The Application Insights browse view. Create starts a new resource, and existing ones are listed below.

On the create form, select a subscription and resource group, give the resource a name, and pick a region. Leave OTLP support off unless you specifically need it, and either reuse an existing Log Analytics Workspace or create a new one. Provisioning takes about 2 minutes.

Create Application Insights form with fields for subscription, resource group, instance name, region, OTLP support toggle, and Log Analytics Workspace.
The create form: subscription, resource group, name, region, and a Log Analytics Workspace.

Capture three parameters

Once the resource exists, its Overview page shows two values you'll need: the Instrumentation Key and the Connection String. Both have a copy-to-clipboard button next to them.

Application Insights resource Overview page with the Instrumentation Key and Connection String fields visible (values redacted).
Resource Overview: Instrumentation Key and Connection String, both with a copy button.

The third parameter, the Environment ID, comes from Lifecycle Services (LCS). Open the project the environment belongs to, go to environment details, and copy the Environment ID shown there.

Lifecycle Services environment details page showing the Environment ID field (redacted) alongside deployment and version information.
LCS environment details. The Environment ID is what F&SC uses to identify itself to Application Insights.
! Treat these as secrets

The instrumentation key and connection string aren't user credentials, but they can be used to write telemetry into your Application Insights resource from anywhere. Don't paste them into tickets, chat, or screenshots that leave your organization. Blur or crop them the way we did above.

Turn on the right parameters in F&SC

Inside F&SC, the configuration screen is under System administration → Setup → Monitoring and telemetry parameters.

D365 Finance and Operations System administration Setup menu with the Monitoring and telemetry parameters link visible in the right column.
System administration → Setup → Monitoring and telemetry parameters.

The Configure tab lists every event type F&SC can send. Turning more on isn't free, since each additional flag burns through free-tier capacity faster, so we only enable what's needed for user-activity and license analysis:

Everything else stays off unless a specific investigation needs it: X++ exceptions, the Batch* fields, DMFJob* fields, DMF Errors.

Monitoring settings Configure tab with five toggles switched on: Custom metrics, Form runs, User sessions, Custom traces, and Warehouse events; all other toggles off.
Configure tab. Five toggles on: Custom metrics, Form runs, User sessions, Custom traces, Warehouse events.

Map environments and register the key

Two more tabs on the same page. Environments maps each environment ID to a type, Production, Test, or Development, so you can tell later which environment a given telemetry row came from. Test covers UAT, sandbox, and any tier-2-plus environment. Development covers tier-1.

Monitoring settings Environments tab, mapping an environment ID to an environment type with Development, Test, and Production options in a dropdown.
Environments tab. Map each environment ID to Development, Test, or Production.

Application Insights Registry is where the instrumentation key and connection string actually get pasted in, mapped to the same environment type. Microsoft's own description of this screen is worth knowing verbatim: if a database is copied from one environment to another, the mode is auto-detected and fails over to the new target endpoint; if an environment isn't mapped at all, it defaults to DEV mode.

Application Insights Registry tab mapping an environment mode to an instrumentation key and connection string (values redacted).
Application Insights Registry. Instrumentation key and connection string, mapped by environment mode.

Save, and data starts registering in the Application Insights log within 2 to 5 minutes.

Query the log

Back in the Azure portal, open the Application Insights resource, expand Monitoring → Logs, and switch the query editor from Simple mode to KQL mode.

Application Insights Logs query editor with the mode dropdown open, showing Simple mode and KQL mode options, and a query history entry returning 280,095 results.
Logs, then switch to KQL mode. Query history shows a prior run returning 280,095 rows.

Two scripts cover most user-activity analysis. If you're only pulling from a single environment, the short version is enough:

pageViews
| project timestamp, name, user_Id, duration
| sort by timestamp desc

If you're comparing activity across two or more environments, extend it to carry the environment ID through:

pageViews
| extend environmentId = tostring(customDimensions['environmentId'])
| project timestamp, name, user_Id, duration, environmentId
| sort by timestamp desc

Set the time range and export

Before running the query, set the time range. Presets cover anywhere from the last 30 minutes up to the last 7 days, or use a custom from/to range for anything longer.

Time range dropdown in the Logs query editor listing preset options from Last 30 minutes to Last 7 days, plus Custom.
Time range presets, plus a Custom option for an arbitrary from/to date range.

A single query run is capped at 500,000 rows, and the underlying data only goes back roughly 90 days, the same retention window from step 03. Plan a custom range accordingly if you're pulling a full quarter.

Show results dialog with row-limit options: 1,000, 5,000, 15,000, Max. limit (selected), and Custom.
Row limit options. Max. limit is the 500,000-row ceiling for a single query.

Once the results come back, export from the Share menu. Use Export to CSV (displayed columns) rather than "all columns": it keeps the export scoped to exactly the fields your query selected, which is what you want for a clean analysis file.

Share menu in the Logs query editor with 'Export to CSV (displayed columns)' highlighted among other export options.
Share → Export to CSV (displayed columns). A clean, analysis-ready export.
✓ Bottom line

Fifteen minutes of Azure configuration is what separates a licensing or security review that estimates usage from one that measures it. Every form, session, and duty becomes a queryable row instead of an assumption.

This is the same usage signal behind the security-model work we describe in how we build an optimized security model from telemetry rather than job titles, and it pairs directly with the overbuying patterns covered in D365 F&SC Licensing 101: telemetry tells you what a user actually touches, and the licensing guide tells you what tier that requires. It's also the second data source behind identifying inactive users, the overlicensing fix that saves the most of any single strategy.