6.4. 将警报作为 SNMP 陷阱发送
要启用 SNMP 陷阱,请修改 ServiceTelemetry
对象并配置 snmpTraps
参数。SNMP 陷阱使用版本 2c 发送。
6.4.1. snmpTraps 的配置参数
snmpTraps
参数包含以下子参数来配置警报接收器:
- enabled
- 将此子参数的值设为 true 以启用 SNMP 陷阱警报接收器。默认值为 false。
- target
-
发送 SNMP 陷阱的目标地址。value 是一个字符串。默认为
192.168.24.254
。 - 端口
-
发送 SNMP 陷阱的目标端口。value 是一个整数。默认为
162
。 - community
-
将 SNMP 陷阱发送到的目标社区。value 是一个字符串。默认为
公共
。 - retries
-
SNMP 陷入重试交付限制。value 是一个整数。默认值为
5
。 - timeout
-
SNMP 陷阱交付超时(以秒为单位)。value 是一个整数。默认为
1
。 - alertOidLabel
-
警报中的标签名称,用于定义 OID 值以发送 SNMP 陷阱。value 是一个字符串。默认为
oid
。 - trapOidPrefix
-
SNMP 陷入变量绑定的 OID 前缀。value 是一个字符串。默认为
1.3.6.1.4.1.50495.15
。 - trapDefaultOid
-
如果没有通过警报指定警报 OID 标签,则 SNMP 陷阱 OID。value 是一个字符串。默认为
1.3.6.1.4.1.50495.15.1.2.1
。 - trapDefaultSeverity
- 如果没有设置警报严重性时,SNM 陷阱严重性。value 是一个字符串。默认为空字符串。
将 snmpTraps
参数配置为 ServiceTelemetry
对象中的 alert.alertmanager.receivers
定义的一部分:
apiVersion: infra.watch/v1beta1 kind: ServiceTelemetry metadata: name: default namespace: service-telemetry spec: alerting: alertmanager: receivers: snmpTraps: alertOidLabel: oid community: public enabled: true port: 162 retries: 5 target: 192.168.25.254 timeout: 1 trapDefaultOid: 1.3.6.1.4.1.50495.15.1.2.1 trapDefaultSeverity: "" trapOidPrefix: 1.3.6.1.4.1.50495.15 ...
6.4.2. MIB 定义概述
SNMP 陷阱默认使用对象标识符(OID)值 1.3.6.1.4.1.50495.15.1.2.1
。管理信息基础(MIB)模式位于 https://github.com/infrawatch/prometheus-webhook-snmp/blob/master/PROMETHEUS-ALERT-CEPH-MIB.txt。
OID 数量由以下组件值组成:* 值 1.3.6.1.4.1
是为私有企业定义的全局 OID。* 下一个标识符 50495
是 Ceph 机构的 IANA 分配的专用企业编号。* 其他值是父值的子 OID。
- 15
- Prometheus 对象
- 15.1
- Prometheus 警报
- 15.1.2
- Prometheus 警报陷阱
- 15.1.2.1
- Prometheus 警报陷阱默认
prometheus alert trap 默认是一个由几个其他子对象到 OID 1.3.6.1.4.1.50495.15
的对象,它由 alert. alertmanager.receivers.snmpTraps.trapOidPrefix
参数定义:
- <trapOidPrefix>.1.1.1
- 警报名称
- <trapOidPrefix>.1.1.2
- status
- <trapOidPrefix>.1.1.3
- 严重性
- <trapOidPrefix>.1.1.4
- 实例
- <trapOidPrefix>.1.1.5
- job
- <trapOidPrefix>.1.1.6
- description
- <trapOidPrefix>.1.1.7
- labels
- <trapOidPrefix>.1.1.8
- timestamp
- <trapOidPrefix>.1.1.9
- rawdata
以下是输出一个简单的 SNMP 陷阱接收器的输出示例,该接收器将收到的陷阱输出到控制台:
SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::enterprises.50495.15.1.2.1 SNMPv2-SMI::enterprises.50495.15.1.1.1 = STRING: "TEST ALERT FROM PROMETHEUS PLEASE ACKNOWLEDGE" SNMPv2-SMI::enterprises.50495.15.1.1.2 = STRING: "firing" SNMPv2-SMI::enterprises.50495.15.1.1.3 = STRING: "warning" SNMPv2-SMI::enterprises.50495.15.1.1.4 = "" SNMPv2-SMI::enterprises.50495.15.1.1.5 = "" SNMPv2-SMI::enterprises.50495.15.1.1.6 = STRING: "TEST ALERT FROM " SNMPv2-SMI::enterprises.50495.15.1.1.7 = STRING: "{\"cluster\": \"TEST\", \"container\": \"sg-core\", \"endpoint\": \"prom-https\", \"prometheus\": \"service-telemetry/default\", \"service\": \"default-cloud1-coll-meter\", \"source\": \"SG\"}" SNMPv2-SMI::enterprises.50495.15.1.1.8 = Timeticks: (1676476389) 194 days, 0:52:43.89 SNMPv2-SMI::enterprises.50495.15.1.1.9 = STRING: "{\"status\": \"firing\", \"labels\": {\"cluster\": \"TEST\", \"container\": \"sg-core\", \"endpoint\": \"prom-https\", \"prometheus\": \"service-telemetry/default\", \"service\": \"default-cloud1-coll-meter\", \"source\": \"SG\"}, \"annotations\": {\"action\": \"TESTING PLEASE ACKNOWLEDGE, NO FURTHER ACTION REQUIRED ONLY A TEST\"}, \"startsAt\": \"2023-02-15T15:53:09.109Z\", \"endsAt\": \"0001-01-01T00:00:00Z\", \"generatorURL\": \"http://prometheus-default-0:9090/graph?g0.expr=sg_total_collectd_msg_received_count+%3E+1&g0.tab=1\", \"fingerprint\": \"feefeb77c577a02f\"}"
6.4.3. 配置 SNMP 陷阱
先决条件
- 确保您知道要将警报发送到的 SNMP 陷阱接收器的 IP 地址或主机名。
流程
- 登录到 Red Hat OpenShift Container Platform。
进入
service-telemetry
命名空间:$ oc project service-telemetry
要启用 SNMP 陷阱,修改
ServiceTelemetry
对象:$ oc edit stf default
设置
alerting.alertmanager.receivers.snmpTraps
参数:apiVersion: infra.watch/v1beta1 kind: ServiceTelemetry ... spec: ... alerting: alertmanager: receivers: snmpTraps: enabled: true target: 10.10.10.10
-
确保将
target
的值设置为 SNMP 陷阱接收器的 IP 地址或主机名。
其它信息
有关 snmpTraps
可用参数的详情,请参考 第 6.4.1 节 “snmpTraps 的配置参数”。
6.4.4. 为 SNMP 陷阱创建警报
您可以通过添加由 prometheus-webhook-snmp 中间件解析的标签来创建由 SNMP 陷阱配置的警报,以定义陷阱信息和交付对象标识符(OID)。只有在需要更改特定警报定义的默认值时,才需要添加 oid
或 severity
标签。
当您设置 oid 标签时,顶级 SNMP 陷阱 OID 更改,但 sub-OID 仍由全局 trapOidPrefix
值定义,加上子 OID 值 .1.1.1
到 .1.1.9
。有关 MIB 定义的详情,请参考 第 6.4.2 节 “MIB 定义概述”。
流程
- 登录到 Red Hat OpenShift Container Platform。
进入
service-telemetry
命名空间:$ oc project service-telemetry
创建包含警报规则和包含 SNMP trap OID 覆盖值的
oid
标签的PrometheusRule
对象:$ oc apply -f - <<EOF apiVersion: monitoring.rhobs/v1 kind: PrometheusRule metadata: creationTimestamp: null labels: prometheus: default role: alert-rules name: prometheus-alarm-rules-snmp namespace: service-telemetry spec: groups: - name: ./openstack.rules rules: - alert: Collectd metrics receive rate is zero expr: rate(sg_total_collectd_msg_received_count[1m]) == 0 labels: oid: 1.3.6.1.4.1.50495.15.1.2.1 severity: critical EOF
附加信息
有关配置警报的更多信息,请参阅 第 6.3 节 “Service Telemetry Framework 中的警报”。