Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Guía de telemetría extensible

Descripción general de la telemetría extensible

Instale los controladores de dispositivos Apstra y los recolectores de telemetría para recopilar telemetría adicional que se pueda usar en las sondas IBA. Los controladores de dispositivo permiten que Apstra se conecte a un NOS y recopile telemetría. Apstra se envía con controladores para EOS, NX-OS, Ubuntu y CentOS. Para agregar un controlador para un sistema operativo que no se enumera aquí, póngase en contacto con el soporte de Juniper.

Los recolectores de telemetría son módulos de Python que ayudan a recopilar telemetría extendida. En las siguientes secciones se describe la canalización para crear recolectores de telemetría y extender Apstra con nuevos recolectores. Necesita estar familiarizado con Python para poder desarrollar recolectores.

Configurar un entorno de desarrollo

Para obtener acceso a los recolectores de telemetría (que se alojan en el depósito de aos_developer_sdk ), póngase en contacto con el soporte de Juniper. Aporte al repositorio cualquier recopilador nuevo que desarrolle.

Para mantener intacto el entorno del sistema, recomendamos que use un entorno virtual para aislar los paquetes de Python necesarios (para el desarrollo y las pruebas). Puede descargar el entorno de desarrollo base , aos_developer_sdk.run, desde https://support.juniper.net/support/downloads/?p=apstra/. Para cargar el entorno, ejecute lo siguiente:

Este comando carga el aos_developer_sdk imagen de Docker. Después de completar la carga de la imagen, se imprime el comando para iniciar el entorno. Inicie el entorno de contenedor según lo especificado por el comando. Para instalar las dependencias, ejecute lo siguiente:

El entorno está configurado para desarrollar y probar los recolectores. Los paquetes del SDK de Apstra, como los controladores de dispositivo y el cliente REST, también se instalan en el entorno.

Desarrollar recolector

