网络监控:夜莺标准化实现对10台深信服防火墙的监控告警实践

admin 2026-02-17 19:56:05 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档介绍了利用夜莺监控系统对深信服AF防火墙进行标准化监控的实践。针对固件版本众多适配难的问题,作者按版本区间提供了修复后的MIB文件及配置方案。文中详细给出了SNMP采集配置示例,涵盖CPU、内存、磁盘等核心指标,支持v2与v3协议,并建议逐个测试配置以便排查故障,为构建网络设备监控告警系统提供了详实的操作参考。 综合评分: 89 文章分类: 安全建设,实战经验,安全运营,安全工具


cover_image

网络监控:夜莺标准化实现对10台深信服防火墙的监控告警实践

原创

小斐Lab 小斐Lab

网络小斐

2026年2月12日 14:58 浙江

大家好,我是小斐呀。

夜莺生态标准化把国内主流品牌的网络设备都适配了下,其中适配深信服 AF 的时候发现,深信服 AF 版本太多,适配起来挺费劲的,这篇文章展开讲讲,在具体使用的时候需要注意的事项。

目前深信服 AF 的固件版本有很多,这里我把主要的版本信息分三个固件不同阶段作为监控版本的区分,同时每个版本的 mib 文件也是不相同的,具体区分如下:

  • AF 8.0.32 ~ AF 8.0.48
  • AF 8.0.51 ~ AF 8.0.75
  • AF 8.0.85 ~ AF 8.0.106(最新版本)

不同版本的 mib 文件我都提供并修复好了,可以直接在网盘中拿来使用。

夜莺生态

这些都是补充夜莺生态路线的采集,主要的两个路线如下所示:

这里是基于 push 模式 对深信服 AF 进行标准化指标采集,采集的指标根据不同版本会有所不同,模版也会有相应的变化,指标如下所示:

上面是基础指标,根据不同的版本指标会有所增加(原则上是版本越高,指标越详细),具体可以看对应区间版本的 Grafana 模版,小伙伴们可以自己尝试一下,如果有问题可以随时咨询我。

指标采集配置,把对应 mib 放入指定目录,如 /opt/categraf/mibs/sangfor/af 目录下,然后把对应采集配置文件放入 /opt/categraf/conf/input.snmp/ 目录下:

snmp_sangfor_system.toml 文件如下:

# 适配深信服 >= AF8.0.85 版本
[[instances]]
agents = [
    "udp://172.16.10.1"
    # "udp://172.17.14.7"   # 备机不可访问
]

# metrics_name_prefix = "sangfor_"

interval_times = 2
labels = { region = "hangzhou", role = "af", layer = "core" }

timeout = "3s"
version = 2
community = "zabbix"
path = ["/opt/categraf/mibs/sangfor/af"]
translator = "gosmi"
agent_host_tag = "ident"
retries = 2
max_repetitions = 15
# 健康检查的周期
health_check_interval = "60s"
# 健康检查超时
health_check_timeout = "5s"
# 健康检查失败达到多少次判定设备异常
max_fail_count = 3
# 异常后隔多久再检查
recovery_interval = "5m"

# 系统启动时间 数据类型:String 单位:1/100秒
# 32-bit 值,单位是1/100秒,可以存497天后溢出重置为0
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.25.1.1.0
[[instances.field]]
oid = "HOST-RESOURCES-MIB::hrSystemUptime.0"
name = "uptime"

# 单位:秒
# snmp_uptime_seconds = snmp_uptime / 100

# 系统名称 数据类型:String
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.1.5.0
[[instances.field]]
oid = "SNMPv2-MIB::sysName.0"
name = "device_name"
is_tag = true

# 设备状态 数据类型:INTEGER
# Normal(1)-正常 0-异常
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.12.0
[[instances.field]]
oid = "SANGFOR-MIB::sfDeviceStatus.0"
name = "system_device_status"

# # 网关序列号 数据类型:String
# # snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.40.1.0
# [[instances.field]]
# oid = "SANGFOR-MIB::sfSnGW.1.0"
# name = "device_serial_number"
# is_tag = true

# 进程数 数据类型:String
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.25.1.6.0
[[instances.field]]
oid = "HOST-RESOURCES-MIB::hrSystemProcesses.0"
name = "system_processes_number"

# 系统服务数 单位:个
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.1.7.0
[[instances.field]]
oid = "SNMPv2-MIB::sysServices.0"
name = "system_services_number"

# CPU 使用率 单位:%
# 多个 CPU 时算平均值
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.3.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysCpuCostRate.0"
name = "system_cpu_usage_percent"

# # 所有 CPU 使用率 单位:%
# # 多个 CPU 时算平均值
# # 等同于 SANGFOR-MIB::sfSysCpuCostRate.0
# # snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.19.3.0
# [[instances.field]]
# oid = "SANGFOR-MIB::sfCpuAllCostRate.0"
# name = "system_cpu_usage_percent"

# 用户 CPU 使用率 单位:%
# 多个 CPU 时算平均值
# snmpwalk -v 2c -c public 192.168.1.1 .11.3.6.1.4.1.35047.1.19.1.0
[[instances.field]]
oid = "SANGFOR-MIB::sfCpuUserCostRate.0"
name = "system_cpu_user_usage_percent"

# 系统 CPU 使用率 单位:%
# 多个 CPU 时算平均值
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.19.2.0
[[instances.field]]
oid = "SANGFOR-MIB::sfCpuSysCostRate.0"
name = "system_cpu_system_usage_percent"

# 空闲CPU 单位:%
# snmp_system_cpu_idle_usage_percent = 100 - (snmp_system_cpu_user_usage_percent + snmp_system_cpu_system_usage_percent)

# MIB文件:SANGFOR-MIB oid 所在表:sfCpuTable
# 索引:cpuIndex 获取设备CPU指标信息
[[instances.table]]
name = "system"
index_as_tag = true
inherit_tags = ["device_name"]

# CPU名称 数据类型:String
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.16.1.2
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuName"
name = "cpu_name"
is_tag = true

# 最近1分钟 CPU 的负载 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.16.1.3
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuLoadLast1Min"
name = "cpu_load_1m_percent"

# 最近5分钟 CPU 的负载 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.16.1.4
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuLoadLast5Min"
name = "cpu_load_5m_percent"

# 最近15分钟 CPU 的负载 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.16.1.5
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuLoadLast15Min"
name = "cpu_load_15m_percent"

# CPU 温度 数据类型:INTEGER 单位:℃ 如果数据是 0 代表暂不支持
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.16.1.7
[[instances.table.field]]
oid = "SANGFOR-MIB::sfIntCpuTemp"
name = "cpu_temp_celsius"

# 单个 CPU 用户空间使用率 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.20.1.2
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuUser"
name = "cpu_node_user_usage_percent"

# 单个 CPU 系统空间使用率 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.20.1.3
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuSys"
name = "cpu_node_system_usage_percent"

# 单个 CPU 总使用率 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.20.1.4
[[instances.table.field]]
oid = "SANGFOR-MIB::sfCpuAll"
name = "cpu_node_total_usage_percent"

# 内存占用率 当前使用内存占用总内存的百分比 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.13.5.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysMemoryUsage.0"
name = "system_mem_usage_percent"
conversion = "float"

# 可用内存大小-真实内存 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.13.6.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysAvailMemory.0"
name = "system_mem_avail_mbytes"
conversion = "float"

# snmp_system_mem_avail_bytes = snmp_system_mem_avail_mbytes * 1024 * 1024

# 共享内存大小 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.13.7.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysShareMemory.0"
name = "system_mem_shared_mbytes"
conversion = "float"

# snmp_system_mem_shared_bytes = system_mem_shared_mbytes * 1024 * 1024

# buffer内存大小 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.13.8.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysBufferMemory.0"
name = "system_mem_buffer_mbytes"
conversion = "float"

# snmp_system_mem_buffer_bytes = snmp_system_mem_buffer_mbytes * 1024 * 1024

# cache内存大小 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.13.9.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysCachedMemory.0"
name = "system_mem_cached_mbytes"
conversion = "float"

# snmp_system_mem_cached_bytes = snmp_system_mem_cached_mbytes * 1024 * 1024

# 全部内存大小-真实内存 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.13.10.0
[[instances.field]]
oid = "SANGFOR-MIB::sfSysTotalRealMemory.0"
name = "system_mem_total_mbytes"
conversion = "float"

# snmp_system_mem_total_bytes = snmp_system_mem_total_mbytes * 1024 * 1024

# 单个硬盘占用率 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.2.1.1.13.0
[[instances.field]]
oid = "SNMPv2-MIB::sysDiskUsage.0"
name = "system_disk_usage_percent"

