资讯动态

Zabbix 模板实战:基于 SNMPv2 监控 Balabit Shell Control Box(community-templates 源码级解析)

发布时间:2026/10/16 2:22:25 来源:尧图企业网站定制
【免费下载链接】community-templatesZabbix Community Templates repository项目地址https://gitcode.com/gh_mirrors/co/community-templates点击查看免费下载本文围绕 Zabbix community-templates 仓库中的BALABIT-SNMPv2-Shell_Control_Box模板展开系统讲解如何通过 SNMPv2 全面监控 Balabit Shell Control BoxSCB——一款用于 SSH、HTTP、RDP、ICA、Telnet、VNC 等远程会话审计与访问控制的网络安防设备。读完本文你将掌握模板的导入方法、以snmpwalk为起点的宏回填流程、网络接口/文件系统/CPU 三类发现规则、30 余项采集项与全套触发器的底层实现以及部署排障的实战要点。模板概览BALABIT-SNMPv2-Shell_Control_Box该模板的名称即BALABIT-SNMPv2-Shell_Control_Box用途是以 SNMP v2 对 Balabit Shell Control Box 产品进行监督。它在 Zabbix 中同时承担两类监控职责通用主机健康监控ICMP 连通性、SNMP 可用性、系统描述、主机名、进程数与在线用户数业务进程监控对 SCB 上以scb_为前缀的六大协议代理进程scb_http、scb_ica、scb_rdp、scb_ssh、scb_telnet、scb_vnc以及indexerservice、indexerworker、workercontroller等核心服务进行状态、CPU 与内存的逐进程监督。模板在仓库中提供三个 Zabbix 版本的文件分布在同目录下的版本子目录中版本模板文件说明文档5.0template_balabit-shell_control_box_snmp.xmlREADME.md5.4template_balabit-shell_control_box_snmp.yamlREADME.md6.0template_balabit-shell_control_box_snmp.yamlREADME.md从导出文件的元数据看5.4 YAML 第 1-3 行zabbix_export: version: 5.4三个版本均出自同一份 2021-11-21 的导出5.4 与 6.0 的 YAML 内容基本一致仅导出格式版本不同而 5.0 使用 XML 格式、触发器采用旧式{last()}表达式语法。模板被归入主机组SECURITE所有 SCB 服务进程采集项统一带有Application: Shell_Control_Box_Services标签5.0 中为同名 application 分组便于在 Zabbix 中按应用维度过滤和汇总。导入模板在 Zabbix Web 前端按配置Configuration→ 模板Templates→ 导入Import选择对应版本的 YAML/XML 文件即可完成导入。导入后注意两点模板没有链接其他模板README 的 Template links 一节明确注明 There are no template links in this template因此不会自动引入网络接口、CPU 等公共模板所有监控项均由本模板自包含为监控主机挂接模板时需确保主机配置了SNMP 接口并正确设置{$SNMP_COMMUNITY}团体名与{$SNMP_PORT}默认161宏。核心配置为每个 scb_ 协议回填宏值这是该模板最关键的部署步骤。模板对六大协议进程的识别不是靠固定的进程名或 PID而是靠HOST-RESOURCES-MIB 中hrSWRunParameters列存储的完整命令行字符串与宏值的精确匹配。README 给出了两步操作流程第一步用 snmpwalk 提取每个协议的真实命令行字符串在能访问 SCB 的管理机上执行snmpwalk | grep scb_更精确的做法是直接遍历 HOST-RESOURCES-MIB 的进程参数表只取每一行的参数列避免无关行干扰snmpwalk -v 2c -c community scb_ip HOST-RESOURCES-MIB::hrSWRunParameters输出中每一行形如HOST-RESOURCES-MIB::hrSWRunParameters.index STRING: --as scb_ssh --threads 1500 --stack-size 256 ...grep scb_即可过滤出scb_http、scb_ica、scb_rdp、scb_ssh、scb_telnet、scb_vnc六条真实命令行。第二步把字符串原样写入宏将第一步得到的每条完整命令字符串逐字复制不能增删字符、不能调整参数顺序填入对应的{$STRING_SERVICE_*}宏例如{$STRING_SERVICE_SSH}←--as scb_ssh --threads 1500 ...。字符串与设备上实际参数不一致时SNMP 表过滤将无法命中目标进程行监控项会无数据随之触发 not running 告警详见下文触发器部分。宏清单与默认值模板预置的 7 个宏及默认值如下5.4 YAML 第 667-690 行macros段宏默认值说明{$SNMP_COMMUNITY}空SNMP 团体名需在主机或模板层指定{$SNMP_PORT}161SNMP 端口{$STRING_SERVICE_HTTP}--as scb_http --threads 1500 --stack-size 256 --process-mode safe-background --verbose 4 --log-tags --log-escape --uid zorp --giscb_http 进程命令行{$STRING_SERVICE_ICA}--as scb_ica --threads 1500 --stack-size 256 --process-mode safe-background --verbose 4 --log-tags --log-escape --uid zorp --gidscb_ica 进程命令行{$STRING_SERVICE_RDP}--as scb_rdp --threads 1500 --stack-size 256 --process-mode safe-background --verbose 4 --log-tags --log-escape --uid zorp --gidscb_rdp 进程命令行{$STRING_SERVICE_SSH}--as scb_ssh --threads 1500 --stack-size 256 --process-mode safe-background --verbose 4 --log-tags --log-escape --uid zorp --gidscb_ssh 进程命令行{$STRING_SERVICE_TELNET}--as scb_telnet --threads 1500 --stack-size 256 --process-mode safe-background --verbose 4 --log-tags --log-escape --uid zorp --scb_telnet 进程命令行{$STRING_SERVICE_VNC}--as scb_vnc --threads 1500 --stack-size 256 --process-mode safe-background --verbose 4 --log-tags --log-escape --uid zorp --gidscb_vnc 进程命令行从命令行参数命名可以推断其含义--as指定 Zorp 应用名即scb_*服务标识--threads为线程数1500--stack-size为线程栈大小256--process-mode safe-background表示以安全后台模式运行--verbose 4为日志详细级别--log-tags/--log-escape控制日志标签与转义输出--uid zorp指定以zorp用户运行--gid后应跟随组名。需要特别留意默认值只是示例。YAML 中 HTTP 宏以--gi结尾、TELNET 宏以--结尾--gid后均未跟实际组名——这些默认值本身并不完整。这正是 README 反复强调必须为每个协议获取真实字符串并回填宏的原因宏值只有在与设备真实hrSWRunParameters完全一致时才能命中进程行。宏的底层作用机制SNMP 表过滤宏值是如何参与 OID 解析的看 5.4 YAML 第 340-343 行 scb_ssh 状态项的snmp_oidHOST-RESOURCES-MIB::hrSWRunStatus[index,HOST-RESOURCES-MIB::hrSWRunParameters, {$STRING_SERVICE_SSH}]从 OID 写法可以推断其解析逻辑Zabbix 先在hrSWRunIndex表上建立行索引第一个参数index再指定过滤列hrSWRunParameters第二个参数最后用宏值{$STRING_SERVICE_SSH}第三个参数作为过滤条件返回命中行的hrSWRunStatus值。也就是说进程识别完全依赖命令行参数列等于宏值这一等值匹配任何字符偏差都会导致该行被过滤掉。同理CPU 与内存项只是把返回列换成hrSWRunPerfCPU/hrSWRunPerfMem过滤条件不变HOST-RESOURCES-MIB::hrSWRunPerfCPU[index,HOST-RESOURCES-MIB::hrSWRunParameters, {$STRING_SERVICE_SSH}] HOST-RESOURCES-MIB::hrSWRunPerfMem[index,HOST-RESOURCES-MIB::hrSWRunParameters, {$STRING_SERVICE_SSH}]而indexerservice/indexerworker则改用可执行路径列hrSWRunPath做匹配5.4 YAML 第 94 行HOST-RESOURCES-MIB::hrSWRunPerfCPU[index,HOST-RESOURCES-MIB::hrSWRunPath, /usr/bin/indexerservice]workercontroller又回到参数匹配且因参数固定含配置文件路径直接写死为完整字符串第 454 行HOST-RESOURCES-MIB::hrSWRunPerfCPU[index,HOST-RESOURCES-MIB::hrSWRunParameters, /usr/bin/workercontroller.py --config-file /etc/indexer/indexerworker.cfg]发现规则Discovery Rules网络接口 / 文件系统 / CPU模板内置三条 SNMP 发现规则更新间隔均为 60 秒为监控项原型item prototype提供动态实例| 规则名 | 类型 | 键 | 底层发现 OID | | ------ | ---- | -- | ------------ | | Network | SNMP agent |snmp.network.discovery|discovery[{#SNMPVALUE},IF-MIB::ifName]| | File System | SNMP agent |snmp.filesystem.discovery|discovery[{#SNMPVALUE},.1.3.6.1.2.1.25.2.3.1.3]即hrStorageDescr | | CPU | SNMP agent |snmp.CPU.discovery|discovery[{#SNMPVALUE},HOST-RESOURCES-MIB::hrProcessorLoad]|discovery[{#SNMPVALUE},OID]是 Zabbix 标准的 SNMP 发现语法第二个参数指定用于枚举的表列如ifName、hrStorageDescr、hrProcessorLoad发现的每个实例值写入宏{#SNMPVALUE}Zabbix 同时提供{#SNMPINDEX}宏携带对应行索引供原型项拼装 OID 使用。三条规则覆盖了 SCB 设备的接口清单、挂载存储与 CPU 拓扑使监控项随设备实际配置自动增删无需手工维护。采集项全景模板共定义33 个常规采集项 14 个 LLD 原型项这里按功能分组列出键名、类型与更新间隔均与 README 及 YAML 一致。scb_ 六大协议进程18 项更新间隔 60s每个协议各 3 项Status状态、Perf CPUCPU 用量、Perf Memory内存用量单位为Kbytes模板 description 明确标注 Result in Kbytes。协议Status 键Perf CPU 键Perf Memory 键scb_httpSNMP-Process-Supervising_scb_http-StatusSNMP-Process-Supervising_scb_http-Perf-CPUSNMP-Process-Supervising_scb_http-Perf-Memoryscb_icaSNMP-Process-Supervising_scb_ica-StatusSNMP-Process-Supervising_scb_ica-Perf-CPUSNMP-Process-Supervising_scb_ica-Perf-Memoryscb_rdpSNMP-Process-Supervising_scb_rdp-StatusSNMP-Process-Supervising_scb_rdp-Perf-CPUSNMP-Process-Supervising_scb_rdp-Perf-Memoryscb_sshSNMP-Process-Supervising_scb_ssh-StatusSNMP-Process-Supervising_scb_ssh-Perf-CPUSNMP-Process-Supervising_scb_ssh-Perf-Memoryscb_telnetSNMP-Process-Supervising_scb_telnet-StatusSNMP-Process-Supervising_scb_telnet-Perf-CPUSNMP-Process-Supervising_scb_telnet-Perf-Memoryscb_vncSNMP-Process-Supervising_scb_vnc-StatusSNMP-Process-Supervising_scb_vnc-Perf-CPUSNMP-Process-Supervising_scb_vnc-Perf-Memory索引服务与控制器9 项更新间隔 60sSCB 的索引子系统由indexerservice、indexerworker两个守护进程组成另有一个 Python 实现的workercontroller以/usr/bin/workercontroller.py --config-file /etc/indexer/indexerworker.cfg启动三者各监控 Status、Perf CPU、Perf Memory 三个维度进程Status 键Perf CPU 键Perf Memory 键indexerserviceSNMP-Process-indexerservice-StatusSNMP-Process-indexerservice-Perf-CPUSNMP-Process-indexerservice-Perf-MemoryindexerworkerSNMP-Process-indexerworker-StatusSNMP-Process-indexerworker-Perf-CPUSNMP-Process-indexerworker-Perf-MemoryworkercontrollerSNMP-Process-workercontroller-StatusSNMP-Process-workercontroller-Perf-CPUSNMP-Process-workercontroller-Perf-Memory系统与可用性6 项| 名称 | 键 | 类型 | 更新间隔 | 底层 OID / 说明 | | ---- | -- | ---- | -------- | ---------------- | | Ping Device |icmpping[,2]| Simple check | 30 | 两次 ICMP 探测 | | Snmp Availability |zabbix[host,snmp,available]| Zabbix internal | 60 | SNMP 可用性状态 | | Name Machine |SNMP-NameMachine| SNMP agent | 3600 |SNMPv2-MIB::sysName.0同时写入资产inventoryNAME 字段 | | System Description |SNMP-SysDescr| SNMP agent | 3600 |SNMPv2-MIB::sysDescr.0| | Nombre de Processus |SNMP-Number-Processus| SNMP agent | 60 |.1.3.6.1.2.1.25.1.6.0hrSystemProcesses进程总数 | | Nombre Utilisateurs Connectes |SNMP-Number-User-Connected| SNMP agent | 60 |.1.3.6.1.2.1.25.1.5.0hrSystemNumUsers在线用户数 |LLD 原型采集项14 项Network8 项——基于ifName发现每个接口| 名称 | 键 | 更新间隔 | OID | | ---- | -- | -------- | --- | | Interface [{#SNMPVALUE}] - IN Octets |SNMP-Interface-IN-Octets-[{#SNMPVALUE}]| 60 |IF-MIB::ifInOctets.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - MAC |SNMP-Interface-MAC-[{#SNMPVALUE}]| 3600 |IF-MIB::ifPhysAddress.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - MTU |SNMP-Interface-MTU-[{#SNMPVALUE}]| 3600 |IF-MIB::ifMtu.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - Operational Status |SNMP-Interface-Op-Status-[{#SNMPVALUE}]| 60 |IF-MIB::ifOperStatus.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - OUT Errors |SNMP-Interface-OUT-Errors-[{#SNMPVALUE}]| 60 |IF-MIB::ifOutErrors.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - OUT Octets |SNMP-Interface-OUT-Octets-[{#SNMPVALUE}]| 60 |IF-MIB::ifOutOctets.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - Speed |SNMP-Interface-Speed-[{#SNMPVALUE}]| 3600 |IF-MIB::ifSpeed.{#SNMPINDEX}| | Interface [{#SNMPVALUE}] - Type |SNMP-Interface-Type-[{#SNMPVALUE}]| 3600 |IF-MIB::ifType.{#SNMPINDEX}|File System3 项——基于hrStorageDescr发现存储| 名称 | 键 | 类型 | 更新间隔 | OID / 公式 | | ---- | -- | ---- | -------- | ---------- | | File System {#SNMPVALUE} - Espace Alloue |SNMP-File-System-Space-Allocated-[{#SNMPVALUE}]| SNMP agent | 60 |.1.3.6.1.2.1.25.2.3.1.5.{#SNMPINDEX}| | File System {#SNMPVALUE} - Espace Utilise |SNMP-File-System-Space-Used-[{#SNMPVALUE}]| SNMP agent | 60 |.1.3.6.1.2.1.25.2.3.1.6.{#SNMPINDEX}| | File System {#SNMPVALUE} - Used Percentage |File-System-Space-Used-Percentage-[{#SNMPVALUE}]| Calculated | 60 |100*(last(//SNMP-File-System-Space-Used-[{#SNMPVALUE}])/last(//SNMP-File-System-Space-Allocated-[{#SNMPVALUE}]))|其中 Used Percentage 是唯一的计算型项由已用空间除以分配空间得到使用率百分比0-100作为磁盘告警的判定依据。CPU3 项——基于hrProcessorLoad发现| 名称 | 键 | 更新间隔 | OID | | ---- | -- | -------- | --- | | CPU {#SNMPINDEX} - Name |SNMP-Name-CPU-[{#SNMPINDEX}]| 3600 |HOST-RESOURCES-MIB::hrDeviceDescr.{#SNMPINDEX}| | CPU {#SNMPINDEX} - Charge |SNMP-Charge-CPU-[{#SNMPINDEX}]| 60 |HOST-RESOURCES-MIB::hrProcessorLoad.{#SNMPINDEX}| | CPU {#SNMPINDEX} - Etat |SNMP-Etat-CPU-[{#SNMPINDEX}]| 60 |HOST-RESOURCES-MIB::hrDeviceStatus.{#SNMPINDEX}|触发器与告警策略模板的告警体系可以归纳为三类模式共约 24 个触发器部分来自 LLD 原型随发现实例动态生成。服务进程的双触发器模式对 9 个被监控进程6 个 scb_ 协议进程 indexerservice indexerworker workercontroller每个 Status 项都挂两个触发器以 scb_ssh 为例见 5.4 YAML 第 349-359 行触发器名称表达式优先级Service Supervising scb_ssh not CORRECTLY running on {HOST.HOST1}last(/BALABIT-SNMPv2-Shell_Control_Box/SNMP-Process-Supervising_scb_ssh-Status)2WARNINGService Supervising scb_ssh not running on {HOST.HOST1}nodata(/BALABIT-SNMPv2-Shell_Control_Box/SNMP-Process-Supervising_scb_ssh-Status,70s)1WARNING两者的分工互补状态异常触发器last(...)2。HOST-RESOURCES-MIB 的hrSWRunStatus以整型编码进程状态从模板表达式可以推断作者把值2视为进程正常运行的标志——只要返回值不等于 2就判定进程存在但未正确运行无数据触发器nodata(...,70s)1。当 SNMP 表过滤找不到匹配行进程彻底消失、宏值不匹配、OID 无响应时采集项无数据超过 70 秒窗口即触发进程未运行。70s 窗口略大于 60s 更新间隔可避免轮询抖动造成的误报。其余 8 个进程照此模式各挂两个触发器名称与键一一对应scb_http、scb_ica、scb_rdp、scb_telnet、scb_vnc、indexerservice、indexerworker、workercontroller。一个可见的小瑕疵是5.4 YAML 中 scb_ssh 的 not running 触发器名称末尾多拼了scb_ssh字样YAML 第 358 行不影响表达式功能仅告警标题略显冗余。磁盘空间三级告警File System 原型上的 Used Percentage 计算项按使用率设定了三级渐进告警README Triggers 一节完整列出触发器名称表达式优先级含义Free Space File System {#SNMPVALUE} - 10% - on {HOST.HOST1}last(/BALABIT-SNMPv2-Shell_Control_Box/File-System-Space-Used-Percentage-[{#SNMPVALUE}])90WARNING剩余空间不足 10%Free Space File System {#SNMPVALUE} - 5% - on {HOST.HOST1}...95AVERAGE剩余空间不足 5%Free Space File System {#SNMPVALUE} - 1% - on {HOST.HOST1}...99HIGH剩余空间不足 1%即已用空间占比 ≥90% / ≥95% / ≥99%分别对应警告 / 一般 / 严重三级逐级升级。接口与连通性告警触发器名称表达式优先级Interface [{#SNMPVALUE}] on {HOST.HOST1} - DOWNlast(/BALABIT-SNMPv2-Shell_Control_Box/SNMP-Interface-Op-Status-[{#SNMPVALUE}])0AVERAGEPing {HOST.HOST1} KOlast(/BALABIT-SNMPv2-Shell_Control_Box/icmpping[,2])1HIGHSNMP {HOST.HOST1} KOlast(/BALABIT-SNMPv2-Shell_Control_Box/zabbix[host,snmp,available])1HIGHifOperStatus返回 0 表示接口 downup(1)、down(2)之外值为 0 通常代表未知/故障态模板作者将其作为 DOWN 判定依据触发 AVERAGE 告警设备 ping 不通或 SNMP 不可用时直接给出 HIGH 级告警。实战要点与排障1. 宏匹配是告警正确性的前提。若出现大量 not running 误报而进程实际存活几乎可以断定是宏值与设备真实命令行不一致。此时回到设备上重新执行snmpwalk | grep scb_把新抓取的字符串逐字回填。注意参数中的空格、引号、参数顺序都属于匹配内容。2. 注意默认宏值的残缺。模板自带的{$STRING_SERVICE_HTTP}以--gi结尾、{$STRING_SERVICE_TELNET}以--结尾等默认值并不完整导入后直接使用大概率无法命中进程行务必用真实值覆盖。3. 宏的作用域。宏可在模板级统一设置也可在具体主机上覆写。当多台 SCB 设备的进程参数不同例如线程数、日志级别调整过时在主机级分别设置{$STRING_SERVICE_*}即可做到一模板多参数而无需复制模板。4. 更新间隔与告警窗口。进程 Status 项更新间隔 60s、nodata 窗口 70s接口、CPU、文件系统 LLD 规则同样为 60s。修改宏后最迟一个轮询周期60s内生效。5. 单位与数据类型。hrSWRunPerfMem返回的进程内存单位为 Kbytes模板 description 明确注明 Result in KbytessysDescr、sysName、接口 MAC、CPU Name 等文本类采集项更新间隔长达 3600s 且关闭趋势存储用于身份信息展示而非告警。6. 版本差异。5.0 的 XML 采用旧式触发器表达式如{last()}1、{nodata(70)}1与 application 分组5.4/6.0 的 YAML 使用新式last(/模板/键)语法与 tag 标签Application: Shell_Control_Box_Services。若从 5.0 升级触发器表达式会在导入时自动转换行为语义不变。小结BALABIT-SNMPv2-Shell_Control_Box 模板展示了 Zabbix 监控命令行参数敏感型网络设备的典型范式通过snmpwalk采集真实进程参数 → 回填宏 → 借助 HOST-RESOURCES-MIB 的hrSWRunParameters/hrSWRunPath表过滤精准定位业务进程 → 以状态 无数据双触发器保证告警可靠性同时用三条 LLD 规则覆盖接口、文件系统与 CPU 的自动发现。理解这一宏驱动进程匹配机制不仅能正确部署本模板也能为同类基于 HOST-RESOURCES-MIB 的进程监控需求提供可复用的设计思路。若需进一步核对实现细节可直接查阅 5.4 模板 YAML 与 5.0 模板 XML 的原始导出。赞分享【免费下载链接】community-templatesZabbix Community Templates repository项目地址https://gitcode.com/gh_mirrors/co/community-templates点击查看免费下载相关推荐Zabbix SNMPv2 模板监控 BALABIT Shell Control Box 实战进程匹配宏配置与 LLD 发现机制全解析Zabbix SNMPv2 模板监控 BALABIT Shell Control Box 实战进程匹配宏配置与 LLD 发现机制全解析 BALABIT SheZabbix Community Templates 实战基于 Active Agent 的 Rootless Podman 容器监控模板解析Zabbix Community Templates 实战基于 Active Agent 的 Rootless Podman 容器监控模板解析 Zabbixcommunity-templates 之 App Varnish by Zabbix agent基于 varnishstat 的 Zabbix 缓存监控模板深度解析community templates 之 App Varnish by Zabbix agent基于 varnishstat 的 Zabbix 缓存监控上一篇DeepTutor 快速上手三条命令跑通本地 AI 学习助手下一篇如何配置Codex-X的CODEX_HOME等环境变量完全说明创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