Article: EdgeSight for NetScaler 2.1 – Brand new Dashboard | Citrix Blogs

UPDATE2: I’ve just learned that the beta build of EdgeSight for NetScaler 2.1 will be updated this week with some fixes.

UPDATE: One of my blog readers had an issue getting the GeoData to display correctly. Abhilash Verma who wrote the Citrix blog post below provided the Citrix EdgeSight for NetScaler Administrator’s Guide as a reference.  The Geo Data Configuration starts on page 35.

EdgeSight for NetScaler 2.1 – Brand new Dashboard | Citrix Blogs.

EdgeSight for NetScaler 2.1 is running under beta and everyone is excited about the brand new Dashboard which changes the whole view of how you look at the Applications deployed in your NetScaler infrastructure.

Here is a snapshot of the Dashboard:

The whole Dashboard is divided into 2 parts:

Application View

Provides consolidate view of top 5 Applications based on:

  • Best Response Time
  • Worst Response Time
  • Best Page Load Time

All this can be viewed in terms of Chart or tabular format. Following is an example of Best response time in Chart and Table format.

Client Details

Provides detailed view of Client side stats:

  • Client Browser Stats
  • Client Operating System Stats

Here is how the distribution looks like:

In today’s world Application visibility is not just limited to local or single location. Response time for clients can vary a lot for location to location based on WAN latency and other factors introduced. EdgeSight supports client specific response time data visibility based on Geo location as well.

View of geographically distributed Users and Application:

Response time for based on Geo location:

This Dashboard would make administrators life much easy with respect to how Applications are performing and how to monitor end user response time. With the level of details on client OS, device and browser one can figure out the usage structure very well.

Citrix Synergy: Five (very cool) things you didn’t know were possible with NetScaler

SYN211: Wednesday May 25th 2011

Presented by Ajay Soni, Anil Shetty, Greg Smith, Rajiv Mirani, and Vijay Ratnam


Citrix’s acquisition of NetScaler was just the beginning.  With Mark Templeton’s keynote the reach of the NetScaler brand has lengthened to include NetScaler Cloud Gateway and NetScaler Could Bridge.  Meanwhile the NetScaler engineering team has not been idle.  I will briefly cover the talking points from this session.  The following features are/will be available on n-core NetScalers running firmware 9.3 (or later).

  1. SR-IOV
  2. Network Analytics
  3. NetScaler Director
  4. NetScaler Pools
  5. DataStream

SR-IOV – Single Route IO Virtualization

Customers have asked that the NetScaler be a multi-tenant device with the ability host multiple applications with CPU and memory isolation.  So the NetScaler and XenServer engineers threw their 2 products into a locked room with some romantic music and let nature take its course.  The result is NetScaler SDX.  This is a hardware appliance running a number of NetScaler VPX’s on top of the XenServer hypervisor.  The two teams discovered that when you virtualize the NetScaler to provide this functionality, you can reduce performance. In order to solve this issue the NetScaler team has implemented SR-IOV (Single Route IO Virtualization).

This industry-standard technology allows the virtualization of the NIC into multiple-virtual instances and provides them to NetScaler VPX instances.  They are able to bypass the hypervisor and avoid the reduction in performance as seen below


Each instance gets full network isolation for layer 3 and above and layer 2 isolation via VLAN tagging (of each instance on the NetScaler SDX).


In order to configure all this, the NetScaler team has provided a Service VM.


All the typical VM management operations are available except snapshots.  This is coming as soon as the NetScaler team determines how to snapshot an instance and not have an IP conflict.  Also, the instances are discreet within their SDX appliance.  You cannot failover a VPX instance from one SDX machine to another, but later I will cover NetScaler pools which can solve this issue.

Network Analytics

The next feature that is in development is an analytics engine.  This will allow for better troubleshooting, capacity planning, quantifying of the user experience, application monitoring and business intelligence, basically providing the features that EdgeSight provides in XenApp.

The following features not only establish the NetScaler as superior Application Delivery Controller but are also the building blocks for an analytic device.


During the presentation, several use cases were presented.  One showed the impact of a traffic spike in the analytic engine and its resolution and the other showed how to create rules to auto cache “busy” objects.  The following screenshot lists the expressions that are used to create these rules (image inverted for visibility):


Other use cases included:

Application capacity planning


Application Monitoring


and Business Intelligence


NetScaler Director

NetScaler supports several taps into the data it collects as demonstrated by the following graphic:


Unfortunately, the raw data collected is hard to interpret:


For this use case, they combined Syslog data with Google Maps to visualize users connecting to the resources on a world map.


This example was very demonstrative of the data that NetScaler can collect and merge with other data sets.  However, there was scant detail on how NetScaler Director will look in the future or what functionality it will have.

NetScaler Pools

The next development is the concept of a NetScaler Pool.  This will allow you to create pools of NetScalers (VPX) that will dynamically failover and recover.  Typically most deployments will have either an active-passive or active-active HA NetScaler pair.

