ADC

Exportar registros de transacciones directamente desde NetScaler a Elasticsearch

Ahora puede exportar los registros de transacciones de NetScaler a plataformas de agregación de registros estándar del sector, como Elasticsearch. El registro de transacciones es el registro de los eventos del flujo de tráfico de las aplicaciones en NetScaler, como las solicitudes y respuestas HTTP y el inicio y el final de la conexión. Para obtener más información sobre los registros de transacciones, consulte AppFlow.

Puede exportar los registros de transacciones a ElasticSearch en formato JSON para obtener información diversa, como Web Insight, seguridad, gateway o HDX Insights a través de HTTP (o HTTPS), directamente desde NetScaler. Con las herramientas de visualización de Kibana, puedes obtener información significativa sobre los datos exportados.

Nota:

Las direcciones IP que se exportan como parte de los registros de transacciones aparecen en formato decimal en lugar del formato estándar. Por ejemplo, si su dirección IP de NetScaler es 10.102.154.153, la misma en los registros de transacciones de Elasticsearch aparece como 174496409. Puedes usar las expresiones incorporadas disponibles en Elasticsearch para convertir la dirección IP del formato decimal al formato estándar.

Exportar registros de transacciones de NetScaler a Elasticsearch configurado como un servidor HTTP

Para configurar la exportación de los registros de transacciones, debe realizar los siguientes pasos:

  1. Configure Elasticsearch para recibir registros de transacciones.
  2. Cree un servicio de recopilación y un perfil de análisis en NetScaler.

Configurar Elasticsearch para recibir registros de transacciones

Puede configurar Elasticsearch para recibir los registros de transacciones reenviados por NetScaler siguiendo los pasos de configuración disponibles en la documentación de Elasticsearch.

Una vez que haya configurado, copie el token de autenticación y guárdelo como referencia. Debe especificar este token al configurar el perfil de análisis en NetScaler.

Configurar el perfil de análisis en NetScaler

Haga lo siguiente para exportar los registros de transacciones de NetScaler a Elasticsearch.

  1. Cree un servicio de recopilación para Elasticsearch.

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

    Ejemplo:

    add service elasticsearch_service 10.102.34.155 HTTP 8088
    

    En esta configuración:

    • dirección IP: dirección IP del servidor Elasticsearch.
    • collector-name: nombre del recopilador.
    • protocolo: especifique el protocolo como HTTP o SSL.
    • puerto: número de puerto.
  2. Cree un perfil de análisis.

    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>
    

    Ejemplo:

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

    Nota:

    La opción -allHttpHeaders se admite para la exportación del registro de transacciones de Elasticsearch en NetScaler 14.1-25.x y versiones posteriores.

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

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

    En esta configuración:

    • información: tipos de información que puede exportar Están disponibles las siguientes opciones:
      • robot a la vista
      • CI Insight
      • Puerta de entrada a la vista
      • hdx insight
      • lsninsight
      • información sobre seguridad
      • TCP Insight
      • visión UDP
      • visión de vídeo
      • visión web
    • -analyticsAuthToken <auth-scheme> <authorization-parameters>: el valor del encabezado de autorización HTTP.

      Si su Elasticsearch requiere una autenticación básica, puede configurar -analyticsAuthToken en Basic <base64 of username:password>. Por ejemplo, si el nombre de usuario es elastic y la contraseña es elastic123, entonces base64(elastic:elastic123) es “ZWxhc3RpYzplbGFzdGljMTIz”. <base64 of username:password> para este ejemplo se puede encontrar ejecutando printf elastic:elastic123 | base64 en sistemas basados en Unix que tengan base64 disponible. También puede encontrar este valor utilizando cualquier otra herramienta con la que esté familiarizado. Por lo tanto, para este ejemplo, el valor de -analyticsAuthToken <auth-scheme> <authorization-parameters> es “Basic ZWxhc3RpYzplbGFzdGljMTIz”.

      Si quiere configurar una clave de API en lugar de la autenticación básica, puede seguir una semántica similar. En este caso, debe proporcionar ApiKey <encoded api key> como token de autenticación, dónde <encoded api key> es base64(<unique id>:<api key>). Para obtener más información, consulte https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-create-api-key.html.

    • dataformatfile <filename>: el archivo que contiene los detalles de los datos del registro de transacciones que se deben exportar y su formato. <filename> es el nombre del archivo de formato de datos que está presente en el directorio /var/analytics_conf. Cada punto final espera que la carga útil de JSON se codifique en un formato específico. Si no se especifica el formato, splunk_format.txt se selecciona de forma predeterminada. Para Elasticsearch, configure elastic_format.txt como nombre de archivo. También puede definir su propio archivo de formato de datos personalizado para su caso de uso. Para obtener más información sobre el archivo de formato de datos personalizado, consulte Filtrado de registros de datos por campos.

      NOTA:

      Para <filename>, no configure la ruta absoluta del nombre del archivo. Introduzca solo el nombre del archivo.

    • -analyticsEndpointContentType: El encabezado Content-Type. El valor codificado es application/json.

    • -analyticsEndpointUrl: la ruta de Elasticsearch en la que se deben registrar las transacciones. Por ejemplo, /_bulk. NetScaler se comunica con Elasticsearch mediante la API en bloque. Para obtener más información sobre la API en bloque, consulte https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html.

      NOTA:

      Puede modificar los parámetros del perfil de análisis mediante el comando set analytics profile.

  3. Verifique la configuración del perfil de análisis mediante el comando show analytics profile.

    > sh analytics profile 
    
  4. Enlace el perfil de análisis al servidor virtual.

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

    Ejemplo

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

