ADC

AppFlow

NetScaler 设备是对数据中心中所有应用程序流量进行控制的中心点。它可收集对应用程序性能监视、分析和业务智能应用程序有价值的流和用户会话级别信息。它还收集 Web 页面性能数据和数据库信息。AppFlow 使用 Internet 协议流信息导出 (IPFIX) 格式(这是在 RFC 5101 中定义的开放 Internet 工程任务组 (IETF) 标准)传输此信息。IPFIX(Cisco 的 NetFlow 的标准化版本)广泛用于监视网络流信息。AppFlow 定义新的信息元素来表示应用程序级别信息、Web 页面性能数据和数据库信息。

通过使用 UDP 作为传输协议,AppFlow 可将收集的数据(称为流记录)传输到一个或多个 IPv4 收集器。收集器可聚合流记录,并生成实时或历史报告。

AppFlow 在事务级别为 HTTP、SSL、TCP、SSL_TCP 通信流和 HDX Insight 通信流提供可见性。可对要监视的通信流类型进行采样和过滤。

注意

有关 HDX Insight 的更多信息,请参阅 HDX Insight

AppFlow 使用操作和策略将选定流的记录发送到特定的一组收集器。AppFlow 操作指定哪组收集器接收 AppFlow 记录。可以配置基于高级表达式的策略,以便为将其流记录发送到关联 AppFlow 操作指定的收集器的流。

要限制流的类型,可以为虚拟服务器启用 AppFlow。AppFlow 还可为虚拟服务器提供统计信息。

还可为表示应用程序服务器的特定服务启用 AppFlow,并监视传输到该应用程序服务器的流量。

注意:只有 NetScaler nCore 版本支持此功能。

AppFlow 的工作原理

在最常见的部署场景中,入站流量流向 NetScaler 设备上的虚拟 IP 地址 (VIP),并对服务器进行负载平衡。出站流量从服务器流向 NetScaler 上的映射或子网 IP 地址,然后从 VIP 流向客户端。流是由以下五个元组标识的 IP 数据包的单向集合:sourceIP、sourcePort、destIP、destPort 和 protocol。

下图描述了 AppFlow 功能的工作原理。

图 1. NetScaler 流程顺序

流序列

如图所示,事务的每个段的网络流标识符取决于流量的方向。

形成流记录的不同流如下:

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

Flow2:<NS-MIP/SNIP, NS-port, Server-IP, Server-Port, Protocol>

Flow3:<Server-IP, Server-Port, NS-MIP/SNIP, NS-Port, Protocol>

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

为了帮助收集器链接事务中的所有四个流,AppFlow 将自定义 transactionID 元素添加到每个流中。对于应用程序级内容交换(例如 HTTP),单个客户端 TCP 连接可以将每个请求负载平衡到不同的后端 TCP 连接。AppFlow 为每个事务提供了一组记录。

流记录

AppFlow 记录包含标准的 NetFlow 或 IPFIX 信息,例如流的开始和结束时间戳、数据包计数和字节计数。AppFlow 记录还包含应用程序级别的信息(例如 HTTP URL、HTTP 请求方法和响应状态代码、服务器响应时间和延迟)。Web 页面性能数据(例如页面加载时间、页面呈现时间以及在页面上花费的时间)。以及数据库信息(例如数据库协议、数据库响应状态和数据库响应大小)。IPFIX 流记录基于发送流记录之前需要发送的模板。

模板

AppFlow 定义了一组模板,每种流类型对应一个模板。每个模板都包含一组标准信息元素 (IE) 和企业特定的信息元素 (EIE)。IPFIX 模板定义了流记录中信息元素 (Internet Explorer) 的顺序和大小。如 RFC 5101 中所述,模板会定期发送给收集者。

模板可以包括以下 EIE:

  • transactionID

    标识应用程序级事务的未签名 32 位数字。对于 HTTP,它对应于请求和响应对。与此请求和响应对对应的所有流记录都具有相同的事务 ID。在最常见的情况下,有四条 uniflow 记录对应于此事务。如果 NetScaler 自己生成响应(由集成缓存或安全策略提供),则此事务可能只有两个流量记录。

  • connectionID

    标识第 4 层连接(TCP 或 UDP)的未签名 32 位数字。NetScaler 流量是双向的,每个流向都有两个单独的流量记录。此信息元素可用于链接这两个流。

    对于 NetScaler 来说,ConnectionID 是用于跟踪连接进度的连接数据结构的标识符。例如,在 HTTP 事务中,给定 connectionID 可能有多个 transactionID 元素,这些元素对应于在该连接上发出的多个请求。

  • tcpRTT

    在 TCP 连接上测量的往返时间(以毫秒为单位)。它可以用作确定网络上的客户端或服务器延迟的指标。

  • httpRequestMethod

    一个 8 位数字,指示在事务中使用的 HTTP 方法。带有数字到方法映射的选项模板随模板一起发送。

  • httpRequestSize

    指示请求有效负载大小的无符号 32 位数字。

  • httpRequestURL

    客户端请求的 HTTP URL。

  • httpUserAgent

    Web 服务器的传入请求的来源。

  • httpResponseStatus

    指示响应状态代码的无符号 32 位数字。

  • httpResponseSize

    指示响应大小的无符号 32 位数字。

  • httpResponseTimeToFirstByte

    指示接收响应的第一个字节所需时间的无符号 32 位数字。

  • httpResponseTimeToLastByte

    指示接收响应的最后一个字节所需时间的无符号 32 位数字。

  • flowFlags

    指示不同流量条件的无符号 64 位标志。

用于 Web 性能数据的 EIE

  • clientInteractionStartTime

    浏览器收到响应的第一个字节以加载页面的任何对象(例如图像、脚本和样式表)的时间。

  • clientInteractionEndTime

    浏览器收到响应的最后一个字节以加载页面的所有对象(例如图像、脚本和样式表)的时间。

  • clientRenderStartTime

    浏览器开始呈现页面的时间。

  • clientRenderEndTime

    浏览器完成呈现整个页面(包括嵌入对象)的时间。

用于存储数据库信息的 EIE

  • dbProtocolName

    指示数据库协议的无符号 8 位数字。MS SQL 的有效值为 1,MySQL 的有效值为 2。

  • dbReqType

    指示事务中使用的数据库请求方法的无符号 8 位数字。对于 MS SQL,有效值为 1,表示 QUERY,2 表示 TRANSACTION,3 表示 RPC。有关 MySQL 的有效值,请参阅 MySQL 文档。

  • dbReqString

    指示没有标头的数据库请求字符串。

  • dbRespStatus

    指示从 Web 服务器收到的数据库响应的状态的无符号 64 位数字。

  • dbRespLength

    指示响应大小的无符号 64 位数字。

  • dbRespStatString

    从 Web 服务器收到的响应状态字符串。

AppFlow