ADC

Exportez les journaux de transactions directement de NetScaler vers Elasticsearch

Vous pouvez désormais exporter des journaux de transactions depuis NetScaler vers des plateformes d’agrégation de journaux standard telles qu’Elasticsearch. Le journal des transactions est l’enregistrement des événements du flux de trafic des applications sur le NetScaler, tels que les requêtes et réponses HTTP, le début et la fin de la connexion. Pour plus d’informations sur les journaux de transactions, consultez AppFlow.

Vous pouvez exporter les journaux de transactions vers ElasticSearch au format JSON pour obtenir différentes informations telles que Web Insight, la sécurité, la passerelle, HDX Insights via HTTP (ou HTTPS) directement depuis NetScaler. À l’aide des outils de visualisation de Kibana, vous pouvez obtenir des informations pertinentes sur les données exportées.

Remarque :

Les adresses IP exportées dans le cadre des journaux de transactions apparaissent au format décimal au lieu du format standard. Par exemple, si votre adresse IP NetScaler est 10.102.154.153, la même adresse dans les journaux de transactions d’Elasticsearch s’affiche sous la forme 174496409. Vous pouvez utiliser les expressions intégrées disponibles sur Elasticsearch pour convertir l’adresse IP du format décimal au format standard.

Exportez les journaux de transactions de NetScaler vers Elasticsearch configuré en tant que serveur HTTP

Pour configurer l’exportation des journaux de transactions, vous devez suivre les étapes suivantes :

  1. Configurez Elasticsearch pour recevoir les journaux de transactions.
  2. Créez un service de collecte et un profil d’analyse sur NetScaler.

Configurer Elasticsearch pour recevoir les journaux de transactions

Vous pouvez configurer Elasticsearch de façon à recevoir les journaux de transactions transmis par NetScaler en suivant les étapes de configuration disponibles dans la documentation Elasticsearch.

Une fois la configuration terminée, copiez le jeton d’authentification et enregistrez-le pour référence. Vous devez spécifier ce jeton lors de la configuration du profil d’analyse sur NetScaler.

Configurer le profil d’analyse sur NetScaler

Procédez comme suit pour exporter les journaux de transactions NetScaler vers Elasticsearch.

  1. Créez un service de collecte pour Elasticsearch.

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

    Exemple :

    add service elasticsearch_service 10.102.34.155 HTTP 8088
    

    Dans cette configuration :

    • adresse IP : adresse IP du serveur Elasticsearch.
    • collector-name : nom du collecteur.
    • protocole : spécifiez le protocole HTTP ou SSL.
    • port : numéro de port.
  2. Créez un profil analytique.

    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>
    

    Exemple :

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

    Remarque :

    L’option -allHttpHeaders est prise en charge pour l’exportation des journaux de transactions Elasticsearch dans NetScaler 14.1-25.x et versions ultérieures.

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

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

    Dans cette configuration :

    • insight : types d’informations que vous pouvez exporter Les options suivantes sont disponibles :
      • aperçu des robots
      • Aperçu de la CIA
      • Gateway Insight
      • aperçu hdx
      • aperçu du LSN
      • aperçu de la sécurité
      • tcpinsight
      • uppinsight
      • aperçu vidéo
      • webinsight
    • -analyticsAuthToken <auth-scheme> <authorization-parameters> : valeur de l’en-tête d’autorisation HTTP.

      Si Elasticsearch nécessite une authentification de base, vous pouvez configurer -analyticsAuthToken avec la valeur Basic <base64 of username:password>. Par exemple, si le nom d’utilisateur est elastic et le mot de passe elastic123, alors base64(elastic:elastic123) est « ZWxhc3RpYzplbGFzdGljMTIz ». Pour cet exemple, vous pouvez trouver la valeur <base64 of username:password> en exécutant printf elastic:elastic123 | base64 sur des systèmes basés sur Unix sur lesquels base64 est disponible. Vous pouvez également trouver cette valeur à l’aide de tout autre outil que vous utilisez couramment. Par conséquent, pour cet exemple, la valeur de -analyticsAuthToken <auth-scheme> <authorization-parameters> est « Basic ZWxhc3RpYzplbGFzdGljMTIz ».

      Si vous souhaitez configurer une clé API au lieu d’une authentification de base, vous pouvez suivre une sémantique similaire. Dans ce cas, vous devez fournir ApiKey <encoded api key> comme jeton d’authentification, où <encoded api key> correspond à base64(<unique id>:<api key>). Pour plus d’informations, consultez https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html.

    • dataformatfile <filename> : le fichier qui contient les données détaillées du journal des transactions à exporter et son format. Le nom du fichier dataformat <filename> qui est présent dans le répertoire /var/analytics_conf. Chaque point de terminaison s’attend à ce que la charge utile JSON soit codée dans un format spécifique. Si le format n’est pas spécifié, splunk_format.txt est sélectionné par défaut. Pour Elasticsearch, configurez elastic_format.txt comme nom de fichier. Vous pouvez également définir un fichier dataformat personnalisé pour votre propre cas d’utilisation. Pour plus d’informations sur le fichier dataformat personnalisé, consultez Filtrage des enregistrements de données basé sur les champs.

      REMARQUE :

      Pour <filename>, ne configurez pas le chemin d’accès absolu du nom de fichier. Entrez uniquement le nom du fichier.

    • -analyticsEndpointContentType : L’en-tête Content-Type. La valeur codée en dur est application/json.

    • -analyticsEndpointUrl : chemin d’accès Elasticsearch sur lequel les transactions doivent être enregistrées. Par exemple, /_bulk. NetScaler communique avec Elasticsearch via l’API Bulk. Pour plus d’informations sur l’API Bulk, consultez https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html.

      REMARQUE :

      Vous pouvez modifier les paramètres du profil d’analyse à l’aide de la commande set analytics profile.

  3. Vérifiez la configuration du profil d’analyse à l’aide de la commande show analytics profile.

    > sh analytics profile 
    
  4. Liez le profil d’analyse au serveur virtuel.

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

    Exemple

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

Une fois la configuration terminée, en fonction du trafic, les transactions seront enregistrées et exportées vers Elasticsearch.

Filtrage par champs des enregistrements de données

Par défaut, NetScaler exporte des centaines de champs dans le journal des transactions, même lorsque les terminaux n’ont pas besoin de toutes les données exportées. En outre, chaque point de terminaison s’attend à ce que la charge utile JSON soit codée dans un format spécifique, tel que le début et la fin d’un enregistrement de données, le délimiteur entre les enregistrements de données et le début et la fin de la mémoire tampon.

Elasticsearch s’attend à ce que la charge utile JSON provenant de NetScaler soit encodée dans le format suivant :

  • Début et fin de la mémoire tampon : aucune valeur n’est requise pour BUFFER-START et BUFFER-END. À la fin de la mémoire tampon, vous devez ajouter une ligne vide.
  • Début et fin de l’enregistrement de données : L’enregistrement de données doit commencer par {"index": {"_index": "transactions"}} { et se terminer par }. Tous les champs exportés doivent être capturés entre DATA-START et DATA-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
    
  • Délimiteur entre les enregistrements de données : une ligne vide entre les enregistrements de données.

Par défaut, elastic_format.txt est disponible dans un dossier var/analytics_conf qui contient le format de charge utile JSON attendu par Elasticsearch et qui contient également quelques champs par défaut pour lesquels les données sont exportées. Vous pouvez le configurer elastic_format.txt comme valeur du paramètre -dataFormatFile dans la commande Ajouter un profil analytique.

Voici un exemple de fichier de format de données pour 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

Le fichier JSON_fields.txt sous var/analytics_conf est un fichier principal de référence qui contient la liste complète des champs ainsi que leurs numéros d’identification. Les champs du fichier principal sont classés en fonction des informations. Par exemple, si vous souhaitez connaître les champs associés à HDX Insight, vous pouvez consulter la catégorie HDX Insights du fichier JSON_fields.txt pour connaître les champs associés à la catégorie HDX Insights.

Vous pouvez personnaliser le fichier elastic_format.txt en fonction de vos besoins. Par exemple, si vous souhaitez exporter HDX Insights, vous pouvez consulter la catégorie HDX Insights dans le fichier JSON_fields.txt et ajouter les champs obligatoires dans le fichier elastic_format.txt. De même, vous pouvez supprimer des champs que vous ne souhaitez pas exporter.

Après avoir personnalisé le fichier elastic_format.txt, exécutez la commande suivante pour mettre à jour le profil analytique :

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

Exemple :

update analytics profile ns _analytics_ default_http_profile -dataFormatFile elastic_format.txt

Vous pouvez également spécifier la valeur du fichier de format de données à l’aide de l’interface graphique. Accédez à Système > AppFlow > Profils analytiques et cliquez sur Ajouter. Sur la page Créer un profil Analytics, si vous sélectionnez l’une des options suivantes pour Type, le champ Fichier de format de données s’affiche pour vous permettre de spécifier le nom du fichier :

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

Sorties d’échantillons

Cette section contient des exemples de résultats pour différents journaux de transactions.

Exemple de sortie du journal des transactions HTTP

Voici un exemple de sortie pour le journal des transactions 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
}

Exemple de sortie du journal des transactions TCP

Voici un exemple de sortie pour le journal des transactions 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
}

Exemple de sortie du journal des transactions SSL

Voici un exemple de sortie pour le journal des transactions 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
}

Exemple de sortie du journal des transactions Web Insight

Voici un exemple de sortie pour le journal des transactions 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
}