Una vez completada la configuración, según el tráfico, las transacciones se registrarán y exportarán a Elasticsearch.

Filtrado de registros de datos basado en campos

De forma predeterminada, NetScaler exporta cientos de campos del registro de transacciones, incluso cuando los dispositivos de punto final no requieren todos los datos exportados. Además, cada dispositivo de punto final espera que la carga útil de JSON se codifique en un formato específico, como el inicio y el final de un registro de datos, el delimitador entre los registros de datos y el inicio y el final del búfer.

Elasticsearch espera que la carga útil JSON que proviene de NetScaler se codifique en el siguiente formato:

  • Inicio y fin del búfer: no se requiere ningún valor para BUFFER-START y BUFFER-END. Al final del búfer, debe agregar una línea en blanco.
  • Inicio y fin del registro de datos: el registro de datos debe empezar por {"index": {"_index": "transactions"}} { y terminar por }. Todos los campos que se exportan deben capturarse entre DATA-START y 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
    
  • Delimitador entre registros de datos: una línea en blanco entre los registros de datos.

De forma predeterminada, elastic_format.txt está disponible en la carpeta var/analytics_conf que contiene el formato de carga útil JSON que Elasticsearch espera y también contiene algunos campos predeterminados para los que se exportan los datos. Puede configurar elastic_format.txt como valor del parámetro -dataFormatFile en el comando agregar perfil de análisis.

El siguiente es un ejemplo de archivo de formato de datos para 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

El archivo JSON_fields.txt en var/analytics_conf es un archivo maestro de referencia que contiene la lista completa de campos junto con sus números de identificación. Los campos del archivo maestro se clasifican en función de la información. Por ejemplo, si quiere conocer los campos asociados a HDX insight, puede consultar la categoría HDX insights del archivo JSON_fields.txt para conocer los campos asociados a la categoría HDX insights.

Puede personalizar el archivo elastic_format.txt según sus necesidades. Por ejemplo, si quiere exportar HDX Insights, puede buscar en la categoría HDX Insights del archivo JSON_fields.txt y agregar los campos obligatorios en el archivo elastic_format.txt. Del mismo modo, puede eliminar los campos que no desee exportar.

Tras personalizar el archivo elastic_format.txt, ejecute el siguiente comando para actualizar el perfil de análisis:

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

Ejemplo:

update analytics profile ns _analytics_ default_http_profile -dataFormatFile elastic_format.txt

También puede especificar el valor del archivo de formato de datos mediante la GUI. Vaya a System > AppFlow > Analytics Profiles y haga clic en Add. En la página Crear perfil de Analytics, si selecciona una de las siguientes opciones de Tipo, aparece el campo Archivo de formato de datos, donde puede especificar el nombre del archivo:

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

Salidas de muestra

Esta sección contiene ejemplos de resultados para diferentes registros de transacciones.

Ejemplo de salida del registro de transacciones HTTP

El siguiente es un ejemplo de salida para el registro de transacciones 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
}

Ejemplo de salida del registro de transacciones TCP

El siguiente es un ejemplo de salida para el registro de transacciones 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
}

Ejemplo de salida del registro de transacciones SSL

El siguiente es un ejemplo de salida para el registro de transacciones 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
}

Ejemplo de resultado del registro de transacciones de Web Insight

El siguiente es un ejemplo de salida para el registro de transacciones de 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
}