探针
IBA 探测概述
探查是基于意图的分析中抽象的基本单元。通常,给定探测设备会使用来自网络的一组数据,进行各种连续聚合和计算,并可选择指定用于引发异常的聚合和计算某些条件。
探查是定向 Acyclic 图形 (DAG),其中图形的节点是处理器和阶段。阶段是一些与上下文相关的数据,操作人员可以检查这些数据。处理器是一组操作,用于产生和减少输入数据的输出数据。处理器的输入为一级或多级,处理器的输出也是一级或多级。探查 DAG 中边缘的方向性表示此输入到输出流。
重要的是,探测中的初始处理器是特殊处理器,没有任何输入阶段。从概念上说,它们是数据的生成器。我们将这些处理器指为源处理器。
IBA 的工作原理是,从收集器中提取原始遥测数据并放入探测器中,以提取知识(例如:异常、聚合等)。给定收集器将遥测作为一组指标发布,其中每个指标都有身份(viz,一组键值对)和一个值。IBA 探测通常使用图形查询,必须完全指定指标的标识,以将其值纳入探测器中。借助此功能,探测器可以使用收集过滤器部分指定身份,从而允许采用未知身份指标。
某些探测器会自动创建。这些探测器不会自动删除。这保持操作简单,且实施上更全面。
处理器
探测器的输入处理器处理所需配置,以将原始遥测纳入探测中以启动数据处理管道。对于这些处理器,阶段输出项目(一个或多个)的数量相当于指定图形查询中结果的数量。例如,如果指定了多个图形查询。 graph_query: [A, B]
和查询 A 匹配 5 个节点,查询 B 匹配 10 个节点,查询 A query_result
的结果将用 0 到 4 的索引访问,查询 B 的结果使用 5 到 14 的索引。
如果未指定处理器的输入类型和/或输出类型,则处理器接受调用的单个输入,并生成一个输出。
某些处理器字段称为 表达式。在某些情况下,它们是 图形查询, 因此会这样指定。其他情况下,Python 表达式表示 可产生值。例如,在 Processor 处理器中,持续时间可以指定 900
为以秒为单位的整数,例如 ,或 作为表达式,例如 60 * 15
。但是,表达式可能更加有用:有多种方式将其参数化。
表达式支持字符串值。作为字符串并支持表达式的处理器配置参数在指定静态值时应该使用特殊引用。例如, state: "up"
无效,因为它将指变量“up”,而非静态字符串,因此应为 : state: '"up"'
。
表达式始终与图形查询相关联,并为此查询的每次匹配运行。表达式的执行环境使查询中指定的每个变量都解析到关联匹配结果中的命名节点。有关详细信息,请参阅 服务数据收集器 示例。
基于图形的处理器扩展了query_tag_filter,允许按标记过滤图形查询结果(版本 4.0 中的新增内容)。在 IBA 探测中,标记仅用作服务器和外部路由器的过滤器标准,特别是 ECMP 平衡(外部接口)探测器和 Total East/West Traffic 探测。有关特定处理器信息,请参阅 “ 参考”一节中的“探查处理器”。
进水过滤器
借助“纳入过滤器”,一个查询结果可以将多个指标纳入探查中。表数据类型用于将多个指标作为单级输出项的一部分存储。表数据类型包括 table_ns
、 table_dss
和 , table_ts
以对应现有类型 ns
- 、 dss
、 ts
和 。
IBA 收集过滤器
收集过滤器确定从目标设备中收集的指标。
为给定设备上给定收集器收集器的收集过滤器,仅仅是不同探测器中呈现的一组收集过滤器。您还可以指定它作为在 IBA 或探测环境之外启用服务的一部分,但此处应用现有的服务启用优先级规则 - 只有给定优先级级别的过滤器才聚合。当多个探测器指定以特定设备上特定服务为目标的收集过滤器时,收集的指标是联合值 - 换言之,当该指标与任何过滤器匹配时,将发布一个度量。正因如此,数据也会在进入 IBA 探测器之前由控制器组件过滤。
遥测收集器会评估此过滤器,以便更好地控制即使从底层设备操作系统获取了哪些可用指标子集。例如,仅获取一个子集的路由,而不是获取可能很大数量的所有路由。在任何情况下,仅与收集过滤器匹配的指标作为原始遥测发布。
作为在设备上启用服务的一部分,现在您可以为服务指定收集过滤器。作为“self.service_config.collection_filters”的一部分,该过滤器将成为提供给收集器的附加输入。
IBA 过滤器格式
下面是过滤器的设计/可用性目标(收集和使用)
- 作者容易编写 - 指定作者是作者
- 大多数情况下会匹配任何情况,与给定的可用值列表匹配、平等匹配、范围检查以及键是否具有数字值。
- 高效评估 - 在收集或采集的热路径中评估过滤器。
- 可聚合 - 多个过滤器聚合,因此此聚合逻辑无需成为单个收集器的责任。
- 编程语言中立 - 在过滤器上操作的组件将来可以使用 Python 或 C++ 或其他一些语言。
- 可编程 - 可以适应过滤器、控制器本身和/或收集器的未来可编程性,从而增强可用性、性能等。
考虑到上述目标,过滤器 1 中提出了一个建议的演示性方案。有关特定示例,请参阅“进水过滤器”部分,以更好地了解这一点。
FILTER_SCHEMA = s.Dict(s.Object( 'type': s.Enum(['any', 'equals', 'list', 'pattern', 'range', 'prefix']), 'value': s.OneOf({ 'equals': s.OneOf([s.String(), s.Integer()]), 'list': s.List(s.String(), validate=s.Length(min=1)), 'pattern': s.List(s.String(), validate=s.Length(min=1)), 'range': s.AnomalyRange(), validate=s.Length(min=1), 'prefix': s.Object({ 'prefixsubnet': s.Ipv6orIpv4NetworkAddress(), 'ge_mask': s.Optional(s.Integer()), 'le_mask': s.Optional(s.Integer()), 'eq_mask': s.Optional(s.Integer()) }) ), key_type=s.String(description= 'Name of the key in metric identity. Missing metric identity keys are ' 'assumed to match any value'))
过滤器规范的一个实例将解释为 所有 指定密钥(又名按密钥约束)的 AND。来自多个探测器的多个过滤器规格被视为 或 处于过滤器级别。
此处展示的方案仅用于传达要求,工程可以自由选择完成已描述用例的任何方式。
收集器处理器additional_properties收集器处理器配置中指定的处理器,可以使用特殊命名空间访问 context.
。例如,如果收集器定义了属性 system_role
,则它可以这样使用:
duration: 60 * (15 if context.system_role == "leaf" else 10)
只要项目集与从收集器处理器配置派生的原始集不变,项目上下文就可用。数据经过更改此集的处理器(例如任何分组处理器)后,将不再可用。
从蓝图导航到 Analytics >探测器 ,以转到探测列表视图。要转至探测器的详细信息,请单击其名称。您可以实例化、创建、克隆、编辑、删除、导入和导出探测器。
您可以多种方式显示一些探测器的阶段。例如,当您单击名为“设备流量”的探测器时,会看到以下图像。通过从实时时间序列更改平均接口计数器的数据源,您可以选择以单独图形、组合图形查看时间序列:线性或组合图形:堆叠(从 Apstra 版本 4.0 开始)。此外,您还可以查看每个探测器(如果适用)使用的磁盘空间。
如果 Apstra 控制器的磁盘空间不足,旧遥测数据文件将被删除。您可以通过为多个虚拟机群集来增加容量来保留旧的遥测数据。有关详细信息,请参阅 Apstra 群集 。
在标准视图中,使用十个处理器的非线性探测的结构和逻辑不易区分。您可单击扩展按钮(左面板顶部),以查看处理器如何相互关联(版本 4.0 中的新版本)的扩展表示。例如,下面的图像显示 MLAG 平衡探测的扩展视图。