5.4. 将警报作为 SNMP 陷阱发送
要启用 SNMP 陷阱,请修改 ServiceTelemetry 对象并配置 snmpTraps 参数。SNMP 陷阱使用版本 2c 发送。
5.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
...5.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\"}"5.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 可用参数的详情,请参考 第 5.4.1 节 “snmpTraps 的配置参数”。
5.4.4. 为 SNMP 陷阱创建警报
您可以通过添加由 prometheus-webhook-snmp 中间件解析的标签来创建由 SNMP 陷阱配置的警报,以定义陷阱信息和交付对象标识符(OID)。只有在需要更改特定警报定义的默认值时,才需要添加 oid 或 severity 标签。
- 注意
-
当您设置 oid 标签时,顶级 SNMP 陷阱 OID 更改,但 sub-OID 仍由全局
trapOidPrefix值定义,加上子 OID 值.1.1.1到.1.1.9。有关 MIB 定义的详情,请参考 第 5.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.coreos.com/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
附加信息
有关配置警报的更多信息,请参阅 第 5.3 节 “Service Telemetry Framework 中的警报”。