Junos Telemetry Interface 데이터 집계 지침
Junos Telemetry Interface의 중요한 기능 중 하나는 디바이스가 아닌 데이터를 스트리밍하는 수집기에서 데이터 처리가 이루어진다는 것입니다. 데이터는 자동으로 집계되지 않지만 분석을 위해 집계될 수 있습니다.
데이터 집계는 다음과 같은 시나리오에서 유용합니다.
고정된 시간 동안 동일한 지표에 대한 데이터(예: 30초 간격 동안의 평균 물리적 인터페이스 수신 오류 수).
레이블 전환 경로(LSP) 통계 또는 필터 카운터 통계와 같은 동일한 메트릭에 대한 다양한 소스(예: 여러 라인 카드)의 데이터.
통합 이더넷 인터페이스에 대한 입력 및 출력 통계와 같은 여러 소스의 데이터.
다음 섹션에서는 다양한 시나리오에 대해 데이터 집계를 수행하는 방법에 대해 설명합니다. 이 섹션의 예제에서는 InfluxDB 시계열 데이터베이스를 사용하여 원격 분석 데이터에 대한 쿼리를 수락합니다. InfluxDB는 시계열 데이터를 처리하기 위해 특별히 Go로 작성된 오픈 소스 데이터베이스입니다.
고정된 시간 범위 동안의 데이터 집계
고정된 시간 동안 동일한 메트릭에 대한 데이터를 집계하는 것은 추세를 감지하는 일반적이고 유용한 방법입니다. 메트릭에는 게이지, 즉 단일 값 또는 누적 카운터가 포함될 수 있습니다. 데이터를 지속적으로 집계할 수도 있습니다.
예: 게이지 메트릭에 대한 데이터 집계
이 예에서 from port.proto
에 대한 JuniperNetworksSensors.jnpr_interface_ext.interface_stats.egress_queue_info.current_buffer_occupancy
데이터는 호스트 이름, 인터페이스 이름, 해당 대기열 번호 및 라는 current_buffer_occupancy
측정값을 식별하는 태그와 함께 InfluxDB 데이터베이스에 기록됩니다. 이 예에 사용된 특정 값에 대해서는 표 1을 참조하십시오.
타임스탬프(초) |
값 |
태그 |
---|---|---|
1458704133 |
1547 |
queue_number=0,interface_name='xe-1/0/0',호스트='sjc-a' |
1458704143 |
3221 |
queue_number=0,interface_name='xe-1/0/0',호스트='sjc-a' |
1458704155 |
4860 |
queue_number=0,interface_name='xe-1/0/0',호스트='sjc-a' |
1458704166 |
6550 |
queue_number=0,interface_name='xe-1/0/0',호스트='sjc-a' |
각 측정 데이터 포인트에는 타임스탬프와 기록된 값이 있습니다. 이 예에서 태그 queue_number
는 인터페이스 대기열의 숫자 식별자입니다.
30초 간격으로 이 데이터를 집계하려면 다음 influxDB 쿼리를 사용합니다.
select mean(value) from current_buffer_occupancy where time >= $time_start and time <= $time_end and queue_number=’0’ and interface_name=’xe-1/0/0’ and host=’sjc-a’ group by time(30s)
및 $time_end
의 경우 $time_start
실제 시간 범위를 지정합니다.
예: 누적 통계를 위한 데이터 집계
일부 Junos Telemetry Interface 센서는 로 정의된 JuniperNetworksSensors.jnpr_interface_ext.interface_stats.ingress_stats.packets
수신 패킷 수와 같은 누적 카운터 값을 보고합니다.
패킷 또는 바이트 카운터에서 트래픽 속도를 도출하는 것이 일반적입니다. 계기 메트릭과 달리 누적 카운터에 대한 계열의 초기 데이터 요소는 기준선을 설정하는 데만 사용됩니다.
다음 지침을 사용하여 누적 통계에 대한 데이터베이스 쿼리를 만듭니다.
-
특정 시간 간격에 대한 누적 값을 계산합니다. 시간 간격 동안 기록된 여러 데이터 요소 중 평균을 계산하거나 값을 보간할 수 있습니다. 모든 데이터 요소는 동일한 계열에 속해야 합니다. 서로 다른 시간에 보고된 두 데이터 포인트 간에 카운터 재설정이 발생한 경우 두 데이터 포인트를 모두 사용하지 마십시오.
-
이전 시간 간격에 대한 적절한 값을 결정합니다. 마지막 업데이트 이후 카운터가 재설정된 경우 해당 값을 사용할 수 없는 것으로 선언합니다.
-
이전 간격을 사용할 수 있는 경우 데이터 포인트와 트래픽 속도 간의 차이를 계산합니다.
이러한 지침은 다음 influxDB 쿼리에 요약되어 있습니다. 이 쿼리는 데이터가 측정값 ingress_packets
에 저장된다고 가정합니다. 쿼리는 게이지 메트릭 예제와 동일한 태그와 카운터 초기화 시간에 init_time
대한 태그를 사용합니다. 쿼리는 30초 시간 간격 동안의 평균값을 사용합니다. 카운터 초기화가 동일한 메트릭에 대한 속도를 계산합니다.
select non_negative_derivative(mean(value)) from ingress_packets where time >= $time_start and time <= $time_end and interface_name=’xe-1/0/0’ and host=’sjc-a’ group by time(30s), init_time
다음 쿼리를 사용하여 속도를 도출하지 않고 시간 간격 동안 수신된 패킷 수를 계산합니다.
select difference(mean(value)) from ingress_packets where time >= $time_start and time <= $time_end and interface_name=’xe-1/0/0’ and host=’sjc-a’ group by time(30s), init_time
경우에 따라 둘 이상의 집계된 데이터 요소가 특정 시간 간격에 대한 쿼리에 의해 반환됩니다. 예를 들어 시간 간격에 대해 4개의 데이터 요소를 사용할 수 있습니다. 두 개의 데이터 요소에는 가 있고 다른 두 개의 데이터 요소에는 init_time t0
init_time t1
. , 대신 init_time
마지막 변경 타임스탬프 태그 last_change
를 사용하는 쿼리를 실행하여 차이를 계산하고 마지막 변경 타임스탬프가 동일한 두 데이터 요소 간의 비율을 도출할 수 있습니다.
select difference(mean(value)) from ingress_packets where time >= $time_start and time <= $time_end and interface_name=’xe-1/0/0’ and host=’sjc-a’ group by time(30s), last_change
이러한 쿼리는 모두 연속 쿼리로 실행될 수 있으며 주기적으로 새로운 시계열 측정값을 채울 수 있습니다.
여러 소스의 데이터 집계
특정 메트릭은 여러 라인 카드 또는 패킷 전달 엔진에서 보고됩니다. 다음과 같은 시나리오에서 서로 다른 원본에서 파생된 데이터를 집계하는 것이 유용합니다.
-
LSP(Label-Switched Path)의 패킷 및 바이트 수는 각 라인 카드에 의해 별도로 보고됩니다. 그러나 경로 계산 요소 컨트롤러에는 전체 디바이스에 대한 LSP 경로 보기가 필요합니다.
-
가상 출력 대기열을 지원하는 주니퍼 네트웍스 디바이스의 경우, 각 대기열에 대한 tail drop 또는 random early detection drop 통계는 모든 물리적 인터페이스의 각 라인 카드에 의해 별도로 보고됩니다. 인터페이스의 모든 라인 카드에 대한 통계를 집계할 수 있으면 유용합니다.
-
포워딩 테이블 또는 어그리게이션 이더넷 인터페이스에 연결된 방화벽 필터에 대한 필터 카운터는 각 라인 카드에 의해 별도로 보고됩니다. 모든 라인 카드에 대한 통계를 집계하는 것이 유용합니다.
여러 원본의 데이터를 집계하려면 다음을 수행합니다.
각 소스(예: 각 라인 카드)에 대해 특정 기간 동안 데이터를 집계합니다.
1단계에서 각 원본에 대해 도출한 데이터를 집계합니다.
InfluxDB 데이터베이스에 저장된 데이터의 경우 연속 쿼리를 실행하고 새 측정값을 채워 절차의 1단계를 완료할 수 있습니다. 각 원본에 따라 데이터 요소를 그룹화하는 것이 좋습니다. 예를 들어, LSP 통계의 경우 gpb 메시지의 은(는 component_id
) 데이터를 전송하는 라인 카드를 식별합니다. 각 고유 component_id
값을 기준으로 데이터 요소를 그룹화합니다.
예: 여러 소스의 데이터 집계
이 예에서는 두 개의 쿼리를 실행하여 모든 라인 카드의 데이터에 대한 LSP 패킷 속도를 도출합니다.
먼저 각 component_id
태그와 counter_name
태그에 대해 명명된 lsp_packet_count
측정에 대해 다음과 같은 연속 쿼리를 실행합니다. 각 고유 component_id
태그는 서로 다른 라인 카드에 해당합니다. 이 쿼리는 새 측정값을 채웁니다.lsp_packet_rate.
select non_negative_derivative(mean(value)) as value from lsp_packet_count into lsp_packet_rate group by time(30s), component_id, counter_name, host
LSP 통계 센서는 카운터 초기화 시간을 보고하지 않습니다.
이 연속 쿼리—lsp_packet_count
—에서 파생된 새로운 측정을 사용하여 라는 lsp-sjc-den-1
LSP의 패킷 속도에 대한 모든 라인 카드의 데이터를 집계하는 다음 쿼리를 실행합니다.
select sum(value) from lsp_packet_rate where counter_name=’lsp-sjc-den-1’, host=’sjc-a’
이 쿼리는 태그 또는 라인 카드에 따라 component_id
데이터를 그룹화하지 않기 때문에 모든 구성 요소 또는 라인 카드의 LSP 패킷 속도가 반환됩니다.
여러 메트릭에 대한 데이터 집계
여러 값에 대한 메트릭을 집계하는 것이 유용할 수 있습니다. 예를 들어, 어그리게이션 이더넷 인터페이스의 경우, 일반적으로 어그리게이션 링크에 대한 인터페이스 사용률뿐만 아니라 각 인터페이스 멤버에 대한 패킷 및 바이트 속도를 추적하고자 합니다.
예: 여러 메트릭 값 집계
이 예제에서는 다음 두 쿼리를 실행합니다.
-
어그리게이션 이더넷 인터페이스에서 각 멤버 링크에 대한 수신 패킷 수를 도출하기 위한 연속 쿼리
-
동일한 어그리게이션 이더넷 인터페이스에 속하는 모든 멤버 링크에 대한 패킷 수 데이터를 어그리게이션하기 위한 쿼리
다음의 연속 쿼리는 어그리게이션된 이더넷 인터페이스의 각 멤버 링크에 대한 측정값 ingress_packets
을 도출합니다. 태그는 interface_name
각 멤버 인터페이스를 식별합니다. 또한 태그를 사용하여 parent-ae-name
특정 어그리게이션 이더넷 인터페이스의 멤버십을 식별할 수 있습니다. 각 멤버 링크를 태그로 parent-ae-name
그룹화하면 현재 멤버 링크에 대해서만 데이터가 수집됩니다. 예를 들어, 인터페이스는 보고 간격 동안 멤버십을 변경할 수 있습니다. 특정 어그리게이션 이더넷 인터페이스와 멤버 인터페이스를 그룹화한다는 것은 멤버 링크에 대한 데이터가 현재 멤버인 새로운 어그리게이션 이더넷 인터페이스로 전송되지 않는다는 것을 의미합니다.
select difference(mean(value)) as value from ingress_packets into ingress_packets_difference group by time(30s), component_id, interface_name, host, parent-ae-name
다음 쿼리는 어그리게이션된 이더넷 인터페이스, 즉 모든 멤버 링크의 수신 패킷에 대한 데이터를 어그리게이션합니다.
select sum(value) from ingress_packets_difference where parent-ae-name=’ae0’ and host=’sjc-a’
이 쿼리는 집계된 이더넷 인터페이스에 ae0
대한 데이터를 집계합니다. 태그는 parent-ae-name
실제 멤버 링크를 확인하지 않습니다.