ADC

Supervisión de NetScaler, las aplicaciones y la seguridad de las aplicaciones mediante Prometheus

Las métricas son una representación numérica de los datos que se miden durante un período de tiempo determinado. Los datos métricos son útiles para realizar un seguimiento del estado de un sistema a lo largo del tiempo. Prometheus es una herramienta de supervisión de código abierto que recopila datos de métricas y los almacena con una marca de tiempo en la que se registraron los datos.

Al monitorear y analizar las métricas, puede realizar un seguimiento del estado de sus aplicaciones, detectar cualquier anomalía, crear alertas y tomar las medidas correctivas necesarias para garantizar una entrega de software sólida.

NetScaler ahora admite la exportación directa de métricas a Prometheus. Puede utilizar el amplio conjunto de métricas que proporciona NetScaler ADC para supervisar el estado de NetScaler y el estado de las aplicaciones. Por ejemplo, puede recopilar métricas sobre el uso de la CPU y la memoria para conocer el estado de NetScaler. Del mismo modo, puede utilizar métricas como la cantidad de solicitudes HTTP recibidas por segundo o la cantidad de clientes activos para supervisar el estado de la aplicación.

Exportación de métricas de NetScaler a Prometheus

NetScaler admite el modo de extracción y el modo push de Prometheus. En el modo de extracción, debe configurar un perfil de series temporales que Prometheus consulte a intervalos regulares y extraiga los datos de las métricas directamente sin un recurso exportador intermedio. Con el modo de extracción, puede habilitar el acceso de solo lectura para que un usuario sin privilegios de superusuario exporte métricas a Prometheus. Con Grafana, puede visualizar las métricas de NetScaler exportadas a Prometheus para facilitar su interpretación y comprensión.

El siguiente diagrama muestra una integración de Prometheus y Grafana con NetScaler.

Integración de NetScaler con Prometheus y Grafana

Configure la exportación de métricas de NetScaler a Prometheus y la visualización con Grafana

Debe realizar los siguientes pasos para configurar la exportación de métricas de NetScaler a Prometheus y visualizarlas con Grafana.

  1. Configure NetScaler con un perfil de análisis de series temporales para exportar métricas a Prometheus.
  2. Instale prometheus y configúrelo con los parámetros específicos de NetScaler.
  3. Agregue Prometheus como fuente de datos en Grafana.
  4. Crea una visualización en Grafana

Configure un perfil de análisis de series temporales en NetScaler para admitir el modo de extracción de Prometheus

Siga los siguientes pasos para configurar el modo de extracción mediante la CLI de NetScaler:

  1. Cree un perfil de análisis con el tipo de serie temporal. Especifique el archivo de esquema con las métricas de NetScaler necesarias.

    add analytics profile <timeseries_profile_name> -type timeseries -schemaFile <name_of_schema_file>
    -outputMode Prometheus -serveMode PULL -metrics ENABLED
    

    En este comando:

    • timeseries_profile_name: especifique el nombre del perfil de la serie temporal.
    • schemaFile: especifique el nombre del archivo de esquema con los contadores NetScaler. De forma predeterminada, se configura un archivo de esquema /var/metrics_conf/schema.json con una lista de contadores. En la ruta también hay disponible un archivo de esquema de referencia reference_schema.json con todos los contadores compatibles /var/metrics_conf/. Este archivo de esquema se puede utilizar como referencia para crear una lista personalizada de contadores. Al especificar el archivo de esquema, la ruta del archivo de esquema /var/metrics_conf/ se agrega automáticamente y solo debe mencionar el nombre del archivo de esquema. Por ejemplo, si ha creado un archivo de esquema schema1.json con una lista personalizada de contadores en /var/metrics_conf/, solo debe especificar el nombre del archivo como schema1.json.

    • outputMode: Configure el modo de salida como Prometheus.
    • serveMode: especifique el modo de extracción de Prometheus.
    • metrics: Habilite la recopilación de métricas de NetScaler.

Nota:

