Extend the platform,
empower your team.
Gather metrics and gain insights into the performance of user sessions over RDP.
ExtensionThe Microsoft Remote Desktop Protocol (RDP) provides remote display and input capabilities over network connections for Windows-based applications running on a server. RDP is designed to support different types of network topologies and multiple LAN protocols. RDP also forms the basis for enterprise level solutions like Azure Virtual Desktop (formerly Windows Virtual Desktop), a desktop and app virtualization service that runs on the cloud.
This extension is designed to run on RDP session hosts, alongside the OneAgent. It leverages Windows Event Logs and Performance Counters to gather details about ongoing RDP sessions, providing insights into sessions performance as well as the health of the session host. The data gathered is represented in Dynatrace as Real User Monitoring (RUM) Sessions and Actions, or Metrics.
To get started, first install the OneAgent on your session hosts. Infrastructure-only mode is sufficient for this extension to function correctly.
The extension requires access to programmatically read Windows Event Logs.
Enabling access for Operational logs is done through the Windows registry. Navigate to the Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog
location using a tool like regedit
and ensure the following keys are present:
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational
Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational
Microsoft-Windows-RemoteDesktopServices-RdpCoreCDV/Operational
⚠️ Note: The name of the key (folder) must be exactly like in the above list. It does not
represent nested folders.
Enabling access for the Security log is done for individual accounts (using SID notation). This is most easily done using the wevtutil
command. Run the following command from a terminal:
wevtutil sl Security "/ca:O:BAG:SYD:(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;S-1-5-20)(A;;0x1;;;S-1-5-11)"
This enables read access to the log for the Authenticated Users (S-1-5-11), Network
Service (S-1-5-20), and Event Log Readers (S-1-5-32-573) accounts.
After adding the extension to your environment, its monitoring configuration offers a few options for configuring its behavior, specifically around Real User Monitoring.
If the extension should create User Sessions and Actions, you must enable Report RUM data
. Once this is enabled, the following options appear:
Application ID
- the ID of a Custom Application for reporting the collected dataDetect Beacon URL
Beacon URL
field.Reduce DEM consumption
- for long running sessions (> 30 min.), this option will reduce the
amount of "Network Performance", "Graphics Performance", and "Session Input Delay" user actions
(normally reported every minute) in order to reduce the amount of licenses utilized (1 session is
consumed every 200 actions).Opting in/out for metrics is done through the extension's feature sets, which are seen on the last step of the configuration process.
Minimum supported OneAgent version: 1.280
Supported RDP clients:
Session Input Delay and Process Input Delay are only supported for Windows Server 2019, or Windows 10 (1809), or later.
After following the setup instructions, you can run the get-eventlog -List
command from a Powershell terminal. The output will list all logs log available for reading in an output similar to this:
Max(K) Retain OverflowAction Entries Log
------ ------ -------------- ------- ---
20,480 0 OverwriteAsNeeded 136 Application
512 7 OverwriteOlder 0 Microsoft-Windows-RemoteDesktopServices-RdpCoreCDV/Operational
512 7 OverwriteOlder 334 Microsoft-Windows-RemoteDesktopServices-RdpCoreTS/Operational
512 7 OverwriteOlder 55 Microsoft-Windows-TerminalServices-LocalSessionManager/Operational
512 7 OverwriteOlder 85 Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational
20,480 0 OverwriteAsNeeded 769 Security
20,480 0 OverwriteAsNeeded 1,026 System
Ensure that all logs are listed in the Log
column, and all of them have a value greater than zero
in the Entries
column.
After creating a Custom Application, open its detail page, click the ...
button, then select Edit
. On the page that opens, navigate to Instrumentation wizard
and find these details listed as Application ID and Beacon URL
While we noticed it happen particularly with Session and Process Input Delay performance counters, it is a known issue that Microsoft Performance Counters may break and require rebuilding.
Following Microsoft's guide, run the following commands as Administrator:
lodctr /R
WINMGMT.EXE /RESYNCPERF
Get-Service -Name "pla" | Restart-Service -Verbose
Get-Service -Name "winmgmt" | Restart-Service -Force -Verbose
Below is a complete list of the feature sets provided in this version. To ensure a good fit for your needs, individual feature sets can be activated and deactivated by your administrator during configuration.
Metric name | Metric key | Description | Unit |
---|---|---|---|
Total sessions | rdp.terminal.total_sessions | The total number of RDP Sessions on the host. This includes both active and inactive sessions. | Count |
Metric name | Metric key | Description | Unit |
---|---|---|---|
Encoding time | rdp.graphics.encoding_time | The average time spent encoding frames. For RDP encoding time should be under 33 milliseconds. | MilliSecond |
Frame quality | rdp.graphics.frame_quality | The quality of the output frame represented as a percentage of the quality of the source frame. | Percent |
Frames skipped (client) | rdp.graphics.frames_skipped_client | The number of frames skipped per second due to insufficient client resources | PerSecond |
Frames skipped (network) | rdp.graphics.frames_skipped_network | The number of frames skipped per second due to insufficient network resources | PerSecond |
Frames skipped (server) | rdp.graphics.frames_skipped_server | The number of frames skipped per second due to insufficient server resources | PerSecond |
Metric name | Metric key | Description | Unit |
---|---|---|---|
Base TCP RTT | rdp.network.base_tcp_rtt | Base TCP round-trip time (RTT) detected in milliseconds | MilliSecond |
Base UDP RTT | rdp.network.base_udp_rtt | Base UDP round-trip time (RTT) detected in milliseconds | MilliSecond |
Current TCP RTT | rdp.network.current_tcp_rtt | Current TCP round-trip time (RTT) detected in milliseconds | MilliSecond |
Current UDP RTT | rdp.network.current_udp_rtt | Current UDP round-trip time (RTT) detected in milliseconds | MilliSecond |
TCP bandwidth | rdp.network.tcp_bandwidth | Current TCP bandwidth detected in bits per second (bps) | BitPerSecond |
UDP bandwidth | rdp.network.udp_bandwidth | Current UDP bandwidth detected in bits per second (bps) | BitPerSecond |
Loss rate | rdp.network.loss_rate | The number of packets lost in transmission, expressed as a percentage of all packets. | Percent |
Retransmission rate | rdp.network.retransmission_rate | The number of packets retransmitted due to loss or damage, expressed as a percentage of all packets | Percent |
Metric name | Metric key | Description | Unit |
---|---|---|---|
Active sessions | rdp.terminal.active_sessions | The number of Active RDP Sessions on the host. Active Sessions are actively being used by users logged onto their Virtual Desktop. | Count |
Inactive sessions | rdp.terminal.inactive_sessions | The number of Inactive RDP Sessions on the host. Inactive Sessions are not currently being used by users but have not been terminated, users still being able to resume. | Count |
Active users | rdp.terminal.active_users | The number of Active Users on the RDP Host. Active Users are actively logged onto their Virutal Desktops. | Count |
Login failures | rdp.terminal.login_failures_count | The number of failed login attempts along with failure details. | Count |
Metric name | Metric key | Description | Unit |
---|---|---|---|
Session input delay | rdp.session_input_delay | The longest time it takes for an input (user click/keypress) to reach the application inside an RDP session. The value is reported per session. | MilliSecond |
Process input delay | rdp.process_input_delay | The longest time it takes for an input (user click/keypress) to reach the application inside an RDP session. The value is reported per process. | MilliSecond |