Using VRRP (Virtual Redundant Routing Protocol), VIP’s are given different priorities depending on different NetScalers.


Expanding on this concept we can create an N+1 HA configuration.  Essentially this leaves one NetScaler that contains all the VIPs in a lower priority as a hot spare.


NetScalers support automatic failover and recovery and when used with a NetScaler SDX, it creates a very robust HA environment, but there are some issues to note:

  • No Automatic NetScaler Configuration Synchronization
  • Session Consistency is supported only in some protocols (these were not listed)
  • Each NetScaler has to independently monitor its own services
  • Requires NetScaler nCore build


Frankly, this feature is the most significant one presented and it is now available.  DataStream allows you to leverage the power of the NetScaler to accelerate your database tier.

For most organizations databases have the following challenges:


By utilizing DataStream in your Database Tier, you gain the following benefits:


NetScaler has been a proven platform to accelerate web sites, but leveraging it to accelerate database transactions is huge.  Inserting the NetScaler in front of your Web/App servers allows you to support millions of client-side connections, faster connection establishment to the backend databases, SQL proxy support for MySQL and MSSQL, and granular SQL policy control.  At the same time the NetScaler provides fewer multiplexed server-side connections to the database servers, longer lived server-side connections, and native SQL request/response protocol visibility.

The demo of this technology is summarized in the following screenshots:

First the demo query without the NetScaler.


Then a SQL Virtual Server was created on the NetScaler.


Keep in mind that in this demo the same query was used over and over, but this shows how the caching and acceleration in the NetScaler can improve transactions with the database tier.  Also note that a single MPX was used  and you can imagine if this technology is implemented on the NetScaler SDX.


There were several other sessions that covered various NetScaler technologies.  I urge you to view the Synergy sessions that are now available on the Citrix site.

SYN211: Five (very cool) things you didn’t know were possible with NetScaler

Scaling the Data Tier with Citrix NetScaler DataStream Technology

Synergy Live!


EdgeSight: Reporting on a user’s bad experience

Intro (Soapbox)

I have stated it before, EdgeSight is one of your most powerful tools you have in your XenApp environment.  Tons of information is gathered and stored in the database that never sees the light of day because it’s difficult to get the information out with the built-in reports.  If you are a CIO/IT Manager/Team Lead you have to either develop the DBA/SQL skills of one of your XenApp administrators or form a workgroup with the DBA team to really leverage EdgeSight to benefit your customers.

In this post, we will create a query that summaries a user’s bad login experience and then use SSRS (SQL Server Reporting Services) to dill down to a more detailed report of just one user.

NOTE: Please review my series on Making Citrix Stats Work for You to get familiar with creating custom SQL queries and SSRS reports from those queries. Jump to [part 1] [part 2] [part 3] [part 4] [part 5] [part 6].

EdgeSight Under the Hood

My colleague, John Smith, has a terrific blog where he pulls back the veil on EdgeSight called EdgeSight Under the Hood.  After reading this post, I put together a more detailed query on my user’s session startup experience.

User’s Bad Login Experience Query

SELECT [user] as 'Userid',
CAST(session_startup_server/1000.0 AS decimal(8,2))as 'Session Startup (sec)',
CAST(profile_load_server_duration/1000.0 as decimal(8,2)) as 'Profile Load (sec)',
CAST(credentials_obtention_server_duration/1000.0 as decimal(8,2)) as 'Obtain Creds (sec)',
CAST(login_script_execution_server_duration/1000.0 as decimal(8,2)) as 'Logon Script (sec)',
client_address as 'Client IP',
client_version as 'ICA Client Ver',
machine_name as 'Citrix Server',
CONVERT(varchar(30),DATEADD(hh,-5,start_time),0) as 'Session Start Time'
FROM vw_ctrx_archive_server_start_perf
WHERE DATEADD(hh,-5,start_time) > dateadd(dd,-1,getdate()) and DATEADD(hh,-5,start_time) < getdate()
GROUP BY session_startup_server, profile_load_server_duration, credentials_obtention_server_duration, login_script_execution_server_duration, client_address, client_version, machine_name, start_time, [user] having session_startup_server/1000.0 > 60
ORDER BY 'Session Startup (sec)' desc, 'Userid'

As I stated above, EdgeSight records a lot of data and thankfully, Citrix combines most of the information in the form of views in the EdgeSight database.  The above query takes information from the VW_CTRX_ARCHIVE_SERVER_START_PERF view which contains user session startup information.  Specifically we are looking at the following data points (from the EdgeSight v5.3 help):

This is the high level server connection startup metric. This includes the time spent on the Presentation Server performing the entire start-up operation. In the event of an application starting in a shared session, this metric is expected to be much smaller, as starting a completely new session involves potentially high cost tasks such as profile loading and login script execution.
The time spent on the server loading the users’ profile.
The time taken for the server to obtain the user credentials. This is only likely to be a significant amount of time if manual login is being used and the server-side credentials dialog is displayed (or if a legal notice is displayed before login commences).
The time spent on the server running the users’ login script(s).
Address of the client associated with the session.
Version of the client associated with the session.
The time when the session creation started

