聚合 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_start 和 $time_end,指定实际时间范围。
示例:聚合数据进行累积统计
某些 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 统计信息, component_id gpb 消息中的 标识发送数据的线卡。根据每个唯一的 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_packetsinterface_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 标记不会验证实际成员链接。