ADC

Transaktionsprotokolle direkt von NetScaler nach Elasticsearch exportieren

Sie können jetzt Transaktionsprotokolle von NetScaler auf branchenübliche Log-Aggregator-Plattformen wie Elasticsearch exportieren. Das Transaktionslog ist die Aufzeichnung der Ereignisse des Anwendungsdatenverkehrs auf dem NetScaler, wie HTTP-Anfragen und -Antworten, Verbindungsstart und -ende. Weitere Informationen zu Transaktionsprotokollen finden Sie unter AppFlow.

Sie können Transaktionsprotokolle im JSON-Format für verschiedene Einblicke wie Web Insight, Security, Gateway, HDX Insights über HTTP (oder HTTPS) direkt von NetScaler nach ElasticSearch exportieren. Mit den Visualisierungstools von Kibana können Sie aussagekräftige Einblicke in die exportierten Daten erhalten.

Hinweis:

Die IP-Adressen, die als Teil der Transaktionsprotokolle exportiert werden, werden im Dezimalformat statt im Standardformat angezeigt. Wenn Ihre NetScaler-IP-Adresse beispielsweise 10.102.154.153 lautet, wird dieselbe Adresse in den Transaktionsprotokollen auf Elasticsearch als 174496409 angezeigt. Sie können die in Elasticsearch verfügbaren integrierten Ausdrücke verwenden, um die IP-Adresse vom Dezimalformat in das Standardformat zu konvertieren.

Exportieren Sie Transaktionsprotokolle von NetScaler nach Elasticsearch, das als HTTP-Server konfiguriert ist

Um den Export von Transaktionslogs zu konfigurieren, müssen Sie die folgenden Schritte ausführen:

  1. Konfigurieren Sie Elasticsearch für den Empfang von Transaktionsprotokollen.
  2. Erstellen Sie einen Collector-Service und ein Analyseprofil auf NetScaler.

Elasticsearch so konfigurieren, dass Transaktionsprotokolle empfangen werden

Sie können Elasticsearch so konfigurieren, dass es die von NetScaler weitergeleiteten Transaktionsprotokolle empfängt, indem Sie die Konfigurationsschritte in der Elasticsearch-Dokumentation befolgen.

Kopieren Sie nach der Konfiguration das Authentifizierungstoken und speichern Sie es als Referenz. Sie müssen dieses Token bei der Konfiguration des Analyseprofils auf NetScaler angeben.

Konfigurieren Sie das Analyseprofil auf NetScaler

Gehen Sie wie folgt vor, um NetScaler-Transaktionsprotokolle nach Elasticsearch zu exportieren.

  1. Erstellen Sie einen Collector-Service für Elasticsearch.

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

    Beispiel:

    add service elasticsearch_service 10.102.34.155 HTTP 8088
    

    In dieser Konfiguration:

    • ip-address: IP-Adresse des Elasticsearch-Servers.
    • collector-name: Name des Collectors.
    • protocol: Geben Sie das Protokoll als HTTP oder SSL an.
    • port: Portnummer.
  2. Erstellen Sie ein Analyseprofil.

    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>
    

    Beispiel:

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

    Hinweis:

    Die Option -allHttpHeaders wird für den Export von Elasticsearch-Transaktionsprotokollen in NetScaler 14.1-25.x und höher unterstützt.

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

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

    In dieser Konfiguration:

    • insight: Arten von Erkenntnissen, die Sie exportieren können. Die folgenden Optionen sind verfügbar:
      • botinsight
      • CIinsight
      • Gatewayinsight
      • hdxinsight
      • lsninsight
      • securityinsight
      • tcpinsight
      • udpinsight
      • videoinsight
      • webinsight
    • -analyticsAuthToken <auth-scheme> <authorization-parameters>: Der Wert des HTTP-Autorisierungsheaders.

      Wenn Ihr Elasticsearch eine Standardauthentifizierung erfordert, können Sie -analyticsAuthToken mit Basic <base64 of username:password> konfigurieren. Wenn beispielsweise der Benutzername elastic und das Kennwort elastic123 lauten, dann lautet base64(elastic:elastic123) “ZWxhc3RpYzplbGFzdGljMTIz”. <base64 of username:password> kann für dieses Beispiel gefunden werden, indem printf elastic:elastic123 | base64 auf Unix-basierten Systemen ausgeführt wird, auf denen base64 verfügbar ist. Sie können diesen Wert auch mithilfe eines anderen Tools ermitteln, mit dem Sie vertraut sind. Daher lautet der Wert von -analyticsAuthToken <auth-scheme> <authorization-parameters> in diesem Beispiel “Basic ZWxhc3RpYzplbGFzdGljMTIz”.

      Wenn Sie anstelle der Standardauthentifizierung einen API-Schlüssel konfigurieren möchten, können Sie einer ähnlichen Semantik folgen. In diesem Fall müssen Sie ApiKey <encoded api key> als Auth-Token angeben, wobei <encoded api key> base64(<unique id>:<api key>) ist. Weitere Informationen finden Sie unter https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html.

    • dataformatfile <filename>: Die Datei, die die Details der Daten im Transaktionslog enthält, die exportiert werden müssen, und ihr Format. Der <filename> ist der Name der Datenformatdatei, die im Verzeichnis /var/analytics_conf vorhanden ist. Jeder Endpunkt erwartet, dass die JSON-Nutzlast in einem bestimmten Format kodiert wird. Wenn das Format nicht angegeben ist, ist splunk_format.txt standardmäßig ausgewählt. Für Elasticsearch konfigurieren Sie elastic_format.txt als Dateinamen. Sie können auch Ihre eigene benutzerdefinierte Datenformatdatei für Ihren Anwendungsfall definieren. Weitere Informationen zur benutzerdefinierten Datenformatdatei finden Sie unter Feldbasiertes Filtern von Datensätzen.

      HINWEIS:

      Für <filename> konfigurieren Sie nicht den absoluten Pfad des Dateinamens. Geben Sie nur den Dateinamen ein.

    • -analyticsEndpointContentType: Der Content-Type-Header. Der fest codierte Wert ist application/json.

    • -analyticsEndpointUrl: Der Pfad auf Elasticsearch, auf dem Transaktionen veröffentlicht werden müssen. Beispiel: /_bulk. NetScaler kommuniziert mit Elasticsearch über die Bulk-API. Weitere Informationen zur Bulk-API finden Sie unter https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html.

      HINWEIS:

      Sie können die Analytics-Profilparameter mit dem Befehl set analytics profile ändern.

  3. Überprüfen Sie die Konfiguration des Analytics-Profils mit dem Befehl show analytics profile.

    > sh analytics profile 
    
  4. Binden Sie das Analyseprofil an den virtuellen Server.

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

    Beispiel

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

Nachdem die Konfiguration abgeschlossen ist, werden die Transaktionen auf der Grundlage des Datenverkehrs protokolliert und nach Elasticsearch exportiert.

Feldbasierte Filterung von Datensätzen

Standardmäßig exportiert NetScaler Hunderte von Feldern im Transaktionslog, auch wenn die Endpoints nicht alle exportierten Daten benötigen. Außerdem erwartet jeder Endpunkt, dass die JSON-Nutzlast in einem bestimmten Format codiert wird, z. B. den Anfang und das Ende eines Datensatzes, das Trennzeichen zwischen Datensätzen sowie den Anfang und das Ende des Puffers.

Elasticsearch erwartet, dass die JSON-Nutzlast, die von NetScaler kommt, im folgenden Format codiert wird:

  • Pufferstart und -ende: Für BUFFER-START und BUFFER-END ist kein Wert erforderlich. Am Ende des Puffers müssen Sie eine Leerzeile hinzufügen.
  • Datensatzbeginn und -ende: Der Datensatz muss mit {"index": {"_index": "transactions"}} { beginnen und mit } enden. Alle Felder, die exportiert werden, müssen zwischen DATA-START und DATA-END erfasst werden.

    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
    
  • Trennzeichen zwischen Datensätzen: Eine Leerzeile zwischen den Datensätzen.

elastic_format.txt Ist standardmäßig im Ordner var/analytics_conf verfügbar, der das von Elasticsearch erwartete JSON-Nutzdatenformat enthält und auch einige Standardfelder enthält, für die die Daten exportiert werden. Sie können elastic_format.txt für den Parameter -dataFormatFile im Befehl “Analyseprofil hinzufügen” konfigurieren.

Im Folgenden finden Sie ein Beispiel für eine Datenformatdatei für 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

Die JSON_fields.txt-Datei var/analytics_conf ist eine Referenzmasterdatei, die die vollständige Liste der Felder zusammen mit ihren Identifikationsnummern enthält. Die Felder in der Masterdatei werden auf der Grundlage der Erkenntnisse kategorisiert. Wenn Sie beispielsweise wissen möchten, welche Felder mit HDX Insight verknüpft sind, können Sie sich die HDX Insights-Kategorie der Datei JSON_fields.txt ansehen, um zu erfahren, welche Felder der Kategorie HDX Insights zugeordnet sind.

Sie können die Datei elastic_format.txt an Ihre Anforderungen anpassen. Wenn Sie beispielsweise HDX Insights exportieren möchten, können Sie sich die Kategorie HDX Insights in der Datei JSON_fields.txt ansehen und der Datei elastic_format.txt die erforderlichen Felder hinzufügen. Ebenso können Sie Felder löschen, die Sie nicht exportieren möchten.

Nachdem Sie die Datei elastic_format.txt angepasst haben, führen Sie den folgenden Befehl aus, um das Analyseprofil zu aktualisieren:

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

Beispiel:

update analytics profile ns _analytics_ default_http_profile -dataFormatFile elastic_format.txt

Sie können den Wert einer Datenformatdatei auch mithilfe der GUI angeben. Navigieren Sie zu System > AppFlow > Analytics-Profile und klicken Sie auf Hinzufügen. Wenn Sie auf der Seite Analytics-Profil erstellen eine der folgenden Optionen für Typ auswählen, wird das Feld Datenformatdatei angezeigt, in dem Sie den Dateinamen angeben können:

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

Beispielausgaben

Dieser Abschnitt enthält Beispielausgaben für verschiedene Transaktionslogs.

Beispielausgabe eines HTTP-Transaktionsprotokolls

Im Folgenden finden Sie eine Beispielausgabe für das HTTP-Transaktionslog.

{
    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
}

Beispielausgabe des TCP-Transaktionsprotokolls

Im Folgenden finden Sie eine Beispielausgabe für das TCP-Transaktionsprotokoll.

{
    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
}

Beispielausgabe eines SSL-Transaktionsprotokolls

Im Folgenden finden Sie eine Beispielausgabe für das SSL-Transaktionsprotokoll.

{
    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
}

Beispielausgabe Web Insight-Transaktionsprotokolls

Im Folgenden finden Sie eine Beispielausgabe für das Web Insight-Transaktionsprotokoll.

{
    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
}