9.2. 在网络可观察性中启用技术预览警报


Network Observability Operator 警报是一个技术预览功能。要使用这个功能,您必须在 FlowCollector 自定义资源(CR)中启用它,然后继续根据您的特定需求配置警报。

流程

  1. 编辑 FlowCollector CR,将实验性警报标记设置为 true
apiVersion: flows.netobserv.io/v1beta1
kind: FlowCollector
metadata:
  name: flow-collector
spec:
  processor:
    advanced:
      env:
        EXPERIMENTAL_ALERTS_HEALTH: "true"

您仍然可以使用现有方法创建警报。如需更多信息,请参阅"创建警报"。

9.2.1. 配置预定义的警报

Network Observability Operator 中的警报使用 FlowCollector 自定义资源(CR)的 spec.processor.metrics.alerts 对象中的警报模板和变体定义。您可以自定义默认模板和变体,以实现灵活的细粒度警报。

启用警报后,Network Health 仪表板会出现在 OpenShift Container Platform Web 控制台的 Observe 部分中。

对于每个模板,您可以定义一个变体列表,每个变体都有自己的阈值和分组配置。如需更多信息,请参阅"默认警报模板列表"。

下面是一个示例:

apiVersion: flows.netobserv.io/v1beta1
kind: FlowCollector
metadata:
  name: flow-collector
spec:
  processor:
    metrics:
      alerts:
      - template: PacketDropsByKernel
        variants:
        # triggered when the whole cluster traffic (no grouping) reaches 10% of drops
        - thresholds:
            critical: "10"
        # triggered when per-node traffic reaches 5% of drops, with gradual severity
        - thresholds:
            critical: "15"
            warning: "10"
            info: "5"
          groupBy: Node
注意

自定义警报会替换该模板的默认配置。如果要保留默认配置,您必须手动复制它们。

9.2.2. 关于警报的 PromQL 表达式

了解 Prometheus Query Language (PromQL)的基本查询以及如何自定义它,以便您可以为特定需求配置网络可观察性警报。

网络 observability FlowCollector 自定义资源(CR)中的警报 API 映射到 Prometheus Operator API,生成 PrometheusRule。您可以运行以下命令来在默认 netobserv 命名空间中看到 PrometheusRule

$ oc get prometheusrules -n netobserv -oyaml

9.2.2.1. 在传入的流量中查询警报的示例

本例为传入的流量中的警报提供了基础 PromQL 查询模式:

sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace)

此查询计算过去 30 分钟内从 openshift-ingress 命名空间到任何工作负载的命名空间的字节率。

您可以自定义查询,包括只保留一些费率、运行查询特定时间段以及设置最终阈值。

过滤 noise

在这个查询中附加 > 1000 只会保留观察到大于 1 KB/s 的速率,从而消除了来自低带宽消费者的命名率。

(sum (rate (netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace)> 1000)

字节率相对于 FlowCollector 自定义资源(CR)配置中定义的抽样间隔。如果抽样间隔为 1:100,则实际流量可能比报告的指标大约为 100 倍。

时间比较

您可以使用 偏移 修饰符对特定时间段运行相同的查询。例如,以前对一天的查询可以使用 偏移 1d 运行,并且对 5 小时的查询可以使用 偏移 5h 运行。

sum (rate (netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d))

您可以使用公式 100 * (<query now> - <query from the previous day>)/ <query from the previous day > 来计算与上天相比增加的百分比。如果今天的字节率小于上天,则该值可以是负数。

最终阈值
您可以应用最终阈值来过滤小于所需百分比的增加。例如,> 100 消除了小于 100% 的增加。

PrometheusRule 的完整表达式一起使用,如下所示:

...
      expr: |-
        (100 *
          (
            (sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace) > 1000)
            - sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace)
          )
          / sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace))
        > 100

9.2.2.2. 警报元数据字段

Network Observability Operator 使用其他 OpenShift Container Platform 功能(如监控堆栈)的组件,以增强网络流量的可见性。如需更多信息,请参阅"监控堆栈架构"。

必须为警报定义配置一些元数据。Prometheus 和 Alertmanager 服务从监控堆栈或 Network Health 仪表板使用此元数据。

