ADC

将事务日志直接从 NetScaler 导出到 Elasticsearch

现在,您可以将事务日志从 NetScaler 导出到 Elasticsearch 等行业标准日志聚合器平台。事务日志是 NetScaler 上应用流量事件的记录,例如 HTTP 请求和响应、连接的开始和结束。有关事务日志的更多信息,请参阅 AppFlow

您可以以 JSON 格式将交易日志导出到 ElasticSearch,以获取各种见解,例如 Web Insight、安全、网关、通过 HTTP(或 HTTPS)直接从 NetScaler 获得的 HDX Insight。使用 Kibana 的可视化工具,您可以获得有关导出数据的有意义见解。

注意:

作为事务日志的一部分导出的 IP 地址以十进制格式显示,而不是标准格式。例如,如果您的 NetScaler IP 地址为 10.102.154.153,则 Elasticsearch 事务日志中的相同地址将显示为 174496409。您可以使用 Elasticsearch 上可用的内置表达式将 IP 地址从十进制格式转换为标准格式。

将事务日志从 NetScaler 导出到配置为 HTTP 服务器的 Elasticsearch

要配置事务日志的导出,必须执行以下步骤:

  1. 配置 Elasticsearch 以接收事务日志。
  2. 在 NetScaler 上创建收集器服务和分析配置文件。

配置 Elasticsearch 以接收事务日志

您可以按照 Elasticsearch 文档中提供的配置步骤配置 Elasticsearch 以接收由 NetScaler 转发的事务日志。

配置完成后,复制身份验证令牌并将其保存以供参考。在 NetScaler 上配置分析配置文件时,您需要指定此标记。

在 NetScaler 上配置分析配置文件

执行以下操作,将 NetScaler 事务日志导出到 Elasticsearch。

  1. 为 Elasticsearch 创建收集器服务。

    add service <collector> <elasticsearch-server-ip-address> <protocol> <port>
    

    示例:

    add service elasticsearch_service 10.102.34.155 HTTP 8088
    

    在此配置中:

    • ip-address:Elasticsearch 服务器 IP 地址。
    • 收藏家姓名:收藏家的名字。
    • 协议:将协议指定为 HTTP 或 SSL。
    • 端口:端口号。
  2. 创建分析配置文件。

    add analytics profile <profile-name> -type <insight> -collectors <collector-name> -analyticsAuthToken <auth-scheme> <authorization-parameters> -analyticsEndpointContentType "application/json" -analyticsEndpointUrl <endpoint-url> -dataFormatFile <data-format-file-name>
    

    示例:

    add analytics profile transaction-log-profile -type webinsight -collectors elasticsearch_collector -analyticsAuthToken "Basic ZWxhc3RpYzplbGFzdGljMTIz" -analyticsEndpointContentType "application/json" -analyticsEndpointUrl "/_bulk" -dataFormatFile "elastic_format.txt"
    

    注意:

    在 NetScaler 14.1-25.x 及更高版本中,导出 Elasticsearch 事务日志时支持 -allHttpHeaders 选项。

    add analytics profile <profile-name> -type webinsight -allHttpHeaders

    set analytics profile <profile-name> -type webinsight -allHttpHeaders

    在此配置中:

    • 见解:您可以导出的见解类型以下选项可用:
      • botinsight
      • CIinsight
      • Gatewayinsight
      • hdxinsigh
      • lsninsight
      • securityinsight
      • tcpinsigh
      • udpinsight
      • videoinsight
      • webinsight
    • -analyticsAuthToken <auth-scheme> <authorization-parameters>:HTTP 授权标头的值。

      如果您的 Elasticsearch 需要基本身份验证,则可以将 -analyticsAuthToken 配置为 Basic <base64 of username:password>。例如,如果用户名为 elastic,密码为 elastic123,则 base64(elastic:elastic123) 为“ZWxhc3RpYzplbGFzdGljMTIz”。可以通过在基于 unix 且具有可用 base64 的系统中运行 printf elastic:elastic123 | base64 来找到此示例的 <base64 of username:password>。您还可以使用您熟悉的任何其他工具来找到此值。因此,在本示例中,-analyticsAuthToken <auth-scheme> <authorization-parameters> 的值为“Basic ZWxhc3RpYzplbGFzdGljMTIz”。

      如果您想配置 API 密钥而不是基本身份验证,则可以遵循类似的语义。在这种情况下,您必须以身份验证令牌的形式提供 ApiKey <encoded api key>,其中 <encoded api key>base64(<unique id>:<api key>)。有关详细信息,请参阅 https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html

    • dataformatfile <filename>:该文件包含事务日志中必须导出的数据及其格式的详细信息。<filename> 是数据格式文件的名称,该文件存在于 /var/analytics_conf 目录中。每个端点都希望 JSON 负载以特定格式编码。如果未指定格式,则默认情况下 splunk_format.txt 处于选中状态。对于 Elasticsearch,将 elastic_format.txt 配置为文件名。您也可以为自己的用例定义自己的自定义数据格式文件。有关自定义数据格式文件的更多信息,请参阅基于字段的数据记录筛选

      注意:

      对于 <filename>,不要配置文件名的绝对路径。仅输入文件名。

    • -analyticsEndpointContentType:内容类型标头。硬编码值为 application/json。

    • -analyticsEndpointUrl:事务必须发布到的 Elasticsearch 上的路径。例如,/_bulk。NetScaler 使用批量 API 与 Elasticsearch 进行通信。有关批量 API 的更多信息,请参阅 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

      注意:

      您可以使用 set analytics profile 命令修改分析配置文件参数。

  3. 使用 show analytics profile 命令验证分析配置文件配置。

    > sh analytics profile 
    
  4. 将分析配置文件绑定到虚拟服务器。

    bind lb vserver <vserver-name> -analyticsProfile transaction-log-profile
    

    示例

    bind lb vserver sample-log -analyticsProfile transaction-log-profile
    