Puede configurar un perfil de análisis con todos los parámetros necesarios mediante el comando add. Si necesita realizar cambios después de crear el perfil, puede utilizar el comando set para realizar las acciones adecuadas, como inhabilitar las métricas y cambiar el modo de servidor. Puede configurar el acceso de solo lectura a Prometheus para un usuario que no sea un superusuario. Para obtener más información, consulte Configurar el acceso de solo lectura a Prometheus para personas que no sean superusuarios.

Instale y configure Prometheus para la exportación de métricas desde NetScaler

Puedes descargar Prometheus desde repositorios como DockerHub o Quay o desde el repositorio oficial de Prometheus.

Para ejecutar Prometheus como contenedor de Docker, utilice el siguiente comando:

    docker run -dp 39090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml --name native_prom prom/prometheus:latest  > **Nota:** > > En este caso, `/tmp/prometheus.yml` se utiliza como ruta al archivo `prometheus.yml`. En lugar de eso, puede especificar la ruta en la máquina virtual.

Debe modificar el archivo prometheus.yml con los parámetros NetScaler.

Para exportar métricas de NetScaler, debe especificar los siguientes parámetros específicos de NetScaler en la sección Configuración de fragmentos de YAML de Prometheus. La sección de configuración de raspado especifica un conjunto de objetivos y parámetros de configuración que describen cómo eliminarlos.

  • metrics_path: Especifique la ruta del recurso HTTP en NetScaler (/nitro/v1/config/systemfile) para obtener las métricas.
  • username: especifique el nombre de usuario de NetScaler.
  • password: especifique la contraseña de NetScaler.
  • targets: especifique la dirección IP del NetScaler desde el que necesita exportar las métricas, las métricas y el puerto que quiere exponer.
  • filename: Especifique el nombre del perfil de serie temporal configurado en lugar de timeseries_profile_name en el archivo metrics_prom_<timeseries_profile_name>.log.
  • filelocation: Especifique la ubicación del archivo como /var/nslog.

A continuación se muestra la sección de configuración descartada del YAML de Prometheus para agregar la dirección IP de NetScaler como destino en Prometheus para exportar métricas. En este caso, se utiliza HTTP como esquema. Puede utilizar HTTP o HTTPS.

scrape_configs:
  - job_name: 'vpx2_metrics_direct'
    metrics_path: /nitro/v1/config/systemfile
    params:
      args: ['filename:metrics_prom_ns_analytics_time_series_profile.log,filelocation:/var/nslog']
      format: ['prometheus']
    basic_auth:
     username: 'prom_user'
     password: 'user_password'
    scheme: http
    scrape_interval: 30s
    static_configs:
     - targets: ['10.102.34.231:80']
<!--NeedCopy-->

Agregue Prometheus como fuente de datos en Grafana

Si necesita visualizar las métricas mediante los paneles de control de Grafana, debe agregar Prometheus como fuente de datos en Grafana. Para obtener más información, consulte agregar Prometheus como fuente de datos en Grafana.

Crea la visualización de métricas en Grafana

Puede crear un panel de control de Grafana y seleccionar las métricas clave y el tipo de visualización adecuado.

El siguiente procedimiento muestra cómo agregar una métrica al panel de Grafana y crear un panel de visualización de ejemplo.

  1. Especifique el título del panel.
  2. En la ficha Consulta, para la consulta A, especifique la métrica requerida.
  3. En la ficha Configuración, seleccione el tipo de visualización.

Puede modificar los datos y su representación en Grafana. Para obtener más información, consulte la documentación de Grafana.

A continuación se muestra un ejemplo de panel de Grafana con algunas métricas de NetScaler:

Ejemplo de panel de control de Grafana

En este panel, puede ver gráficos de diferentes métricas de NetScaler, como:

  • vsvr_tot_Hits: muestra el número de solicitudes recibidas por el servidor virtual.
  • cc_cpu_use: muestra el porcentaje de utilización de la CPU.
  • http_tot_Requests: Muestra las solicitudes HTTP recibidas.
  • serv_tot_serviced: Muestra la solicitud que se está atendiendo.
  • mem_cur_used_size: muestra la memoria que se utiliza actualmente del dispositivo NetScaler.

Ejemplos de gráficos de Prometheus

