文章目录
- 前言
- 监控功能
- 告警功能
- 环境准备
- 操作步骤
- 深信服AD开启SNMP
- SNMP V2
- SNMP V3
- Zabbix导入模版
- Zabbix中添加深信服AD
前言
深信服AD,应用交付网关,是较为常见的应用发布、负载均衡设备,常用于网络出口。
本案例是通过zabbix的snmp监控深信服AD设备,实现故障告警,后面附带本案例的模板,导入即可使用。
本案例仅包含针对深信服AD的监控项、触发器、自动发现规则等,不包括zabbix推送告警的相关配置。
监控功能
- CPU利用率
- 内存利用率
- 双机角色
- 设备运行时间
- 链路(自动发现):链路名称、链路状态、上下行流量
- 虚拟服务(自动发现):虚拟服务名称、虚拟IP、虚拟服务状态
告警功能
-
AD状态异常时发送告警
-
AD双机状态发生切换时告警
-
链路故障告警
-
虚拟服务故障告警
环境准备
本案例使用的版本如下,不同版本可能无法正常使用,可参考深信服对应版本的mib库自行修改。
序号 | 组件 | 版本 |
---|---|---|
1 | zabbix | 7.0 LTS |
2 | 深信服AD | AD7.0.8R5 |
3 | SNMP | V2或V3 |
操作步骤
深信服AD开启SNMP
SNMP V2或SNMP V3(二选一),正常情况下V2就可以,如果有等级保护等安全需求,可以选择更安全的V3。
SNMP V2
名称:自定义
共同体:相当于密码,建议设置强一些,一定记好,之后要用
允许访问的IP来源:建议仅允许zabbix服务器访问
SNMP V3
名称:自定义
用户名:自定义,一定记好,之后要用
认证:启用,算法选择SHA
认证密码:自定义,一定记好,之后要用
加密:禁用(这个版本的AD仅支持DES加密方式,zabbix不支持,所以禁用)
Zabbix导入模版
-
复制代码,保存文本文档,文件名为zbx.yaml;
-
登录zabbix,zabbix7.0:数据采集-模版-导入;zabbix6.0:配置-模版-导入;
-
选择刚才保存的文件,点击导入。
代码如下:
zabbix_export:
version: '7.0'
template_groups:
- uuid: 36bff6c29af64692839d077febfc7079
name: 'Templates/Network devices'
templates:
- uuid: 182ef33aec51420dba30b561b4e4a998
template: SangforAD
name: SangforAD
groups:
- name: 'Templates/Network devices'
items:
- uuid: e65c037f9f34444fb642ee9acf74ffe7
name: CPU使用率
type: SNMP_AGENT
snmp_oid: .1.3.6.1.4.1.35047.2.2.20.0
key: adCpuCostRate
history: 90d
units: '%'
- uuid: 6893590bddee4c4f85ff813a25929bbd
name: 内存使用率
type: SNMP_AGENT
snmp_oid: .1.3.6.1.4.1.35047.2.2.19.0
key: adMemCostRate
history: 90d
units: '%'
- uuid: 78ce1e978f9d46509757ebe454b40efc
name: 双机角色
type: SNMP_AGENT
snmp_oid: .1.3.6.1.4.1.35047.2.2.56.0
key: adStandByState
history: 90d
valuemap:
name: AD双机状态
preprocessing:
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 30m
triggers:
- uuid: 0c1196aba97947f69d8b4db29a5881a8
expression: 'last(/SangforAD/adStandByState,#1)<>last(/SangforAD/adStandByState,#2)'
name: 双机角色发生切换
priority: AVERAGE
- uuid: 02084ae1ff9442f89a33cbf55500f476
name: 设备运行时间
type: SNMP_AGENT
snmp_oid: .1.3.6.1.4.1.35047.2.2.46.0
key: adUptime
history: 90d
units: s
triggers:
- uuid: 351770d1f0574cb1b98e5fbc57ebc5da
expression: 'last(/SangforAD/adUptime)<10m or nodata(/SangforAD/adUptime,65s)=1'
name: AD运行时间小于10分钟或AD状态异常
priority: HIGH
- uuid: 9a7dde052d034a4993891a53a255e952
name: 'Generic SNMP: ICMP ping'
type: SIMPLE
key: icmpping
history: 7d
tags:
- tag: component
value: health
- tag: component
value: network
triggers:
- uuid: bffd76d5fc16406b86c58664f821cae8
expression: 'max(/SangforAD/icmpping,#3)=0'
name: 'Generic SNMP: Unavailable by ICMP ping'
priority: HIGH
description: 'Last three attempts returned timeout. Please check device connectivity.'
tags:
- tag: scope
value: availability
- uuid: cde4b61719b7440baa47c0970c2eded5
name: 'Generic SNMP: SNMP agent availability'
type: INTERNAL
key: 'zabbix[host,snmp,available]'
history: 7d
description: |
Availability of SNMP checks on the host. The value of this item corresponds to availability icons in the host list.
Possible value:
0 - not available
1 - available
2 - unknown
tags:
- tag: component
value: health
- tag: component
value: network
triggers:
- uuid: 6f1191cf24bf462dbddd75a7f2962a11
expression: 'max(/SangforAD/zabbix[host,snmp,available],{$SNMP.TIMEOUT})=0'
name: 'Generic SNMP: No SNMP data collection'
opdata: 'Current state: {ITEM.LASTVALUE1}'
priority: WARNING
description: 'SNMP is not available for polling. Please check device connectivity and SNMP settings.'
dependencies:
- name: 'Generic SNMP: Unavailable by ICMP ping'
expression: 'max(/SangforAD/icmpping,#3)=0'
tags:
- tag: scope
value: availability
discovery_rules:
- uuid: 127b422d4e744e6aafcd5d54e2827287
name: 网络链路发现
type: SNMP_AGENT
snmp_oid: 'discovery[{#LINKNAME},1.3.6.1.4.1.35047.2.2.41.1.2]'
key: adLinkDiscover
delay: 1h
lifetime: 30d
enabled_lifetime_type: DISABLE_NEVER
item_prototypes:
- uuid: c31536f39177485cb8adec38634aa86c
name: '链路: {#LINKNAME}: 入方向流量'
type: SNMP_AGENT
snmp_oid: '1.3.6.1.4.1.35047.2.2.41.1.6.{#SNMPINDEX}'
key: 'adLinkBitIn[adLinkBitIn.{#SNMPINDEX}]'
history: 180d
units: bps
- uuid: d8f76a466c5d4842a69e3f03492742b9
name: '链路: {#LINKNAME}: 出方向流量'
type: SNMP_AGENT
snmp_oid: '1.3.6.1.4.1.35047.2.2.41.1.7.{#SNMPINDEX}'
key: 'adLinkBitOut[adLinkBitOut.{#SNMPINDEX}]'
history: 180d
units: bps
- uuid: 33854a3b380a405ab34b40d3bab3f7e1
name: '链路: {#LINKNAME}: 状态'
type: SNMP_AGENT
snmp_oid: '1.3.6.1.4.1.35047.2.2.41.1.5.{#SNMPINDEX}'
key: 'Link.Status[LinkStatus.{#SNMPINDEX}]'
history: 180d
valuemap:
name: AD链路状态
trigger_prototypes:
- uuid: 709db6f419bc453eb7d0ead143e6e1d9
expression: 'last(/SangforAD/adStandByState)=1 and last(/SangforAD/Link.Status[LinkStatus.{#SNMPINDEX}])=0'
recovery_mode: RECOVERY_EXPRESSION
recovery_expression: 'last(/SangforAD/adStandByState)=1 and last(/SangforAD/Link.Status[LinkStatus.{#SNMPINDEX}])=1'
name: '{#LINKNAME}: 链路状态异常'
priority: HIGH
preprocessing:
- type: JAVASCRIPT
parameters:
- |
function hex2a(hexx) {
var jsonArray = JSON.parse(hexx);
for (var j = 0; j < jsonArray.length; j++) {
var ascstr = jsonArray[j]['{#LINKNAME}'];
var isHex = /^[0-9a-fA-F\s]+$/.test(ascstr);
if (!isHex) {
continue; // 如果LINKNAME不是十六进制字符串,则跳过
}
else {
var ascstrnew = ascstr.replace(/\s*/g, "").toString();
var str = '';
for (var i = 0; i < ascstrnew.length && ascstrnew.substr(i, 2) !== '00'; i += 2)
str += '%' + ascstrnew.substr(i, 2);
jsonArray[j]['{#LINKNAME}'] = decodeURIComponent(str); // 将处理后的UTF-8字符串替换回原始数据结构中的LINKNAME属性
}
};
return JSON.stringify(jsonArray); // 返回修改后的原始数据结构
}
return hex2a(value);
- uuid: a113107b7ae943558a9592bb5e5a514e
name: 虚拟服务发现
type: SNMP_AGENT
snmp_oid: 'discovery[{#VNAME},1.3.6.1.4.1.35047.2.2.11.1.2,{#VIP},1.3.6.1.4.1.35047.2.2.11.1.16]'
key: adVsDiscover
delay: 1h
lifetime: 30d
enabled_lifetime_type: DISABLE_NEVER
item_prototypes:
- uuid: 29044bbc762b4a879bda055bde9672b0
name: '虚拟服务: {#VNAME}-{#VIP}: 状态'
type: SNMP_AGENT
snmp_oid: '1.3.6.1.4.1.35047.2.2.11.1.17.{#SNMPINDEX}'
key: 'vService.status[vServiceStatus.{#SNMPINDEX}]'
history: 365d
trends: '0'
value_type: TEXT
preprocessing:
- type: DISCARD_UNCHANGED_HEARTBEAT
parameters:
- 30m
trigger_prototypes:
- uuid: 73dd8b3dcf5243c89c7a2c30390696fb
expression: 'last(/SangforAD/adStandByState)=1 and last(/SangforAD/vService.status[vServiceStatus.{#SNMPINDEX}])="DOWN"'
recovery_mode: RECOVERY_EXPRESSION
recovery_expression: 'last(/SangforAD/adStandByState)=1 and last(/SangforAD/vService.status[vServiceStatus.{#SNMPINDEX}])="UP"'
name: '{#VNAME}-{#VIP}: 故障告警'
priority: HIGH
preprocessing:
- type: JAVASCRIPT
parameters:
- |
function hex2a(hexx) {
var jsonArray = JSON.parse(hexx);
for (var j = 0; j < jsonArray.length; j++) {
var ascstr = jsonArray[j]['{#VNAME}'];
var isHex = /^[0-9a-fA-F\s]+$/.test(ascstr);
if (!isHex) {
continue; // 如果VNAME不是十六进制字符串,则跳过
}
else {
var ascstrnew = ascstr.replace(/\s*/g, "").toString();
var str = '';
for (var i = 0; i < ascstrnew.length && ascstrnew.substr(i, 2) !== '00'; i += 2)
str += '%' + ascstrnew.substr(i, 2);
jsonArray[j]['{#VNAME}'] = decodeURIComponent(str); // 将处理后的UTF-8字符串替换回原始数据结构中的VNAME属性
}
};
return JSON.stringify(jsonArray); // 返回修改后的原始数据结构
}
return hex2a(value);
tags:
- tag: 品牌
value: 深信服
- tag: 类型
value: 负载均衡
valuemaps:
- uuid: 6d8c480207584a7da68f856b9669c361
name: AD双机状态
mappings:
- value: '1'
newvalue: Master
- value: '0'
newvalue: Slave
- uuid: 8255f78946db4af9a7acfa166b6442cb
name: AD链路状态
mappings:
- value: '1'
newvalue: UP
- value: '0'
newvalue: DOWN
Zabbix中添加深信服AD
-
zabbix7.0:数据采集-主机-创建主机;zabbix6.0:配置-主机-创建主机;
-
主机名称:建议填写IP地址;
-
可见名称:显示的名称,自定义;
-
模版:选择刚才导入的SangforAD;
-
接口:添加-SNMP;
-
IP地址填写AD的IP;
-
SNMP版本:根据AD上配置的选择;
-
安全名称和认证口令:根据AD上配置的填写;
-
其他保持默认,点击添加。