# MIB文件:SANGFOR-MIB oid 所在表:sfDiskTable
# 索引:diskIndex 获取设备磁盘指标信息
[[instances.table]]
name = "system"
index_as_tag = true
inherit_tags = ["device_name"]
filters = ["exprA:part_name:^.*mapper.*$"]
filters_expression = "exprA"

# 分区名称 数据类型:String
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.5.1.2
[[instances.table.field]]
oid = "SANGFOR-MIB::sfFilesystemName"
name = "part_name"
is_tag = true

# 磁盘使用百分比 数据类型:INTEGER 单位:%
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.5.1.6
[[instances.table.field]]
oid = "SANGFOR-MIB::sfDiskUsedPercent"
name = "disk_part_used_percent"
conversion = "float"

# 磁盘大小整数形式 数据类型:INTEGER 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.5.1.7
[[instances.table.field]]
oid = "SANGFOR-MIB::sfIntDiskSize"
name = "disk_part_size_mbytes"

# snmp_system_disk_size_bytes = snmp_system_disk_size_mbytes * 1024 * 1024

# 已使用的磁盘大小整数形式 数据类型:INTEGER 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.5.1.8
[[instances.table.field]]
oid = "SANGFOR-MIB::sfIntDiskUsed"
name = "disk_part_used_mbytes"

# snmp_system_disk_used_bytes = snmp_system_disk_used_mbytes * 1024 * 1024

# 可用磁盘大小整数形式 数据类型:INTEGER 单位:MB
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.5.1.9
[[instances.table.field]]
oid = "SANGFOR-MIB::sfIntDiskAvail"
name = "disk_part_avail_mbytes"

# snmp_system_disk_avail_bytes = snmp_system_disk_avail_mbytes * 1024 * 1024

# 磁盘温度 数据类型:INTEGER 单位:摄氏度 如果数据是 0 代表暂不支持
# snmpwalk -v 2c -c public 192.168.1.1 .1.3.6.1.4.1.35047.1.5.1.10
[[instances.table.field]]
oid = "SANGFOR-MIB::sfDiskTemp"
name = "disk_part_temp_celsius"

# 标签值通过正则捕获最后一个点后面的值作为标签的新值
[[instances.relabel_configs]]
source_labels = ["part_name"]
separator = "/"
action = "replace"
regex = ".*vg1-(.*)"
replacement = "$1"
target_label = "part_name"

这只是系统指标的一种,还有更多指标都在网盘中,把你对应的 IP 和团体名修改一下,然后 mib 文件路径指定一下即可。

如果是 SNMP v3 那就把团体名配置去掉,添加下面对应的配置:

# SNMPv3 认证和加密选项
sec_name = "huawei"
# "MD5", "SHA", "SHA224", "SHA256", "SHA384", "SHA512"
auth_protocol = "SHA"
# 用于认证的密码
auth_password = "huawei@4321"
## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv".
# 指定用于SNMP的安全级别
sec_level = "authPriv"
# 用于SNMP上下文,它用于区分MIB(管理信息库)对象的多个实例。如果您不需要这个,可以将其留空。
context_name = ""
# 如果sec_level设置为authPriv,此选项指定用于SNMP消息的隐私(加密)协议。"DES", "AES", "AES192", "AES192C", "AES256", "AES256C"
priv_protocol = "AES"
# 用于加密的密码。如果您使用加密(sec_level设置为authPriv),需要取消注释并设置为您希望使用的加密密码。
priv_password = "huawei@1234"

在采集的过程中,记得一个文件一个文件的测试采集成功后,在继续测试另外一个,这样可以缩小采集错误的范围,排查错误的时候可以更好的定位问题,而不至于一有错误就抓瞎。

指标数据

深信服 AF 有挺多小伙伴在用,我也就根据实际情况把当前主流版本都适配了下:

end

如果您的环境下也有各种品牌的网络设备需要统一化采集和监控,也想构建一套比较合适的网络基础设施监控告警系统,可以试试这套开源架构,有深入需求可以加我沟通。

我建立了一些对关于网络和基础设施等相关的监控告警群,针对这块的有需求或者想沟通交流,可以加入到群里交流即可,可公众号后台私信加我,我拉你进群。

📣欢迎朋友们关注公众号📢📢:【网络小斐】!

🙋‍♂️有想法的朋友也可以加我沟通,朋友🔘做个点赞之交!😂😂

欢迎点赞 👍、收藏 💗、关注 💡 三连支持一下,我们下期见~✨


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:网络小斐 小斐Lab 小斐Lab《网络监控:夜莺标准化实现对10台深信服防火墙的监控告警实践》

评论:0   参与:  0