Enquête sur un ICA RTT un peu trop parfait… pour être honnête.
Tout commence par une plainte assez classique. Un utilisateur explique que sa session Citrix fonctionne correctement. Les applications répondent normalement, la navigation reste fluide et aucune lenteur flagrante n’est constatée.
Pourtant, dans Director, le verdict semble sans appel : ICA RTT : 650 ms.
À ce niveau, la session devrait donner l’impression d’être utilisée depuis une connexion satellite. Le curseur devrait hésiter, les fenêtres répondre avec retard et chaque clic devenir une épreuve de patience. Mais sur le terrain, rien de tout cela.
Alors, qui croire ? L’utilisateur ? Le réseau ? Le VDA ? Ou Director ?
Dans cette enquête, nous allons voir qu’une valeur ICA RTT affichée dans Director peut être trompeuse dans certaines versions de Citrix Virtual Apps and Desktops 2507 LTSR. Nous utiliserons ensuite l’API OData du service Monitor pour interroger directement les données et confronter le principal témoin à la réalité des faits.
Scène de crime : un ICA RTT anormalement élevé
Director est généralement le premier outil utilisé lorsqu’un utilisateur signale une session lente. Dans la fiche de la session, il permet notamment de consulter la durée d’ouverture de session, l’utilisation des ressources du VDA, la latence réseau, le protocole TCP ou EDT, les informations relatives au client et l’ICA RTT.
L’ICA RTT, pour ICA Round Trip Time, mesure le temps entre une action réalisée par l’utilisateur et l’affichage de la réponse correspondante sur son poste.
- L’utilisateur clique dans une application.
- L’action est transmise à la session Citrix.
- L’application et le VDA traitent la demande.
- Le résultat graphique revient jusqu’au poste.
- L’écran de l’utilisateur est mis à jour.
L’ICA RTT représente donc la réactivité globale ressentie dans la session. Selon Citrix, cette mesure inclut la latence ICA, le délai introduit par le poste utilisateur et le temps de traitement côté hôte. La Network Latency, de son côté, cherche davantage à isoler le transport réseau.
Depuis CVAD 2507, Director utilise le compteur Thinwire RTT pour représenter l’ICA RTT. Les versions antérieures utilisaient l’EUEM RTT. La définition de la Network Latency a également évolué dans les versions récentes.
L’ICA RTT et la Network Latency sont deux mesures différentes, produites par des compteurs et des mécanismes de collecte distincts.
Il ne faut donc pas appliquer une formule mathématique stricte entre les deux valeurs. Les compteurs peuvent être collectés à des instants différents et selon des méthodes différentes.
Définition officielle Citrix des métriques de session
Le suspect : Director 2507 CU1
En examinant les correctifs de Citrix Virtual Apps and Desktops 2507 LTSR CU2, publié le 18 août 2026, un élément attire immédiatement l’attention.
Citrix documente le problème suivant sous la référence CVADHELP-28599 : lorsque la latence réseau dépasse l’ICA RTT réel, Director peut afficher une valeur ICA RTT artificiellement élevée. La valeur présentée dans le tableau de bord peut alors être différente de celle enregistrée dans la base Monitor et exposée par l’API OData.
Director peut ainsi montrer une session comme fortement dégradée alors que la mesure ICA RTT réellement enregistrée par le service Monitor est beaucoup plus faible.
Le problème ne vient donc pas nécessairement du réseau, du NetScaler, du poste utilisateur, du VDA ou de l’application publiée. Il peut s’agir d’une erreur de traitement ou de présentation de la métrique dans Director.
Le correctif est intégré à CVAD 2507 LTSR CU2.
Correctifs officiels de CVAD 2507 LTSR CU2
Peut-on encore croire ce que l’on voit dans Director ?
Director n’est pas devenu inutilisable pour autant. Il reste un excellent outil pour identifier rapidement une session, examiner une ouverture de session, vérifier l’état du VDA, visualiser les échecs de connexion et observer les tendances de performance.
Une valeur isolée n’est pas une preuve. C’est un indice.
Lorsqu’un ICA RTT paraît incompatible avec le ressenti de l’utilisateur ou avec les autres métriques, il faut recouper l’information. C’est à ce moment qu’entre en scène notre témoin technique : l’API OData du service Citrix Monitor.
Interroger directement le service Monitor avec OData
Dans un déploiement CVAD on-premises, le service Monitor expose une API OData v4 depuis les Delivery Controllers.
http://<DDC>/Citrix/Monitor/OData/v4/Data
Par défaut, l’API OData Monitor est généralement exposée en HTTP. L’utilisation de HTTPS ne fonctionne que si TLS a été explicitement configuré pour le service Monitor. La simple présence d’un certificat ou d’un binding HTTPS sur le serveur ne suffit pas : sans cette configuration supplémentaire, une requête sur le port 443 peut retourner une erreur HTTP 404.
Le serveur ciblé doit héberger le Citrix Monitor Service. Dans une infrastructure on-premises classique, il s’agit généralement d’un Delivery Controller et non d’un serveur Director séparé.
L’authentification d’un environnement on-premises s’effectue avec les informations d’identification Windows. Le compte utilisé doit disposer des droits Citrix nécessaires pour consulter les données Monitor.
Documentation Citrix sur les méthodes d’accès OData
Première audition : vérifier que l’API répond
$MonitorHost = "ddc01.domaine.local"
Invoke-RestMethod `
-Uri "http://$MonitorHost/Citrix/Monitor/OData/v4/Data/Machines?`$top=1" `
-UseDefaultCredentials
Si tout fonctionne, l’API retourne les principales collections disponibles, par exemple Sessions, SessionMetrics, Machines, Connections et Users.
La collection qui nous intéresse est SessionMetrics. Elle contient les mesures ICA RTT collectées pour les sessions. La propriété utilisée est IcaRttMS et la valeur est exprimée en millisecondes.
Une erreur 401 Unauthorized ou 403 Forbidden doit conduire à vérifier le compte Windows utilisé, les droits d’administration déléguée Citrix, l’authentification IIS et l’accès réseau au Delivery Controller.
Identifier l’utilisateur et son ICA RTT
###############################################################################
# Configuration
###############################################################################
$MonitorHost = "ddc.domain.local"
$BaseUri = "http://$MonitorHost/Citrix/Monitor/OData/v4/Data"
# Période à analyser
$Depuis = (Get-Date).AddHours(-4).ToUniversalTime()
$DepuisOData = $Depuis.ToString(
"yyyy-MM-ddTHH:mm:ss.fffZ",
[System.Globalization.CultureInfo]::InvariantCulture
)
###############################################################################
# Requête OData
###############################################################################
$Select = '$select=CollectedDate,IcaRttMS'
$Expand = @(
'$expand=Session('
'$select=SessionKey,StartDate,SessionType;'
'$expand='
'User($select=FullName,Upn,UserName,Domain),'
'Machine($select=Name),'
'CurrentConnection('
'$select=ClientName,ClientAddress,ClientPlatform,Protocol'
')'
')'
) -join ''
$Filter = '$filter=CollectedDate ge {0} and IcaRttMS gt 0' -f $DepuisOData
$OrderBy = '$orderby=CollectedDate asc'
$Top = '$top=1000'
$Query = @(
$Select
$Expand
$Filter
$OrderBy
$Top
) -join '&'
$NextUri = "$BaseUri/SessionMetrics?$Query"
###############################################################################
# Récupération des données avec pagination
###############################################################################
$Metrics = [System.Collections.Generic.List[object]]::new()
while ($NextUri) {
$Response = Invoke-RestMethod `
-Uri $NextUri `
-UseDefaultCredentials `
-Method Get `
-Headers @{
Accept = "application/json"
}
foreach ($Item in $Response.value) {
$Metrics.Add($Item)
}
$NextUri = $Response.'@odata.nextLink'
# Gestion éventuelle d'un lien de pagination relatif
if ($NextUri -and $NextUri -notmatch '^https?://') {
$NextUri = [System.Uri]::new(
[System.Uri]$BaseUri,
$NextUri
).AbsoluteUri
}
}
###############################################################################
# Construction du rapport
###############################################################################
$Rapport = foreach ($Metric in $Metrics) {
$Session = $Metric.Session
$User = $Session.User
$Machine = $Session.Machine
$Connection = $Session.CurrentConnection
# Nom affiché avec plusieurs solutions de repli
if (-not [string]::IsNullOrWhiteSpace($User.FullName)) {
$Utilisateur = $User.FullName
}
elseif (
-not [string]::IsNullOrWhiteSpace($User.Domain) -and
-not [string]::IsNullOrWhiteSpace($User.UserName)
) {
$Utilisateur = "$($User.Domain)\$($User.UserName)"
}
else {
$Utilisateur = $User.UserName
}
[PSCustomObject]@{
Date = ([DateTimeOffset]$Metric.CollectedDate).LocalDateTime
Utilisateur = $Utilisateur
UPN = $User.Upn
IcaRttMS = $Metric.IcaRttMS
VDA = $Machine.Name
Client = $Connection.ClientName
IPClient = $Connection.ClientAddress
Protocole = $Connection.Protocol
SessionKey = $Session.SessionKey
}
}
$Rapport |
Sort-Object Date |
Format-Table -AutoSize
La requête récupère les mesures des quatre dernières heures et associe chaque valeur à l’utilisateur, au VDA, au poste client, au protocole et à la clé de session. Les dates UTC sont converties en heure locale pour faciliter la comparaison avec Director.
Exemples OData officiels pour l’ICA RTT
Exemple de retour:

