ADC

トランザクションログをNetScaler からElasticsearchに直接エクスポートする

NetScalerからElasticsearchなどの業界標準のログアグリゲータープラットフォームにトランザクションログをエクスポートできるようになりました。トランザクションログは、HTTP要求と応答、接続の開始と終了など、NetScaler上のアプリケーショントラフィックフローイベントの記録です。トランザクションログの詳細については、「 AppFlow」を参照してください。

トランザクションログをJSON形式でElasticSearchにエクスポートして、Web Insight、セキュリティ、ゲートウェイ、HDX Insightなどのさまざまなインサイトを、NetScalerから直接HTTP(またはHTTPS)経由でエクスポートできます。Kibana の視覚化ツールを使用すると、エクスポートされたデータに関する有意義な洞察を得ることができます。

注:

トランザクションログの一部としてエクスポートされる IP アドレスは、標準形式ではなく 10 進形式で表示されます。たとえば、NetScaler の IP アドレスが 10.102.154.153 の場合、Elasticsearch のトランザクションログには同じアドレスが 174496409 と表示されます。Elasticsearchに組み込まれている式を使用して、IPアドレスを10進形式から標準形式に変換できます。

トランザクションログをNetScalerからHTTPサーバーとして構成されたElasticsearchにエクスポートする

トランザクションログのエクスポートを設定するには、次の手順を実行する必要があります:

  1. トランザクションログを受信するように Elasticsearch を設定します。
  2. NetScalerでコレクターサービスと分析プロファイルを作成します。

トランザクションログを受信するように Elasticsearch を設定する

Elasticsearchのドキュメントに記載されている構成手順に従うことで、NetScalerによって転送されたトランザクションログを受信するようにElasticsearchを構成できます。

設定が完了したら、認証トークンをコピーして参照用に保存します。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 アドレス: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"
    

    注:

    -allHttpHeadersオプションは、NetScaler 14.1-25.x以降でのElasticsearchトランザクションログのエクスポートでサポートされています。

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

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

    この構成では:

    • Insight:エクスポートできるインサイトの種類次のオプションを使用できます:
      • botinsight
      • CIinsight
      • Gatewayinsight
      • hdxinsight
      • lsninsight
      • securityinsight
      • tcpinsight
      • udpinsight
      • videoinsight
      • webinsight
    • -analyticsAuthToken <auth-scheme> <authorization-parameters>:HTTP 認証ヘッダーの値。

      Elasticsearch で基本認証が必要な場合は、-analyticsAuthTokenBasic <base64 of username:password>に設定できます。たとえば、ユーザー名がelasticでパスワードがelastic123の場合、base64(elastic:elastic123)は「 ZWxhc3RpYzplbGFzdGljMTIz」になります。 この例の<base64 of username:password>では、 base64が利用可能なUNIXベースのシステムでprintf elastic:elastic123 | base64を実行すると見つかります。この値は、使い慣れた他のツールを使用して確認することもできます。したがって、この例では、-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と通信します。Bulk 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-STARTおよびBUFFER-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
    
  • データレコード間の区切り文字:データレコード間の 1 行の空行。

デフォルトでは、elastic_format.txtはElasticsearchが想定するJSONペイロード形式を含むvar/analytics_confフォルダーにあり、データがエクスポートされるいくつかのデフォルトフィールドも含まれています。分析プロファイルの追加コマンドでelastic_format.txt-dataFormatFileパラメータの値として設定できます。

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ファイルは、フィールドの完全なリストとその ID 番号を含むリファレンスマスターファイルです。マスターファイル内のフィールドは、インサイトに基づいて分類されます。たとえば、HDX インサイトに関連するフィールドを知りたい場合は、JSON_fields.txt ファイルの HDX インサイトカテゴリを見て、HDX インサイトカテゴリに関連するフィールドを知ることができます。

要件に基づいてelastic_format.txtファイルをカスタマイズできます。たとえば、HDX Insightsをエクスポートする場合は、JSON_fields.txtファイル内のHDX Insightsカテゴリを確認して、必須フィールドをelastic_format.txtファイルに追加できます。同様に、エクスポートしたくないフィールドを削除できます。

elastic_format.txtファイルをカスタマイズしたら、次のコマンドを実行して Analytics プロファイルを更新します:

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

例:

update analytics profile ns _analytics_ default_http_profile -dataFormatFile elastic_format.txt

GUI を使用してデータ形式ファイルの値を指定することもできます。[ システム] > [AppFlow] > [アナリティクスプロファイル ] に移動し、[ 追加] をクリックします。「 Analytics プロファイルの作成 」ページで、「タイプ」で次のオプションのいずれかを選択すると、ファイル名を指定できる「 データ形式ファイル 」フィールドが表示されます:

  • GLOBAL
  • WEB INSIGHT
  • TCP INSIGHT
  • SECURITY INSIGHT
  • VIDEO INSIGHT
  • HDX INSIGHT
  • GATEWAY INSIGHT
  • LSN INSIGHT
  • BOT INSIGHT
  • TIME SERIES

サンプル出力

このセクションには、さまざまなトランザクションログの出力例が含まれています。

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
}