Para desarrollar un recopilador de telemetría, especifique lo siguiente en orden.

  1. Servicio para el que se desarrolla el recopilador: identifique cuál es el servicio. Por ejemplo, el servicio podría ser recopilar bytes recibidos y transmitidos de las interfaces del conmutador. Identifique un nombre para el servicio. Está prohibido usar nombres de servicio reservados para servicios integrados (ARP, BGP, interfaz, nombre de host, ruta, MAC, XCVR, LAG, MLAG).
  2. El esquema de los datos proporcionados a Apstra: identifique cómo se va a estructurar la salida del recopilador. Se debe publicar una colección de pares clave-valor en Apstra. Identifique qué es cada elemento, es decir, cuál es la clave/valor sintáctica y semánticamente. Para el ejemplo mencionado anteriormente, la clave es una cadena que identifica el nombre de la interfaz. El valor es una cadena JSON, con el JSON con dos claves 'rx' y 'tx' que tienen un valor entero.
  3. Sistema operativo de red (NOS) para el que se desarrolla el recopilador: los complementos del recopilador son específicos de NOS. Antes de escribir un recopilador, identifique los NOS para los que se requieren recolectores.
  4. Cómo se pueden obtener los datos necesarios del dispositivo: identifique los comandos que se pueden utilizar en el dispositivo para recuperar la información requerida. Por ejemplo, el comando 'show interfaces' da bytes recibidos y transmitidos desde un dispositivo ARista EOS.
  5. Ruta de esquema de almacenamiento: el tipo de clave y valor de cada elemento determina la ruta del esquema de almacenamiento. El tipo de recopilador seleccionado determina el esquema de almacenamiento de la aplicación. El esquema de almacenamiento define la estructura de alto nivel de los datos devueltos por el servicio. La ruta de esquema de almacenamiento del recopilador se puede determinar mediante la tabla siguiente:
    Tabla 1: Determinación de la ruta del esquema de almacenamiento
    Tipo de clave Valor tipo de ruta de esquema de almacenamiento
    Cadena Cadena aos.sdk.telemetry.schemas.generic
    Cadena Dict aos.sdk.telemetry.schemas.generic
    Dict Cadena aos.sdk.telemetry.schemas.iba_string_data
    Dict Entero aos.sdk.telemetry.schemas.iba_integer_data
  6. Esquema de aplicación: el esquema de aplicación define el esquema para cada elemento publicado en el marco de trabajo. El esquema de aplicación se expresa mediante el borrador 4 de la versión del esquema json. Cada elemento está compuesto por una clave y un valor. En la tabla siguiente se especifican dos elementos de ejemplo.
    de almacenamiento
    Tabla 2: Elemento de ejemplo con su ruta de esquema de almacenamiento
    Elemento de ejemplo de ruta de esquema
    aos.sdk.telemetry.schemas.generic
    {
        "identity": "eth0",
        "value": "up",
    }
    aos.sdk.telemetry.schemas.iba_string_data
    {
        "key": {
            "source_ip": "10.1.1.1",
            "dest_ip": "10.1.1.2",
        },
        "value": "up",
    }
    Nota:

    * Un elemento devuelto por los recolectores con esquema de almacenamiento genérico debe especificar el valor de la clave mediante la clave 'identidad' y el valor usando la clave 'valor'.

    * Un elemento devuelto por los recolectores con esquemas basados en IBA debe especificar el valor de la clave usando la clave 'key' y el valor usando la clave 'value'.

    Con esta información, puede escribir el esquema JSON. La tabla siguiente asigna el elemento de ejemplo especificado anteriormente a su esquema JSON correspondiente.

    Tabla 3: Esquema de aplicación de ejemplo
    Esquema de aplicación de elemento de ejemplo
    {
        "identity": "eth0",
        "value": "up",
    }
    {
        "type": "object",
        "properties": {
            "identity": {
                "type": "string",
            },
            "value": {
                "type": "string",
            }
        }
    }
    {
    {
        "key": {
            "source_ip": "10.1.1.1",
            "dest_ip": "10.1.1.2",
        },
        "value": "up",
    }
    {
        "type": "object",
        "properties": {
            "key": {
                "type": "object",
                "properties": {
                    "source_ip": {
                        "type": "string",
                        "format": "ipv4"
                    },
                    "dest_ip": {
                        "type": "string",
                        "format": "ipv4"
                    },
                    "required": ["source_ip", "dest_ip"],
                }
            },
            "value": {
                "type": "string",
            }
        }
    }
    {

    Puede especificar esquemas más complejos mediante las construcciones disponibles en el esquema JSON. Actualizar el esquema en el archivo aos_developer_sdk/aosstdcollectors/aosstdcollectors/json_schemas/<service_name>.json

    Nota:

    A partir de apstra versión 4.0.1, puede importar el esquema de servicio a través de la GUI.

Recolector de escritura

Recopilador es una clase que debe derivar de aos.sdk.system_agent.base_telemetry_collector. Colelector basetelemetría. Reemplazar el método collect del recopilador con la lógica para:

Recopile datos desde el dispositivo

La instancia de controlador de dispositivo dentro del recopilador proporciona métodos para ejecutar comandos en los dispositivos. Por ejemplo, la mayoría de los controladores de dispositivos de Apstra proporcionan métodos get_json y get_text para ejecutar comandos y devolver la salida.

Nota:

Los controladores de dispositivo para aos_developer_sdk entorno están preinstalados. Puede explorar los métodos disponibles para recopilar datos. Por ejemplo:

Análisis de datos

Los datos recopilados deben analizarse y formatearse de acuerdo con el marco de trabajo de Apstra y el esquema de servicio identificado anteriormente. Los recolectores con esquema de almacenamiento genérico siguen la siguiente estructura:

Los recolectores con esquema basado en IBA siguen la siguiente estructura:

En las estructuras anteriores, los datos publicados tienen varios elementos. Cada elemento tiene una clave y un valor. Por ejemplo, para publicar información específica de interfaz, habría un par identidad/clave-valor para cada interfaz que desea publicar en el marco.

Nota:

En el caso de que desee usar un paquete de terceros para analizar los datos obtenidos de un dispositivo, indique el paquete y la versión de Python en la ruta de acceso.

<aos_developer_sdk>/aosstdcollectors/requirements_<NOS>.txt. Los paquetes instalados por la dependencia no entran en conflicto con los paquetes que usa el software de Apstra. Los paquetes instalados por Apstra están disponibles /etc/aos/python_dependency.txt en el entorno de desarrollo.

Enviar datos al marco de trabajo

Cuando los datos se recopilan y se analiza según el esquema necesario, publique los datos en el marco. Puede usar el post_data método disponible en el recopilador. Acepta un argumento, y ese es los datos que se deben publicar en el marco.

La carpeta aos_developer_sdk/aosstdcollectors/aosstdcollectors del repositorio contiene carpetas para cada NOS. Agregue el recopilador a la carpeta que coincida con el NOS. Cumulus ya no es compatible con Apstra versión 4.1.0, aunque este ejemplo sigue siendo ilustrativo. Por ejemplo, para escribir un recopilador para Cumulus, agregue el recopilador a , y asigne un nombre al aos_developer_sdk/aosstdcollectors/aosstdcollectors/cumulusarchivo después del nombre de servicio. Por ejemplo, si el nombre del servicio es interface_in_out_bytes, asigne un nombre al archivo interface_in_out_bytes.py.

Además de definir la clase del recopilador, defina la función collector_plugin en el archivo del recopilador. La función toma un argumento y devuelve la clase de recopilador que se implementa.

Por ejemplo, un recopilador genérico basado en esquemas de almacenamiento tiene el siguiente aspecto:

Un recopilador basado en esquemas de almacenamiento IBA tiene el siguiente aspecto:

Recolector de pruebas unitarias

La carpeta aos_developer_sdk/aosstdcollectors/test del repositorio contiene carpetas basadas en el NOS. Agregue la prueba a la carpeta que coincida con el NOS. Por ejemplo, se agrega una prueba a un recopilador para Cumulus a aos_developer_sdk/aosstdcollectors/test/cumulus. Recomendamos que nombre la prueba unitaria con el prefijo test_.

La infraestructura existente implementa un dispositivo collector_factory Pytest que se utiliza para simular la respuesta de comando del controlador del dispositivo. El flujo general para el desarrollo de pruebas es el siguiente.

  1. Use la fábrica de recolector para obtener una instancia de recopilador y se burló del marco de Trabajo de Apstra. La fábrica del recopilador toma la clase del recopilador que ha escrito como entrada.
  2. Simulación de la respuesta del dispositivo.
  3. Método Invoke collect.
  4. Valide los datos publicados en el marco simulado de Apstra.

Por ejemplo, una prueba tiene el siguiente aspecto:

Para ejecutar la prueba, ejecute lo siguiente:

Este comando ejecuta todas las pruebas en el repositorio.

Recolector de paquetes

Todos los recolectores están empaquetados en base al NOS. Para generar todos los paquetes, ejecute make en aos_develop_sdk. Puede encontrar los paquetes de compilación en aos_developer_sdk/dist. La compilación de paquetes se puede clasificar en términos generales como:

Descripción del paquete
Paquetes de recolector integrados Estos paquetes tienen el prefijo aosstdcollectors_builtin_. Para recopilar telemetría desde un dispositivo según el diseño de referencia, Apstra requiere servicios como se enumeran en la <deviceblah> sección. Los paquetes de recolección integrados contienen recolectores para estos servicios. Los paquetes se generan por NOS.
Paquetes de recolección personalizados

Estos paquetes tienen el prefijo aosstdcollectors_custom_ en sus nombres. Los paquetes se generan por NOS. El paquete denominado aosstdcollectors_custom_<NOS>-0.1.0-py2-none-any.whl contiene el recopilador desarrollado.

Paquetes de controladores de dispositivos de Apstra SDK

Estos paquetes tienen un prefijo apstra_devicedriver_. Estos paquetes se generan por NOS. Los paquetes se generan para NOS que no están disponibles de forma predeterminada en Apstra.

Cargar paquetes

Si los paquetes de recolección integrados y el controlador de dispositivo del SDK de Apstra para su sistema operativo de dispositivo (NOS) no se proporcionaron con el software Apstra, debe cargarlos en el servidor de Apstra.

Si está utilizando una solución offbox y su NOS no es EOS, debe cargar el paquete del recolector integrado.

Cargue el paquete que contiene los recolectores y asígnelos a un agente de sistema de dispositivos o a un perfil de agente de sistema.

Usar recolector de telemetría

Configurar el registro del servicio de telemetría

El Registro asigna el servicio a su esquema de aplicación y a la ruta de esquema de almacenamiento. Puede administrar el registro del servicio de telemetría con el punto de conexión /api/telemetry-service-registryREST. No puede habilitar el recopilador para un servicio sin agregar una entrada del Registro para el servicio en particular. La entrada del Registro de un servicio no se puede modificar mientras el servicio está en uso.

Nota:

Al ejecutar make, todos los esquemas de aplicación se empaquetan en un archivo tar (json_schemas.tgz) en la carpeta dist. Con apstra-cli, tiene la opción de importar todos los esquemas en el archivo .tgz.

Iniciar recopilador

Para iniciar un servicio, use la API /api/systems/<system_id>/services POST con los tres argumentos siguientes:

Argumentos  
Input_data Los datos proporcionados como entrada al recopilador. Valores predeterminados a Ninguno.
Intervalo Intervalo en el que se ejecutará el servicio. Los valores predeterminados son de 120 segundos.
Nombre Nombre del servicio.
Nota:

También puede administrar recolectores a través de la utilidad apstra-cli.

Eliminar recopilador

Para eliminar un servicio, utilice la API /api/systems/<system_id>/services/<service_name>DELETE .

Obtener datos recopilados

Para recuperar los datos recopilados, utilice la API /api/systems/<system_id>/services/<service_name>/dataGET . Solo se guardan los datos recopilados en la última iteración. Los datos no persisten durante el reinicio de Apstra.

Servicios de recolector en ejecución de lista

Para recuperar la lista de servicios habilitados en un dispositivo, utilice la API /api/systems/<system_id>/servicesGET .