配置完成后,将根据流量记录事务并将其导出到 Elasticsearch。

对数据记录进行基于字段的过滤

默认情况下,即使端点不需要所有导出的数据,NetScaler 也会导出事务日志中的数百个字段。此外,每个端点都希望以特定格式对 JSON 负载进行编码,例如数据记录的开头和结尾、数据记录之间的分隔符以及缓冲区的开始和结束。

Elasticsearch 预计来自 NetScaler 的 JSON 负载将采用以下格式进行编码:

  • 缓冲区起点和终点:BUFFER-STARTBUFFER-END 不需要任何值。在缓冲区的末尾,必须添加一个空行。
  • 数据记录的开始和结束:数据记录必须以 {"index": {"_index": "transactions"}} { 开头,以 } 结尾。必须在 DATA-STARTDATA-END 之间捕获所有导出的字段。

    The data records must start with the following:

     RECORD-START
     {"index": {"_index": "transactions"}}
     {
     DATA-START
    

    The data records must end with the following:

     DATA-START
     }
     RECORD-END
    
  • 数据记录之间的分隔符:数据记录之间有一个空行。

默认情况下,可以在包含 Elasticsearch 期望的 JSON 负载格式的 var/analytics_conf 文件夹中找到 elastic_format.txt,还包含一些用于导出数据的默认字段。您可以在“add analytics profile”命令中为 -dataFormatFile 参数配置值 elastic_format.txt

下面是 Elasticsearch 的示例数据格式文件:

    BUFFER-START
    RECORD-START
    {"index": {"_index": "transactions"}}
    {
    DATA-START
    153 observationPointId
    547 nsPartitionId
    154 exportingProcessId
    159 transactionId
    801 httpReqUrl
    685 httpReqMethod
    683 httpReqHost
    689 httpReqUserAgent
    680 httpContentType
    691 httpReqXForwardedFor
    682 httpDomainName
    803 appName
    851 appNameVserverLs
    484 httpRspStatus
    53 httpRspLen
    684 httpResLocation
    687 httpResSetCookie
    DATA-END
    }
    RECORD-END
    RECORD-DELIMITER


    RECORD-DELIMITER-END


    BUFFER-END

var/analytics_conf 下的 JSON_fields.txt 文件是一个参考主文件,其中包含字段的完整列表及其标识号。主文件中的字段是根据见解进行分类的。例如,如果您想了解与 HDX Insight 相关的字段,可以查看 JSON_fields.txt 文件的 HDX 见解类别,以了解与 HDX Insight 类别相关的字段。

您可以根据自己的要求自定义 elastic_format.txt 文件。例如,如果要导出 HDX Insight,则可以在 JSON_fields.txt 文件中查看 HDX Insight 类别,然后在 elastic_format.txt 文件中添加必填字段。同样,您可以删除不想导出的字段。

自定义 elastic_format.txt 文件后,执行以下命令来更新分析配置文件:

update analytics profile <profile-name> -dataFormatFile <filename>

示例:

update analytics profile ns _analytics_ default_http_profile -dataFormatFile elastic_format.txt