Here’s some example data:

Userid Session Startup (sec) Profile Load (sec) Obtain Creds (sec) Login Script (sec) Client IP ICA Client Ver Citrix Server Session Start Time
user1 1236.25 23.31 1.03 1209.13 10.08.55362 CITRIX1 Mar 4 2011 4:48AM
user2 1222.83 14.17 1.09 1204.50 CITRIX2 Mar 4 2011 2:45AM

First of all, the query is getting the ‘Session Start Time’ offset for Eastern Standard Daylight Savings Time (-5) with these 2 statements:

CONVERT(varchar(30),DATEADD(hh,-5,start_time),0) as 'Session Start Time'


WHERE DATEADD(hh,-5,start_time) > dateadd(dd,-1,getdate()) and DATEADD(hh,-5,start_time) < getdate()

The WHERE statement is set to give me all sessions that started from the last EdgeSight worker upload to 24 hours ago.  Also, EdgeSight returns times in milliseconds, so dividing the results by 1000 and ensuring we only display 2 decimal places gives us the seconds to perform each action.

Everyday you visit this SSRS report, you will get a list of users who have had terrible (as recorded by EdgeSight) login experiences, but how do you know if this was a fluke or due to the user connecting from an unusual location?

Drill baby drill!

One of the neat things available in SSRS is the ability to click on a result and use that data to generate a different report.  In other words, you can drill-down to a more detailed report.  This report should show the login history of the user.  That way we can tell if their bad experience is typical or was just a one-time problem.  We will modify the above query to display the same information, but we’ll remove the time restrictions from the WHERE clause to get more data.  We’re also dropping Userid from the table, because this query is about a specific user who we already know.

User’s Bad Login Experience Detail Query

SELECT CONVERT(varchar(30),DATEADD(hh,-5,start_time),0) as 'Session Start Time',
CAST(session_startup_server/1000.0 AS decimal(8,2))as 'Session Startup (sec)',
CAST(profile_load_server_duration/1000.0 as decimal(8,2)) as 'Profile Load (sec)',
CAST(credentials_obtention_server_duration/1000.0 as decimal(8,2)) as 'Obtain Creds (sec)',
CAST(login_script_execution_server_duration/1000.0 as decimal(8,2)) as 'Logon Script (sec)',
client_address as 'Client IP',
client_version as 'ICA Client Ver',
machine_name as 'Citrix Server'
FROM vw_ctrx_archive_server_start_perf
WHERE [user] = (@userid) and session_startup_server is not null and login_script_execution_server_duration > 0
GROUP BY session_startup_server, profile_load_server_duration, credentials_obtention_server_duration, login_script_execution_server_duration, client_address, client_version, machine_name, start_time, [user]
ORDER BY 'Session Start Time' desc

This line is where we create a parameter called @userid. Remember this for later.

where [user] = (@userid) and session_startup_server is not null and login_script_execution_server_duration > 0

So how do we create the drill-down?

NOTE: The following screenshots are from Visual Studio 2005.

In Visual Studio, open the report for the User’s Bad Login Experience Query.

Open the Layout tab. We want to use Userid as the parameter we pass to our drill-down report.  Right-click on the field and select properties.  You select the field and not the column name because we want to turn the results of the query into the parameter for the drill-down report.


In the Textbox Properties window, click on the Navigation Tab.  Under Hyperlink action, click “Jump to report:” and choose the BadLoginExpDetail report (NOTE: BadLoginExpDetail is available because I had added it to the SSRS_User_Bad_Login_Exp project above).


Now click the Parameters… button.  When you click the drop-down arrow in the “Parameter Name” field, you will see userid.


Huh?  Yeah, look back at the “User’s Bad Login Experience Detail Query” above.  You will recall that we created a parameter called userid by setting a condition in the WHERE cause that [user] = @userid.  That ‘@’ symbol is not just for show, but how you create parameters (variables) in SQL.  When you chose the BadLoginExpDetail report and clicked on the Parameter button, you could select any parameters you created in the query for that report.  Okay, now that we are on the same page, we have to associate a value with the parameter.  Click the drop-down arrow in the “Parameter Value” column.


You will see all the fields present in the BadLoginExp report.  We want to pick “=Fields!Userid.Value” so that when we click on a user’s name in the BadLoginExp report, it will send that name as the parameter to the BadLoginExpDetail report.  Now, click OK and OK again to close the properties box.  Let’s click on the Preview tab to see what happens.


As you can see, the user1 value is now a hyperlink that will pass user1 as the ‘userid’ parameter to the BadLoginExpDetail report.  When we click it, we get the following:


You can modify the userid field to make it look like a hyperlink by using underline and/or changing the text color.

I always welcome questions and comments.  Again, I cover the creation of SSRS reports in my Making Citrix Stats Work for you series. Jump to [part 1] [part 2] [part 3] [part 4] [part 5] [part 6]


%d bloggers like this: