The Citrix ADC appliance is a central point of control for all application traffic in the data center. It collects flow and user-session level information valuable for application performance monitoring, analytics, and business intelligence applications. It also collects webpage performance data and database information. AppFlow transmits the information by using the Internet Protocol Flow Information eXport (IPFIX) format, which is an open Internet Engineering Task Force (IETF) standard defined in RFC 5101. IPFIX (the standardized version of Cisco’s NetFlow) is widely used to monitor network flow information. AppFlow defines new Information Elements to represent application-level information, webpage performance data, and database information.

Using UDP as the transport protocol, AppFlow transmits the collected data, called flow records, to one or more IPv4 collectors. The collectors aggregate the flow records and generate real-time or historical reports.

AppFlow provides visibility at the transaction level for HTTP, SSL, TCP, SSL_TCP flows, and HDX Insight flows. You can sample and filter the flow types that you want to monitor.


For more information on HDX Insight, see HDX Insight.

AppFlow use actions and policies to send records for a selected flow to specific set of collectors. An AppFlow action specifies which set of collectors receive the AppFlow records. Policies, which are based on Advanced expressions can be configured to select flows for which flow records are sent to the collectors specified by the associated AppFlow action.

To limit the types of flows, you can enable AppFlow for a virtual server. AppFlow can also provide statistics for the virtual server.

You can also enable AppFlow for a specific service, representing an application server, and monitor the traffic to that application server.

Note: This feature is supported only on Citrix ADC nCore builds.

How AppFlow Works

In the most common deployment scenario, inbound traffic flows to a Virtual IP address (VIP) on the Citrix ADC appliance and is load balanced to a server. Outbound traffic flows from the server to a mapped or subnet IP address on the Citrix ADC and from the VIP to the client. A flow is a unidirectional collection of IP packets identified by the following five tuples: sourceIP, sourcePort, destIP, destPort, and protocol.

The following figure describes how the AppFlow feature works.

Figure 1. Citrix ADC Flow Sequence

Flow sequence

As shown in the figure, the network flow identifiers for each leg of a transaction depend on the direction of the traffic.

The different flows that form a flow record are:

Flow1: Client-IP, Client-Port, VIP-IP, VIP-port, Protocol

Flow2: NS-SNIP, NS-port, Server-IP, Server-Port, Protocol

Flow3: Server-IP, Server-Port, NS-SNIP, NS-Port, Protocol

Flow4: VIP-IP, VIP-port, Client-IP, Client-Port, Protocol

To help the collector link all four flows in a transaction, AppFlow adds a custom transactionID element to each flow. For application-level content switching, such as HTTP, it is possible for a single client TCP connection to be load balanced to different back end TCP connections for each request. AppFlow provides a set of records for each transaction.

Flow Records

AppFlow records contain standard NetFlow or IPFIX information, such as time stamps for the beginning and end of a flow, packet count, and byte count. AppFlow records also contain application-level information (such as HTTP URLs, HTTP request methods and response status codes, server response time, and latency). Webpage performance data (such as page load time, page render time, and time spent on the page). And database information (such as database protocol, database response status, and database response size). IPFIX flow records are based on templates that need to be sent before sending flow records.


AppFlow defines a set of templates, one for each type of flow. Each template contains a set of standard Information Elements (IEs) and Enterprise-specific Information Elements (EIEs). IPFIX templates define the order and sizes of the Information Elements (Internet Explorer) in the flow record. The templates are sent to the collectors at regular intervals, as described in RFC 5101.

A template can include the following EIEs:

  • transactionID

    An unsigned 32-bit number identifying an application-level transaction. For HTTP, it corresponds to a request and response pair. All flow records that correspond to this request and response pair have the same transaction ID. In the most common case, there are four uniflow records that correspond to this transaction. If the Citrix ADC generates the response by itself (served from the integrated cache or by a security policy), there might be only two flow records for this transaction.

  • connectionID

    An unsigned 32-bit number identifying a layer-4 connection (TCP or UDP). The Citrix ADC flows are bidirectional, with two separate flow records for each direction of the flow. This information element can be used to link the two flows.

    For the Citrix ADC, a connectionID is an identifier for the connection data structure to track the progress of a connection. In an HTTP transaction, for instance, a given connectionID might have multiple transactionID elements corresponding to multiple requests that were made on that connection.

  • tcpRTT

    The round trip time, in milliseconds, as measured on the TCP connection. It can be used as a metric to determine the client or server latency on the network.

  • httpRequestMethod

    An 8-bit number indicating the HTTP method used in the transaction. An options template with the number-to-method mapping is sent along with the template.

  • httpRequestSize

    An unsigned 32-bit number indicating the request payload size.

  • httpRequestURL

    The HTTP URL requested by the client.

  • httpUserAgent

    The source of incoming requests to the Web server.

  • httpResponseStatus

    An unsigned 32-bit number indicating the response status code.

  • httpResponseSize

    An unsigned 32-bit number indicating the response size.

  • httpResponseTimeToFirstByte

    An unsigned 32-bit number indicating the time taken to receive the first byte of the response.

  • httpResponseTimeToLastByte

    An unsigned 32-bit number indicating the time taken to receive the last byte of the response.

  • flowFlags

    An unsigned 64-bit flag used to indicate different flow conditions.

EIEs for webpage performance data

  • clientInteractionStartTime

    Time at which the browser receives the first byte of the response to load any objects of the page such as images, scripts, and style sheets.

  • clientInteractionEndTime

    Time at which the browser received the last byte of response to load all the objects of the page such as images, scripts, and style sheets.

  • clientRenderStartTime

    Time at which the browser starts to render the page.

  • clientRenderEndTime

    Time at which a browser finished rendering the entire page, including the embedded objects.

EIEs for database information

  • dbProtocolName

    An unsigned 8-bit number indicating the database protocol. Valid values are 1 for MS SQL and 2 for MySQL.

  • dbReqType

    An unsigned 8-bit number indicating the database request method used in the transaction. For MS SQL, valid values are 1 is for QUERY, 2 is for TRANSACTION, and 3 is for RPC. For valid values for MySQL, see the MySQL documentation.

  • dbReqString

    Indicates the database request string without the header.

  • dbRespStatus

    An unsigned 64-bit number indicating the status of the database response received from the web server.

  • dbRespLength

    An unsigned 64-bit number indicating the response size.

  • dbRespStatString

    The response status string received from the web server.