Con el explorador web de expresiones de Prometheus, puede mostrar las métricas de series temporales recopiladas por el servidor Prometheus. Puede acceder al explorador web de expresiones seleccionando prometheu-server-ip-address/graph en su explorador web. Puede introducir una expresión y ver el resultado en forma de tabla o gráfico a lo largo del tiempo. Especifique la métrica exacta que quiere mostrar escribiendo el nombre de la métrica en el campo Expresión. Puede especificar varios contadores mediante paneles diferentes.

Este diagrama muestra los gráficos de Prometheus para las métricas cpu_use y http_tot_requests de NetScaler.

Ejemplo de tablero de instrumentos de Prometheus

Ejemplo de panel de control de Grafana

Puede descargar los paneles de ejemplo desde la página de descargas de NetScaler.

El siguiente es un ejemplo de panel de Grafana con la opción de ver las distintas métricas de la infraestructura general en un solo lugar, como el estado de NetScaler, el estado del servidor virtual, el estado de las aplicaciones (aplicaciones HTTP y TCP) y la seguridad de las aplicaciones (aplicaciones SSL).

Ejemplo de panel de control de Grafana

Puede ampliar la sección correspondiente del panel para ver la visualización detallada de cada sección, como las aplicaciones HTTP, las aplicaciones SSL, las aplicaciones TCP, las estadísticas del servidor virtual (vStats) y las estadísticas de NetScaler.

El siguiente diagrama muestra un ejemplo de panel de Grafana con las estadísticas de NetScaler ampliadas:

Ejemplo de panel de control de Grafana

Información adicional

Esquema con los contadores NetScaler necesarios para exportar

El recopilador de métricas exporta los contadores presentes en el archivo de esquema configurado. El /var/metrics_conf/schema.json archivo es el archivo de esquema predeterminado configurado en el perfil de análisis.

El archivo de esquema es una lista de tipos de entidades y contadores asociados. En el esquema, todos los contadores globales o de nivel de sistema se agrupan bajo el tipo de entidad. netscaler Algunos de los contadores globales son el uso de la CPU (cpu_use), el uso de la CPU de administración (mgmt_cpu_use) y el número total de solicitudes HTTP recibidas (http_tot_Requests). Los contadores específicos de los grupos de servicios lbvservercsvserver, etc. se enumeran en los tipos de entidades respectivos.

A continuación se muestra un ejemplo de los contadores del schema.json archivo de la entidad del servidor virtual de autenticación (vserver_authn).

"vserver_authn":
  [
      {"name":"si_tot_Requests","rate":"True"},
      {"name":"si_tot_Responses","rate":"True"},
      {"name":"si_tot_RequestBytes","rate":"True"},
      {"name":"si_cur_state","rate":"False"},
      {"name":"si_tot_ResponseBytes","rate":"True"},
      {"name":"si_peer_port","rate":"True"},
      {"name":"vsvr_Protocol","rate":"False"}
  ]

En la siguiente tabla se explican los contadores que se mencionan en este ejemplo:

Nombre de contador Descripción
si_tot_Requests Número total de solicitudes recibidas en este servicio o servidor virtual.
si_tot_Responses Número total de respuestas recibidas en este servicio o servidor virtual.
si_tot_RequestBytes Número total de bytes de solicitud recibidos en este servicio o servidor virtual.
si_cur_state Estado actual del servidor virtual.
si_tot_ResponseBytes Número total de bytes de respuesta recibidos en este servicio o servidor virtual.
si_peer_port El puerto en el que se ejecuta el servicio.
vsvr_Protocol Protocolo asociado al servidor virtual.

El rate campo se puede configurar como True si fuera necesario exportar el valor de la tasa de un contador. Por ejemplo, la tasa de si_tot_Requests se exporta si rate se establece en True for si_tot_Requests.

A continuación se muestra un ejemplo de contadores de la netscaler entidad.

  "netscaler":
    [   
        {"name":"cpu_use","rate":"False"},
        {"name":"mgmt_cpu_use","rate":"False"},
        {"name":"tcp_tot_rxpkts","rate":"True"},
        {"name":"tcp_tot_rxbytes","rate":"True"},
        {"name":"tcp_tot_txpkts","rate":"True"},
        {"name":"tcp_tot_txbytes","rate":"True"},
        {"name":"tcp_cur_ClientConnEst","rate":"False"},
        {"name":"tcp_cur_ServerConnEst","rate":"False"},
        {"name":"tcp_cur_ClientConn","rate":"False"},
        {"name":"tcp_cur_ClientConnClosing","rate":"False"},
        {"name":"tcp_tot_ClientOpen","rate":"True"},
        {"name":"tcp_cur_ServerConn","rate":"False"},
        {"name":"tcp_cur_ServerConnClosing","rate":"False"},
        {"name":"http_tot_Requests","rate":"True"},
        {"name":"http_tot_Responses","rate":"True"},
        {"name":"http_tot_Gets","rate":"True"},
        {"name":"http_tot_Posts","rate":"True"},
        {"name":"http_tot_Others","rate":"True"},
    ]

En la siguiente tabla se explican los contadores que se mencionan en este ejemplo:

Nombre de contador Descripción
cpu_use Realiza un seguimiento del porcentaje de utilización de la CPU (porcentaje de utilización de la CPU * 10).
tcp_tot_rxpkts Paquetes TCP recibidos.
tcp_tot_rxbytes Bytes de datos TCP recibidos.
tcp_tot_txpkts Paquetes TCP transmitidos.
tcp_tot_txbytes Bytes de datos TCP transmitidos.
tcp_cur_ClientConnEst Conexiones de cliente actuales en estado establecido, lo que indica que se puede transferir datos entre el dispositivo NetScaler y el cliente.
tcp_cur_ServerConnEst Las conexiones actuales al servidor están en estado establecido, lo que indica que se puede transferir datos entre el dispositivo NetScaler y el servidor.
tcp_cur_ClientConn Conexiones de cliente, incluidas las conexiones en estado de apertura, establecimiento y cierre. Conexiones de servidor, incluidas las conexiones en estado de apertura, establecimiento y cierre.
tcp_cur_ClientConnClosing Las conexiones del cliente están en estado de cierre, lo que indica que el proceso de finalización de la conexión se ha iniciado pero no se ha completado.
tcp_cur_ServerConn Conexiones de servidor, incluidas las conexiones en estado de apertura, establecimiento y cierre.
tcp_cur_ServerConnClosing Conexiones al servidor en estado de cierre, lo que indica que el proceso de finalización de la conexión se ha iniciado pero no se ha completado.
http_tot_Requests Este contador realiza un seguimiento de las solicitudes HTTP recibidas mediante el método GET.
http_tot_Responses Este contador realiza un seguimiento de las solicitudes HTTP recibidas mediante el método POST.
http_tot_Gets Este contador realiza un seguimiento de las solicitudes HTTP recibidas mediante el método GET.
http_tot_Posts Este contador realiza un seguimiento de las solicitudes HTTP recibidas.
http_tot_Others Este contador realiza un seguimiento de las solicitudes HTTP recibidas mediante métodos distintos de GET y POST.

A continuación se muestra un ejemplo de contadores de la vserver_ssl entidad.

"vserver_ssl":
[
    {"name":"ssl_ctx_tot_session_hits","rate":"True"},
    {"name":"ssl_ctx_tot_session_new","rate":"True"},
    {"name":"ssl_ctx_tot_enc_bytes","rate":"True"},
    {"name":"ssl_ctx_tot_dec_bytes","rate":"True"},
]

En la siguiente tabla se explican los contadores SSL que se mencionan en este ejemplo:

Nombre de contador Descripción
ssl_ctx_tot_session_hits Este contador registra el número de visitas a la sesión.
ssl_ctx_tot_session_new Este contador realiza un seguimiento del número de sesiones nuevas creadas.
ssl_ctx_tot_enc_bytes Este contador realiza un seguimiento del número de bytes cifrados por servidor virtual SSL.
ssl_ctx_tot_dec_bytes Este contador realiza un seguimiento del número de bytes descifrados por servidor virtual SSL.

Configure el acceso de solo lectura a Prometheus para un usuario que no sea un superusuario

