Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

확장 가능한 텔레메트리 가이드

확장 가능한 텔레메트리 개요

Apstra 디바이스 드라이버와 텔레메트리 수집기를 설치하여 분석 프로브에 사용할 수 있는 추가 텔레메트리를 수집합니다. 디바이스 드라이버를 사용하면 Apstra가 NOS에 연결하고 텔레메트리를 수집할 수 있습니다. Apstra는 EOS, NX-OS, Ubuntu 및 CentOS용 드라이버와 함께 제공됩니다. 여기에 나열되지 않은 운영 체제용 드라이버를 추가하려면 주니퍼 지원에 문의하십시오.

원격 분석 수집기는 확장된 원격 분석을 수집하는 데 도움이 되는 Python 모듈입니다. 다음 섹션에서는 텔레메트리 수집기를 생성하고 새 수집기로 Apstra를 확장하기 위한 파이프라인에 대해 설명합니다. 수집기를 개발하려면 Python에 익숙해야 합니다.

개발 환경 설정

텔레메트리 수집기( aos_developer_sdk 저장소에 보관되어 있음)에 액세스하려면 주니퍼 지원에 문의하십시오. 개발하는 모든 새 수집기를 저장소에 기여합니다.

시스템 환경을 그대로 유지하려면 가상 환경을 사용하여 필요한 Python 패키지(개발 및 테스트용)를 격리하는 것이 좋습니다. https://support.juniper.net/support/downloads/?p=apstra/ 에서 기본 개발 환경 aos_developer_sdk.run을 다운로드할 수 있습니다. 환경을 로드하려면 다음을 실행합니다.

이 명령은 aos_developer_sdk Docker 이미지를 로드합니다. 이미지 로드가 완료되면 환경을 시작하는 명령이 인쇄됩니다. 명령에 지정된 대로 컨테이너 환경을 시작합니다. 종속성을 설치하려면 다음을 실행합니다.

이제 수집기를 개발하고 테스트하기 위한 환경이 설정되었습니다. 디바이스 드라이버 및 REST 클라이언트와 같은 Apstra SDK 패키지도 환경에 설치됩니다.

Collector 개발

