在此页面上
聚合 Junos 遥测接口数据的准则
Junos 遥测接口的一个重要功能是,数据处理在流式传输数据的收集器(而非设备)上进行。数据不会自动聚合,但可以聚合进行分析。
数据聚合在以下方案中很有用:
固定时间段内相同指标的数据,例如 30 秒间隔内物理接口入口错误的平均数量。
同一指标的不同来源(例如多个线卡)的数据,例如标签交换路径 (LSP) 统计信息或筛选器计数器统计信息。
来自多个源的数据,例如聚合以太网接口的输入和输出统计信息。
以下部分介绍如何针对各种方案执行数据聚合。这些部分中的示例使用 InfluxDB 时序数据库接受对遥测数据的查询。InfluxDB 是一个用 Go 编写的开源数据库,专门用于处理时间序列数据。
聚合固定时间跨度内的数据
在固定的时间跨度内聚合同一指标的数据是检测趋势的常见且有用的方法。指标可以包括仪表,即单个值或累积计数器。您可能还希望连续聚合数据。
示例:聚合仪表指标的数据
在此示例中,from port.proto
的数据JuniperNetworksSensors.jnpr_interface_ext.interface_stats.egress_queue_info.current_buffer_occupancy
将写入 InfluxDB 数据库,其中包含标识主机名、接口名称以及相应的队列号和度量的标签,称为 current_buffer_occupancy
。有关此示例中使用的特定值,请参阅表 1。
时间戳(秒) |
价值 |
标签 |
---|---|---|
1458704133 |
1547 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
1458704143 |
3221 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
1458704155 |
4860 |
queue_number=0,interface_name='xe-1/0/0',host='sjc-a' |
1458704166 |
6550 |
queue_number=0,interface_name='xe-1/0/0',host='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 遥测接口传感器报告累积计数器值,如入口数据包数, 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
在某些情况下,查询在特定时间间隔内返回多个聚合数据点。例如,一个时间间隔内有四个数据点可用。两个数据点有 init_time t0
,另外两个有 init_time t1
。您可以运行使用上次更改时间戳标记 last_change
(而不是 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), last_change
这些查询都可以作为连续查询运行,并且可以定期填充新的时序度量值。
聚合来自多个源的数据
某些指标是从多个线卡或数据包转发引擎报告的。在以下情况下,聚合来自不同源的数据非常有用:
-
标签交换路径 (LSP) 的数据包和字节计数由每个线卡单独报告。但是,路径计算元素控制器需要整个设备的 LSP 路径视图。
-
对于支持虚拟输出队列的瞻博网络设备,每个队列的尾部丢弃或随机早期检测丢弃统计信息由每个物理接口的每个线卡单独报告。能够聚合接口的所有线卡的统计信息非常有用。
-
连接到转发表或聚合以太网接口的防火墙过滤器的过滤器计数器由每个线卡单独报告。聚合所有线卡的统计信息非常有用。
要聚合来自多个源的数据,请执行以下操作:
聚合每个源(例如,每个线卡)特定时间段内的数据。
聚合您在 步骤 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
不会验证实际的成员链接。