您也可以使用 GUI 指定数据格式文件的值。导航到“系统”>“AppFlow”>“分析配置文件”,然后单击“添加”。在“创建分析配置文件”页面上,如果您为类型选择以下选项之一,则会出现“数据格式文件”字段,您可以在其中指定文件名:

  • GLOBAL
  • WEB INSIGHT
  • TCP INSIGHT
  • SECURITY INSIGHT
  • VIDEO INSIGHT
  • HDX INSIGHT
  • GATEWAY INSIGHT
  • LSN INSIGHT
  • BOT INSIGHT
  • 时间序列

输出示例

本节包含不同事务日志的示例输出。

HTTP 事务日志输出示例

以下是 HTTP 事务日志的输出示例。

{
    appName: VS1
    clientMss: 1460
    clntFastRetxCount: 0
    clntTcpJitter: 0
    cintTcpPacketsRetransmited: 0
    clntTcpRtoCount: 0
    clntTcpZeroWindowCount: 0
    cltDstIpv4Address: 174496411
    cltIpv4Address: 174496407
    connEndTimestamp: 0
    connStartTimestamp: 7329468222993076980
    exportingProcessId: 0
    httpRegHost: 10.102.154.155
    httpReqMethod: GET
    httpReqUrl: /big.html
    httpRspLen: 114380
    httpRspStatus: 200
    mainPageCoreId: 0
    mainPageId: 0
    nsPartitionId: 0
    observationPointId: 174496409
    originRspLen: 0
    srvrIcpPacketsRetransmited: 0
    srvrTcpZeroWindowCount: 0
    svrDstIpv4Address: 174496415
    svrIpv4Address: 174496408
    tepSrvrConnRstCode: 0
    transClntRTT: 0
    transCltDstPort: 20480
    transCltFlowEndUsecRx: 7329468222993084980
    transCltFlowEndUsecTx: 7329468222993084980
    transCltFlowStartUsecRx: 7329468222993076980
    transCltFlowStartUsecTx: 7329468222993077984
    transCltSrcPort: 60315
    transCltTotRx0ctCnt: 1766
    transCltTotTx0ctCnt: 117580
    transSrvDstPort: 36895
    transSrvSrcPort: 15213
    transSrvrRTT: 0
    transSvrFlowEndUsecRx: 7329468222993084980
    transSvrFlowEndUsecTx: 7329468222993084980
    transSvrFlowStartUsecRx: 7329468222993077984
    transSvrFlowStartUsecTx: 0
    transSvrTotRx0ctCnt: 117580
    transSvrTotTx0ctCnt: 1766
    transactionId: 4890
}

TCP 事务日志输出示例

以下是 TCP 事务日志的输出示例。

{
    appName: vs1
    clientConnEndTimestamp: 7333165210582386064
    clientConnStartTimestamp: 7333165210582386054
    clientMss: 1460
    clntFastRetxCount: 0
    clntTcpJitter: 0
    clntTcpPacketsRetransmited: 0
    clntTcpRtoCount: 0
    clntTcpZeroWindowCount: 0
    cltDstIpv4Address: 174496411
    cltDstPort: 20480
    cltIpv4Address: 174496407
    cltSrcPort: 42939
    connectionChainHopCount: 0
    exportingProcessId: 0
    nsPartitionId: 0
    observationPointId: 174496409
    serverConnEndTimestamp: 7333165201992708470
    serverConnStartTimestamp: 7333165201992708459
    srvDstPort: 36895
    srvSrcPort: 51973
    srvrTcpPacketsRetransmited: 0
    srvrTcpZeroWindowCount: 0
    svrDstIpv4Address: 174496415
    svrIpv4Address: 174496408
    tcpClntConnRstCode: 0
    tcpSrvrConnRstCode: 0
    transClntRTT: 0
    transCltTotRxOctCnt: 208
    transCltTotTxOctCnt: 331
    transSrvrRTT: 0
    transSvrTotRxOctCnt: 331
    transSvrTotTxOctCnt: 208
    transactionId: 330
    vlanNumber: 1
}

SSL 事务日志输出示例

以下是 SSL 事务日志的输出示例。