La confrontation : Director face à OData
Nous disposons maintenant de deux témoignages. Director affiche par exemple un ICA RTT de 680 ms pour une session, alors que l’API OData retourne environ 115 ms pour la même période.
| Source | Heure locale | ICA RTT |
|---|---|---|
| Director | 10 h 30 | 680 ms |
| OData SessionMetrics | 10 h 30 | 115 ms |
| OData SessionMetrics | 10 h 35 | 108 ms |
Si les échantillons OData restent autour de 100 à 120 ms alors que Director affiche durablement 680 ms, nous disposons d’une divergence caractéristique du problème CVADHELP-28599.
Avant de conclure, quatre vérifications s’imposent :
- La
SessionKeydoit correspondre à la session examinée. - Le VDA et l’utilisateur doivent être identiques.
- Les heures doivent être comparées après conversion UTC/heure locale.
- Il faut comparer une même fenêtre temporelle, et non une valeur instantanée avec une moyenne historique.
Director peut présenter une valeur agrégée tandis que l’API retourne plusieurs échantillons bruts.
Et la latence réseau dans tout ça ?
Si l’ICA RTT est réellement élevé dans OData, l’enquête doit continuer. Il faut alors confronter cette mesure aux autres indices disponibles.
| Observation | Piste principale |
|---|---|
| ICA RTT élevé et Network Latency élevée | Réseau, Wi-Fi, VPN, WAN, pertes ou distance |
| ICA RTT élevé et Network Latency normale | VDA, application, CPU, mémoire, stockage ou endpoint |
| ICA RTT élevé pour un seul utilisateur | Poste client, réseau local, session ou application |
| ICA RTT élevé pour tous les utilisateurs d’un VDA | Ressources ou problème local au VDA |
| ICA RTT élevé pour plusieurs VDA d’un site | Réseau, Gateway, infrastructure ou datacenter |
| Director élevé mais OData normal | Anomalie d’affichage ou d’agrégation Director |
Dans un environnement équipé de NetScaler Console ou d’un outil de supervision complémentaire, il est également possible d’examiner la latence côté client, la latence côté serveur, les retransmissions, les pertes de paquets, le transport TCP ou EDT et l’utilisation des ressources du VDA.
Le verdict
Alors, peut-on encore faire confiance à Director ? Oui, mais pas aveuglément.
Director reste un outil central pour le support et l’exploitation d’une infrastructure Citrix. Il offre une vue synthétique extrêmement utile et permet d’accélérer les premières étapes d’un diagnostic.
Mais comme tout bon enquêteur, il peut parfois tirer une conclusion trop rapide à partir d’un indice mal interprété.
Dans les environnements CVAD 2507 LTSR CU1, une valeur ICA RTT anormalement élevée doit être examinée avec prudence, particulièrement lorsqu’elle ne correspond ni au ressenti de l’utilisateur ni aux autres métriques de la session.
Le passage à CVAD 2507 LTSR CU2 corrige officiellement cette anomalie. En attendant la mise à jour, l’API OData constitue une excellente méthode pour interroger directement les données du service Monitor et vérifier si Director raconte toute la vérité.
Faites confiance à Director, mais lorsque les chiffres deviennent suspects, demandez à OData de vérifier son alibi.