Realice los siguientes pasos para configurar el acceso de solo lectura a Prometheus para un usuario que no sea un superusuario.

  1. Agregue un nuevo usuario al dispositivo NetScaler.

     add system user <ns_user_name> <ns_user's_password> -externalAuth enabled -promptString user-%u-at-%T logging enaBLED
    

    Ejemplo:

     add system user nspaul nspaul -externalAuth enabled -promptString user-%u-at-%T logging enaBLED
    
  2. Cree una directiva de comandos para un usuario de solo lectura. Esta directiva de comandos permite el acceso de solo lectura desde cualquier archivo del /var/nslog/ directory.

    add system cmdPolicy read-only-prometheus ALLOW \"\(^man.\*)|\(^show\s+\(?!system)\(?!configstatus)\(?!ns ns\.conf)\(?!ns savedconfig)\(?!ns runningConfig)\(?!gslb runningConfig)\(?!audit messages)\(?!techsupport).\*)|\(^stat.\*)|\(show system file .\* -filelocation \"/var/nslog\")\"
    
  3. Si las métricas solo se escriben en un archivo determinado, puedes incluso limitar el acceso de los usuarios para que solo puedan obtener ese archivo específico.

    add system cmdPolicy read-only-prometheus ALLOW \"\(^man.\*)|\(^show\s+\(!system)\(!configstatus)\(!ns ns\.conf)\(!ns savedconfig)
    \(!ns runningConfig)\(!gslb   runningConfig)\(!audit messages)\(!techsupport).\*)|\(^stat.\*)
    |\(show system file metrics\_prom\_<name\_of\_timeseries\_profile>.log -filelocation \"/var/nslog\")\"
    

    Nota:

    En el comando show system file, especifique el nombre del perfil de serie temporal que ha configurado en su lugar de name_of_ timeseries_profile.

  4. Enlazar un usuario con la directiva de comandos.

    bind system user <userName> \(\(<policyName> <priority>) | -partitionName <string>)
    

    Por ejemplo:

    bind system user user1 read-only-prometheus 0
    

Para desvincular y eliminar un usuario de la directiva de comandos, utilice los siguientes comandos:

  1. Desvincule a un usuario configurado de la directiva de comandos del sistema.

    unbind system user <userName> \(<policyName> | -partitionName <string>
    

    Por ejemplo:

    unbind system user user1 read-only-prometheus
    
  2. Elimine el comando Policy de NetScaler.

    rm system cmdPolicy read-only-prometheus
    

Suscripción de contadores para múltiples perfiles de series temporales

Ahora, NetScaler admite la creación de varios perfiles de series temporales y especifica diferentes conjuntos de contadores para cada perfil. Además, puede exportar solo los contadores según sus requisitos.

Debe crear varios archivos schema.json que contengan los contadores necesarios con nombres únicos y la extensión .json para configurar varios perfiles de series temporales. Hay un archivo de esquema de referencia reference_schema.json disponible debajo de la ruta /var/metrics_conf/. Puede modificar el esquema de referencia según sus requisitos y utilizarlo en consecuencia.

La configuración de los dos nuevos perfiles de series temporales es la siguiente:

add analytics profile ns_analytics_timeseries_profile_1   -type timeseries -schemaFile schema1.json

set analytics profile  ns_analytics_timeseries_profile_1 -outputMode prometheus -serveMode PULL -metrics ENABLED

add analytics profile ns_analytics_timeseries_profile_2   -type timeseries -schemaFile schema2.json

set analytics profile  ns_analytics_timeseries_profile_2 -outputMode prometheus -serveMode PULL -metrics ENABLED

En este ejemplo, schema1.json y schema2.json tienen diferentes conjuntos de contadores.

Configuración de Prometheus

La configuración de un archivo prometheus.yml de muestra es la siguiente:

scrape_configs:
  - job_name: 'vpx2_metrics_direct'
    metrics_path: /nitro/v1/config/systemfile
    params:
      args: ['filename:metrics_prom_ns_analytics_time_series_profile.log,filelocation:/var/nslog']
      format: ['prometheus']
    basic_auth:
     username: 'prom_user'
     password: 'user_password'
    scheme: https
    scrape_interval: 30s
    static_configs:
     - targets: ['<ADC1-ip>:<port>', '<ADC2-ip>:<port>']
<!--NeedCopy-->
Supervisión de NetScaler, las aplicaciones y la seguridad de las aplicaciones mediante Prometheus