以下示例显示了带有配置元数据的 AlertingRule 资源:

apiVersion: monitoring.openshift.io/v1
kind: AlertingRule
metadata:
  name: netobserv-alerts
  namespace: openshift-monitoring
spec:
  groups:
  - name: NetObservAlerts
    rules:
    - alert: NetObservIncomingBandwidth
      annotations:
        netobserv_io_network_health: '{"namespaceLabels":["DstK8S_Namespace"],"threshold":"100","unit":"%","upperBound":"500"}'
        message: |-
          NetObserv is detecting a surge of incoming traffic: current traffic to {{ $labels.DstK8S_Namespace }} has increased by more than 100% since yesterday.
        summary: "Surge in incoming traffic"
      expr: |-
        (100 *
          (
            (sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m])) by (DstK8S_Namespace) > 1000)
            - sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace)
          )
          / sum(rate(netobserv_workload_ingress_bytes_total{SrcK8S_Namespace="openshift-ingress"}[30m] offset 1d)) by (DstK8S_Namespace))
        > 100
      for: 1m
      labels:
        app: netobserv
        netobserv: "true"
        severity: warning

其中:

spec.groups.rules.alert.labels.netobserv
指定 Network Health 仪表板在设置为 true 时检测的警报。
spec.groups.rules.alert.labels.severity
指定警报的严重性。以下值有效: 关键warninginfo

您可以在 消息 注解中使用定义的 PromQL 表达式的输出标签。在示例中,由于结果按 DstK8S_Namespace 分组,因此消息文本中使用表达式 {{ $labels.DstK8S_Namespace }}

netobserv_io_network_health 注解是可选的,用于控制在 Network Health 页面中如何呈现警报。

netobserv_io_network_health 注解是一个由以下字段组成的 JSON 字符串:

Expand
表 9.1. netobserv_io_network_health 注解的字段
字段类型描述

namespaceLabels

字符串列表

保留命名空间的一个或多个标签。提供后,警报会出现在 Namespaces 选项卡中。

nodeLabels

字符串列表

保存节点名称的一个或多个标签。提供后,警报会出现在 Nodes 选项卡中。

阈值

字符串

警报阈值,预期与 PromQL 表达式中定义的阈值匹配。

unit

字符串

数据单元,仅用于显示目的。

upperBound

字符串

用于计算封闭规模分数的上限值。超过这个绑定的指标值会被强制使用。

links

对象列表

与警报相关的上下文显示的链接列表。每个链接都需要一个 名称 (显示名称)和 url

trafficLinkFilter

字符串

注入 Network Traffic 页面的 URL 的额外过滤器。

namespaceLabelsnodeLabels 是互斥的。如果没有提供,警报会出现在 Global 选项卡下。

9.2.3. 创建自定义警报规则

使用 Prometheus Query Language (PromQL)定义自定义 AlertingRule 资源,以根据特定的网络指标(如流量监控)触发警报。

先决条件

  • 熟悉 PromQL.
  • 已安装 OpenShift Container Platform 4.14 或更高版本。
  • 您可以使用具有 cluster-admin 角色的用户访问集群。
  • 已安装 Network Observability Operator。

流程

  1. 创建名为 custom-alert.yaml 的 YAML 文件,其中包含您的 AlertingRule 资源。
  2. 运行以下命令来应用自定义警报规则:

    $ oc apply -f custom-alert.yaml

验证

  1. 运行以下命令,验证 PrometheusRule 资源是否在 netobserv 命名空间中创建:

    $ oc get prometheusrules -n netobserv -oyaml

    输出应包含您刚才创建的 netobserv-alerts 规则,确认是否已正确生成资源。

  2. 通过检查 OpenShift Container Platform Web 控制台 Observe 中的 Network Health 仪表板来确认规则处于活跃状态。

9.2.4. 禁用预定义的警报

警报模板可以在 FlowCollector 自定义资源(CR)的 spec.processor.metrics.disableAlerts 字段中禁用。此设置接受警报模板名称列表。有关警报模板名称列表,请参阅 "List of default alerts"。

如果模板被禁用并覆盖在 spec.processor.metrics.alerts 字段中,则 disable 设置具有优先权,且不会创建警报规则。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部