9.2. 在网络可观察性中启用技术预览警报
Network Observability Operator 警报是一个技术预览功能。要使用这个功能,您必须在 FlowCollector 自定义资源(CR)中启用它,然后继续根据您的特定需求配置警报。
流程
-
编辑
FlowCollectorCR,将实验性警报标记设置为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-
指定警报的严重性。以下值有效:
关键、warning或info。
您可以在 消息 注解中使用定义的 PromQL 表达式的输出标签。在示例中,由于结果按 DstK8S_Namespace 分组,因此消息文本中使用表达式 {{ $labels.DstK8S_Namespace }}。
netobserv_io_network_health 注解是可选的,用于控制在 Network Health 页面中如何呈现警报。
netobserv_io_network_health 注解是一个由以下字段组成的 JSON 字符串:
| 字段 | 类型 | 描述 |
|---|---|---|
|
| 字符串列表 | 保留命名空间的一个或多个标签。提供后,警报会出现在 Namespaces 选项卡中。 |
|
| 字符串列表 | 保存节点名称的一个或多个标签。提供后,警报会出现在 Nodes 选项卡中。 |
|
| 字符串 |
警报阈值,预期与 |
|
| 字符串 | 数据单元,仅用于显示目的。 |
|
| 字符串 | 用于计算封闭规模分数的上限值。超过这个绑定的指标值会被强制使用。 |
|
| 对象列表 |
与警报相关的上下文显示的链接列表。每个链接都需要一个 |
|
| 字符串 | 注入 Network Traffic 页面的 URL 的额外过滤器。 |
namespaceLabels 和 nodeLabels 是互斥的。如果没有提供,警报会出现在 Global 选项卡下。
9.2.3. 创建自定义警报规则 复制链接链接已复制到粘贴板!
使用 Prometheus Query Language (PromQL)定义自定义 AlertingRule 资源,以根据特定的网络指标(如流量监控)触发警报。
先决条件
-
熟悉
PromQL. - 已安装 OpenShift Container Platform 4.14 或更高版本。
-
您可以使用具有
cluster-admin角色的用户访问集群。 - 已安装 Network Observability Operator。
流程
-
创建名为
custom-alert.yaml的 YAML 文件,其中包含您的AlertingRule资源。 运行以下命令来应用自定义警报规则:
$ oc apply -f custom-alert.yaml
验证
运行以下命令,验证
PrometheusRule资源是否在netobserv命名空间中创建:$ oc get prometheusrules -n netobserv -oyaml输出应包含您刚才创建的
netobserv-alerts规则,确认是否已正确生成资源。-
通过检查 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 设置具有优先权,且不会创建警报规则。