텔레메트리 수집기를 개발하려면 다음을 순서대로 지정합니다.

  1. 수집기가 개발된 서비스 - 서비스가 무엇인지 식별합니다. 예를 들어, 서비스는 스위치 인터페이스에서 수신 및 전송된 바이트를 수집할 수 있습니다. 서비스의 이름을 식별합니다. 기본 제공 서비스(ARP, BGP, 인터페이스, 호스트 이름, 경로, MAC, XCVR, LAG, MLAG)용으로 예약된 서비스 이름을 사용하는 것은 금지됩니다.
  2. Apstra에 제공된 데이터의 스키마 - 컬렉터 출력이 어떻게 구조화되는지 식별합니다. 키-값 쌍 모음을 Apstra에 게시해야 합니다. 각 항목이 무엇인지, 즉 구문적으로나 의미론적으로 키/값이 무엇인지 식별합니다. 위에서 언급한 예제에서 key는 인터페이스 이름을 식별하는 문자열입니다. 값은 JSON 문자열이며, JSON에는 'rx'와 'tx'라는 두 개의 키가 있으며 둘 다 정수 값을 갖습니다.
  3. 수집기가 개발된 네트워크 운영 체제(NOS) - 수집기 플러그인은 NOS에 따라 다릅니다. 컬렉터를 작성하기 전에 컬렉터가 필요한 NOS를 식별하십시오.
  4. 디바이스에서 필요한 데이터를 얻는 방법 - 디바이스에서 필요한 정보를 검색하는 데 사용할 수 있는 명령을 식별합니다. 예를 들어, 'show interfaces' 명령은 Arista EOS 디바이스에서 수신 및 전송된 바이트를 제공합니다.
  5. 저장소 스키마 경로 - 각 항목의 키 및 값 유형에 따라 저장소 스키마 경로가 결정됩니다. 선택한 수집기 유형에 따라 응용 프로그램의 저장소 스키마가 결정됩니다. 저장소 스키마는 서비스에서 반환되는 데이터의 상위 수준 구조를 정의합니다. 수집기의 저장소 스키마 경로는 다음 표를 사용하여 확인할 수 있습니다.
    유형, , 저장소 스키마 경로Key Type, Value Type,
    표 1: 스토리지 스키마 경로 결정
    값 유형Storage Schema Path
    문자열 문자열 aos.sdk.telemetry.schemas.generic
    문자열 Dict aos.sdk.telemetry.schemas.generic
    Dict 문자열 aos.sdk.telemetry.schemas.iba_string_data
    Dict 정수 aos.sdk.telemetry.schemas.iba_integer_data
  6. 응용 프로그램 스키마 - 응용 프로그램 스키마 는 프레임워크에 게시된 각 항목에 대한 스키마를 정의합니다. 응용 프로그램 스키마는 json 스키마의 초안 4 버전을 사용하여 표현됩니다. 각 항목은 키와 값으로 구성됩니다. 다음 표에서는 두 가지 샘플 항목을 지정합니다.
    표 2: 저장소 스키마 경로가 있는 샘플 항목
    저장소 스키마 경로 샘플 항목
    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",
    }
    참고:

    * 일반 저장소 스키마가 있는 수집기에서 반환된 항목은 'identity' 키를 사용하여 키 값을 지정하고 'value' 키를 사용하여 값을 지정해야 합니다.

    * IBA 기반 스키마가 있는 수집기에서 반환된 항목은 'key' 키를 사용하여 키 값을 지정하고 'value' 키를 사용하여 값을 지정해야 합니다.

    이 정보를 사용하여 JSON 스키마를 작성할 수 있습니다. 다음 표는 위에 지정된 샘플 항목을 해당 JSON 스키마에 매핑합니다.

    표 3: 샘플 애플리케이션 스키마
    샘플 항목 응용 프로그램 스키마Sample Item Application Schema
    {
        "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",
            }
        }
    }
    {

    JSON 스키마에서 사용할 수 있는 구문을 사용하여 더 복잡한 스키마를 지정할 수 있습니다. 파일의 스키마 업데이트 aos_developer_sdk/aosstdcollectors/aosstdcollectors/json_schemas/<service_name>.json

    참고:

    Apstra 버전 4.0.1부터는 GUI를 통해 서비스 스키마를 가져올 수 있습니다.

쓰기 수집기

Collector는 aos.sdk.system_agent.base_telemetry_collector에서 파생되어야 하는 클래스입니다. BaseTelemetryCollector입니다. 수집기의 collect 메서드를 다음과 같은 논리로 재정의합니다.

장치에서 데이터 수집

수집기 내의 장치 드라이버 인스턴스는 장치에 대해 명령을 실행하는 메서드를 제공합니다. 예를 들어, 대부분의 Apstra 디바이스 드라이버는 명령을 실행하고 출력을 반환하는 메서드 get_jsonget_text 메소드를 제공합니다.

참고:

aos_developer_sdk 환경을 위한 장치 드라이버가 사전 설치되어 있습니다. 데이터를 수집하는 데 사용할 수 있는 방법을 탐색할 수 있습니다. 예를 들어:

데이터 구문 분석

수집된 데이터는 위에서 식별된 Apstra 프레임워크 및 서비스 스키마에 따라 구문 분석하고 다시 포맷해야 합니다. 일반 저장소 스키마가 있는 수집기는 다음 구조를 따릅니다.

IBA 기반 스키마가 있는 수집기는 다음 구조를 따릅니다.

위의 구조에서 게시된 데이터에는 여러 항목이 있습니다. 각 항목에는 키와 값이 있습니다. 예를 들어 인터페이스별 정보를 게시하려면 프레임워크에 게시하려는 각 인터페이스에 대한 ID/키-값 쌍이 있어야 합니다.

참고:

타사 패키지를 사용하여 디바이스에서 가져온 데이터를 구문 분석하려는 경우 경로에 Python 패키지 및 버전을 나열합니다.

<aos_developer_sdk>/aosstdcollectors/requirements_<NOS>.txt. 종속성에 의해 설치된 패키지는 Apstra 소프트웨어가 사용하는 패키지와 충돌하지 않습니다. Apstra가 설치한 패키지는 개발 환경에서 사용할 수 /etc/aos/python_dependency.txt 있습니다.

Framework에 데이터 게시

필요한 스키마에 따라 데이터가 수집되고 구문 분석되면 데이터를 프레임워크에 게시합니다. 컬렉터에서 post_data 사용할 수 있는 방법을 사용할 수 있습니다. 그것은 하나의 인수를 받아들이고, 그것은 프레임 워크에 게시되어야하는 데이터입니다.

저장소의 폴더 aos_developer_sdk/aosstdcollectors/aosstdcollectors 에는 각 NOS에 대한 폴더가 포함되어 있습니다. NOS와 일치하는 폴더에 컬렉터를 추가합니다. Cumulus는 Apstra 버전 4.1.0부터 더 이상 지원되지 않지만, 이 예시는 설명을 위해 유지됩니다. 예를 들어 Cumulus에 대한 수집기를 작성하려면 수집기를 aos_developer_sdk/aosstdcollectors/aosstdcollectors/cumulus에 추가하고 서비스 이름을 따서 파일 이름을 지정합니다. 예를 들어 서비스 이름이 interface_in_out_bytes인 경우 파일 interface_in_out_bytes.py이름을 .

collector 클래스를 정의하는 것 외에도 collector 파일에서 함수를 collector_plugin 정의합니다. 이 함수는 하나의 인수를 사용하고 구현된 수집기 클래스를 반환합니다.

예를 들어 일반 저장소 스키마 기반 수집기는 다음과 같습니다.

IBA 저장소 스키마 기반 수집기는 다음과 같습니다.

단위 테스트 수집기

저장소의 폴더 aos_developer_sdk/aosstdcollectors/test 에는 NOS를 기반으로 하는 폴더가 포함되어 있습니다. NOS와 일치하는 폴더에 테스트를 추가합니다. 예를 들어, Cumulus에 대한 컬렉터에 대한 테스트가 에 추가됩니다 aos_developer_sdk/aosstdcollectors/test/cumulus. 단위 테스트의 이름은 접두사 test_를 사용하여 지정하는 것이 좋습니다.

기존 인프라는 장치 드라이버 명령 응답을 모의하는 데 사용되는 Pytest 픽스처 collector_factory 를 구현합니다. 테스트 개발을 위한 일반적인 흐름은 다음과 같습니다.

  1. 수집기 팩토리를 사용하여 수집기 인스턴스와 모의 Apstra 프레임워크를 가져옵니다. 수집기 팩토리는 사용자가 작성한 수집기 클래스를 입력으로 사용합니다.
  2. 디바이스 응답을 모의합니다.
  3. collect 메서드를 호출합니다.
  4. 모의 Apstra 프레임워크에 게시된 데이터를 검증합니다.

예를 들어 테스트는 다음과 같습니다.

테스트를 실행하려면 다음을 실행합니다.

이 명령은 리포지토리의 모든 테스트를 실행합니다.

패키지 수집기

모든 수집기는 NOS를 기준으로 포장됩니다. 모든 패키지를 생성하려면 에서 make를 aos_develop_sdk실행합니다. 빌드 패키지는 에서 찾을 수 있습니다 aos_developer_sdk/dist. 패키지 빌드는 크게 다음과 같이 분류할 수 있습니다.

패키지 설명
빌트인 컬렉터 패키지 이러한 패키지에는 접두사 aosstdcollectors_builtin_가 있습니다. 레퍼런스 설계에 따라 디바이스에서 텔레메트리를 수집하려면 Apstra에 섹션에 <deviceblah> 나열된 서비스가 필요합니다. 기본 제공 수집기 패키지에는 이러한 서비스에 대한 수집기가 포함되어 있습니다. 패키지는 NOS 기준으로 생성됩니다.
사용자 지정 수집기 패키지

이러한 패키지의 이름에는 접두사 aosstdcollectors_custom_ 있습니다. 패키지는 NOS 기준으로 생성됩니다. aosstdcollectors_custom_<NOS>-0.1.0-py2-none-any.whl 이라는 패키지에는 개발된 수집기가 포함되어 있습니다.

Apstra SDK 디바이스 드라이버 패키지

이러한 패키지에는 접두사 apstra_devicedriver_ 있습니다. 이러한 패키지는 NOS 기준으로 생성됩니다. 패키지는 Apstra에서 기본적으로 사용할 수 없는 NOS에 대해 생성됩니다.

패키지 업로드

빌트인 컬렉터 패키지 및 장치 운영 체제(NOS)용 Apstra SDK 디바이스 드라이버가 Apstra 소프트웨어와 함께 제공되지 않은 경우 Apstra 서버에 업로드해야 합니다.

오프박스 솔루션을 사용 중이고 NOS가 EOS가 아닌 경우 기본 제공 수집기 패키지를 업로드해야 합니다.

수집기가 포함된 패키지를 업로드하고 디바이스 시스템 에이전트 또는 시스템 에이전트 프로필에 할당합니다.

Telemetry Collector 사용

Telemetry Service Registry 설정

레지스트리는 서비스를 해당 응용 프로그램 스키마 및 저장소 스키마 경로에 매핑합니다. REST 끝점 /api/telemetry-service-registry을 사용하여 텔레메트리 서비스 레지스트리를 관리할 수 있습니다 . 특정 서비스에 대한 레지스트리 항목을 추가하지 않고는 서비스에 대해 수집기를 사용하도록 설정할 수 없습니다. 서비스를 사용하는 동안에는 서비스에 대한 레지스트리 항목을 수정할 수 없습니다.

참고:

를 실행하면 make모든 응용 프로그램 스키마가 dist 폴더의 tar 파일(json_schemas.tgz)에 함께 패키징됩니다. apstra-cli를 사용하면 .tgz 파일에 있는 모든 스키마를 임포트할 수 있습니다.

Collector 시작

서비스를 시작하려면 다음 세 가지 인수와 함께 POST API /api/systems/<system_id>/services 를 사용합니다.

인수  
Input_data 수집기에 대한 입력으로 제공되는 데이터입니다. 기본값은 없음입니다.
간격 서비스를 실행할 간격입니다. 기본값은 120초입니다.
이름 서비스의 이름입니다.
참고:

apstra-cli 유틸리티를 통해 컬렉터를 관리할 수도 있습니다.

수집기 삭제

서비스를 삭제하려면 DELETE API /api/systems/<system_id>/services/<service_name>를 사용합니다.

수집된 데이터 가져오기

수집된 데이터를 검색하려면 GET API /api/systems/<system_id>/services/<service_name>/data를 사용합니다 . 마지막 반복에서 수집된 데이터만 저장됩니다. Apstra 재시작 시에도 데이터가 유지되지 않습니다.

실행 중인 수집기 서비스 나열

디바이스에서 활성화된 서비스 목록을 검색하려면 GET API /api/systems/<system_id>/services를 사용합니다.