{
    appName: sslvs
    clientConnEndTimestamp: 0
    clientConnStartTimestamp: 7333182669624439854
    clientMss: 1460
    clntFastRetxCount: 0
    clntTcpJitter: 0
    clntTcpPacketsRetransmited: 0
    clntTcpRtoCount: 0
    clntTcpZeroWindowCount: 0
    cltDstIpv4Address: 174496411
    cltDstPort: 47873
    cltIpv4Address: 174496407
    cltSrcPort: 17499
    connectionChainHopCount: 0
    exportingProcessId: 0
    httpContentType: text/html
    httpReqHost: 10.102.154.155
    httpReqMethod: GET
    httpReqUrl: /index.html
    httpReqUserAgent: curl/7.69.1
    httpRspLen: 291
    httpRspStatus: 200
    nsPartitionId: 0
    observationPointId: 174496409
    originRspLen: 0
    serverConnEndTimestamp: 0
    serverConnStartTimestamp: 7333182665330184556
    srvDstPort: 36895
    srvSrcPort: 34802
    srvrTcpPacketsRetransmited: 0
    srvrTcpZeroWindowCount: 0
    sslCipherValueBE: 0
    sslCipherValueFE: 50331701
    sslClientCertSizeBE: 0
    sslClientCertSizeFE: 0
    sslClntCertSigHashBE: 0
    sslClntCertSigHashFE: 0
    sslFLagsBE: 0
    sslFLagsFE: 1096
    sslServerCertSizeBE: 0
    sslServerCertSizeFE: 4096
    sslSessionIDBE: 0
    sslSessionIDFE: 2433458443
    sslSigHashAlgBE: 0
    sslSigHashAlgFE: 0
    sslSrvrCertSigHashBE: 0
    sslSrvrCertSigHashFE: 668
    svrDstIpv4Address: 174496415
    svrIpv4Address: 174496408
    tcpClntConnRstCode: 0
    tcpSrvrConnRstCode: 0
    transClntRTT: 0
    transCltFlowEndUsecRx: 7333182669624447854
    transCltFlowEndUsecTx: 7333182669624446854
    transCltFlowStartUsecRx: 7333182669624439854
    transCltFlowStartUsecTx: 7333182669624439854
    transCltTotRxOctCnt: 1501
    transCltTotTxOctCnt: 2223
    transSrvrRTT: 0
    transSvrFlowEndUsecRx: 7333182669624446854
    transSvrFlowEndUsecTx: 7333182669624446854
    transSvrFlowStartUsecRx: 7333182669624446854
    transSvrFlowStartUsecTx: 0
    transSvrTotRxOctCnt: 331
    transSvrTotTxOctCnt: 168
    transactionId: 2640
    vlanNumber: 1
}

Web Insight 事务日志输出示例

以下是 Web Insight 事务日志的输出示例。

{
    appName: vs1
    clientConnEndTimestamp: 0
    clientConnStartTimestamp: 7333336201820249485
    clientMss: 1460
    clntFastRetxCount: 0
    clntTcpJitter: 0
    clntTcpPacketsRetransmited: 0
    clntTcpRtoCount: 0
    clntTcpZeroWindowCount: 0
    cltDstIpv4Address: 174496411
    cltDstPort: 20480
    cltIpv4Address: 174758625
    cltSrcPort: 46824
    connectionChainHopCount: 0
    exportingProcessId: 0
    httpContentType: text/html
    httpReqHost: 10.102.154.155
    httpReqMethod: GET
    httpReqUrl: /
    httpRspLen: 291
    httpRspStatus: 200
    nsPartitionId: 0
    observationPointId: 174496409
    originRspLen: 0
    serverConnEndTimestamp: 0
    serverConnStartTimestamp: 7333336201820250487
    srvDstPort: 36895
    srvSrcPort: 6465
    srvrTcpPacketsRetransmited: 0
    srvrTcpZeroWindowCount: 0
    svrDstIpv4Address: 174496415
    svrIpv4Address: 174496408
    tcpClntConnRstCode: 0
    tcpSrvrConnRstCode: 0
    transClntRTT: 0
    transCltFlowEndUsecRx: 7333336201820251488
    transCltFlowEndUsecTx: 7333336201820251488
    transCltFlowStartUsecRx: 7333336201820249485
    transCltFlowStartUsecTx: 7333336201820250487
    transCltTotRxOctCnt: 190
    transCltTotTxOctCnt: 371
    transSrvrRTT: 0
    transSvrFlowEndUsecRx: 7333336201820251488
    transSvrFlowEndUsecTx: 7333336201820250487
    transSvrFlowStartUsecRx: 7333336201820250487
    transSvrFlowStartUsecTx: 7333336201820250487
    transSvrTotRxOctCnt: 371
    transSvrTotTxOctCnt: 202
    transactionId: 11218
    vlanNumber: 1
}