Vantage
Licensing portal ↗Free trial

Citrix session-performance monitoring

How 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. 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 page shows, in short

Session performance

3 VDAs · 14 sessions · 11 users · from the agents' last reports and the gateways' HDX records

Sessions
14
across 3 VDAs · 9 active
Users
11
signed in now
ICA round trip
48 ms
average across the sessions
Worst round trip
212 ms
dfokas on VDA02 · over the 150 ms line
Logons analysed
37
over 7 days, once each on the VDA
Average logon
24 s
the slowest 1 min 35 s
Sessions now
UserVDAStateCPUMemoryDiskRound tripInOut
kmillerVDA01Active12 %2.1 GB40 kB/s61 ms12 kb/s810 kb/s
a.smithVDA01Active4 %1.4 GB8 kB/s38 ms9 kb/s402 kb/s
dfokasVDA02Active31 %3.8 GB1.2 MB/s212 ms48 kb/s2.9 Mb/s
m.garciaVDA03Active2 %0.9 GB2 kB/s44 ms5 kb/s190 kb/s
j.doeVDA01Disconnected0 %0.6 GB0not read
r.patelVDA03Active9 %1.7 GB22 kB/s52 ms11 kb/s640 kb/s

Each row picks the user for the charts: sessions, ICA round trip against the 150 ms line, CPU, memory, bandwidth, 1 hour to 7 days.

Session logon duration, everyone's average per phase
Citrix Profile Management3.1 s · max 9 s
Profile load5.6 s · max 12 s
Group Policy12.3 s · max 70.2 s
Printers0.7 s · max 2.1 s
Pre-shell (userinit)2.4 s · max 6.8 s

Director's chart, from the VDA's own event logs once per logon: profile, Group Policy with every extension, printers, pre-shell; Citrix's EUEM record for the Workspace app and VDA startup panels. The amber mark is the slowest single logon.

The live demo runs the real page over synthetic data — no customer's estate.

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 b547, 2026-09-30. 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