DTR Vantage

Licensing portal ↗Request a demo

Citrix session-performance monitoring

How DTR Vantage watches a Citrix session from both ends: the VDA it runs on and the NetScaler Gateway it came through, on one page, on your own server.

VDA side
per session
CPU, memory, disk, ICA round trip, bandwidth, logon time
Gateway side
AppFlow
sign-ins, launches, ICA sessions, per-minute HDX metrics
History
7 days
session samples; HDX records as long as the syslog retention
Joined by
user
and by the connection's client address and port
Runs on
your server
nothing decoded in a cloud
The direct answer. DTR Vantage measures each Citrix session in two places at once. On the VDA, its PowerShell agent reads every signed-in session's CPU, memory and disk from the process counters, the ICA round trip and bandwidth from the VDA's own ICA Session counters, and the logon duration from the RDS event log. On the NetScaler Gateway, it decodes the HDX Insight AppFlow records the appliance exports: the sign-in, the launch, the ICA connection to the VDA, and a metric record a minute with round trip and bytes each way. Both land in the database on your Vantage server and are shown together under Data analytics, searched by user. No Splunk, no ADM, no cloud tenant.
Session performance across VDAs: tiles, the sessions table and per-user charts
Session performance: the VDA side
HDX Insight data: sign-ins, launches, sessions and ICA sessions with per-minute metrics
HDX Insight data: the gateway side

What the VDA agent collects

MetricWhere it comes fromCadence
Sessions signed in, with user, domain, session id and namequser; the Terminal Services API and the console session as fallbacks; when nobody names the user, the VDA's own ICA counter instance name (console (user)) doesevery agent cycle
CPU, memory, disk per sessionthe per-process counters (two raw samples a second apart, as Task Manager does), grouped by session idevery cycle on a VDA
ICA round trip, bandwidth in and outthe VDA's \ICA Session(*) performance counters, matched to the session by instance nameevery cycle while an ICA connection is up
Logon durationRDS LocalSessionManager events 21 to 22 per session idevery cycle
Logon breakdown (Director's Session Logon Duration)once per logon, from the VDA's own logs: Winlogon subscribers, User Profile Service, Group Policy with every client-side extension, logon scripts, Citrix Profile Management, PrintService, Security (pre-shell), and Citrix's EUEM record for the Workspace app and VDA startup panelsonce, on the cycle after the shell starts; at most a few per cycle
Running applicationsthe process list per session with CPU and IOthe slow cadence (5 min by default)

Set the server's Citrix role to VDA and the agent adds the session collector on its next cycle. The agent runs as a least-privilege service account; where quser refuses it, the page says so and names the session from the other sources instead of showing nobody.

What the gateway sends

RecordAppFlow templateWhat Vantage reads from it
Gateway sign-in292user, client address, gateway, AAA virtual server, policy, the failure code
ICA launch294the published resource, the gateway, the session GUID
Session293the session GUID, user, gateway, the store and store server
ICA connection295the gateway's session GUID, the VDA's address and port, the client's address and port: the join to the launch
ICA session start271the ICA session GUID, client version and host, user, domain, the VDA's name and version
ICA metric, once a minute272round trip in ms, bytes from and to the client, the interval
Connection closed287the client, the VDA, the time, the close code

Configure a NetScaler on the HDX Insight page sets the appliance up in one dialog (collector, action, policy bound at Request and ICA Request on each gateway you tick), every step in the appliance's own words. The template numbers and every field name were established from captures taken on NetScaler 14.1 appliances, not from documentation, and a record that does not read cleanly is counted as unreadable with its bytes shown, never displayed as data. The per-session HDX metrics arrive only once the policy is bound at ICA Request; the page says which templates the appliance has announced but not filled.

How the views connect

What it needs

PieceRequirement
LicenceNetScaler Data Analytics (the HDX side) with NetScaler monitoring; Windows Infrastructure for the VDA side
On the VDAthe Vantage agent (deployed from the dashboard over WinRM), the server's Citrix role set to VDA; the VDA's performance counters registered (the page names the counter sets it saw when the ICA Session object is missing)
On the gatewayAppFlow export to the Vantage server on UDP 4739, set up from the HDX Insight page or by hand; NetScaler 14.1 is what the decoder was written against
On the Vantage serverthe capture listener (on by default) and a firewall rule the installer opens

What it says when it cannot read

Empty and could-not-read are never the same line. On Session performance each server gets one plain sentence: the report's age first (red when the agent is not reporting), then "No ICA connection was up at that report, so the round trip and bandwidth were not read", "The session list could not be read on X: <quser's words>", "The session's user could not be named on X", or the agent build it needs. Administrators get the diagnostics behind a Details link: the counter set's answer, what quser, the Terminal Services API and WMI each said, the counter instances seen. On HDX Insight the note says whether the capture is off, nothing has arrived, records arrived but none in the window, or the writer is failing; the exporters table says which appliance sent what.

What it does not do

Checked against build b429, 2026-09-21. Where a statement is product knowledge rather than a tested capture, it says so.

See it in the live demo ↗VDA and NetScaler diagnostics, side by sideDocumented walkthroughsIn the docs