如何使用Powershell解析IBM CDC订阅状态并转Json对接Zabbix
IBM CDC 订阅状态提取(PowerShell转JSON适配Zabbix)
实现逻辑
- 调用chcclp命令获取订阅状态原始输出
- 过滤冗余日志、命令回显内容,定位到订阅状态表格区域
- 逐行提取订阅名、运行状态字段
- 构造结构化对象后输出为JSON格式,可直接对接Zabbix LLD规则或自定义监控项
完整可运行PowerShell脚本
# 配置chcclp路径和执行脚本路径 $chcclpPath = "C:\Program Files\IBM\InfoSphere Data Replication\Management Console\bin\chcclp.exe" $checkScriptPath = "c:\CDC_Check.txt" # 执行命令获取原始输出 $rawOutput = & cmd.exe /C "`"$chcclpPath`" -f `"$checkScriptPath`"" # 初始化结果存储数组 $subStatusList = @() $tableParsering = $false foreach ($line in $rawOutput) { # 跳过空行 if ([string]::IsNullOrWhiteSpace($line)) { continue } # 匹配订阅状态表头行,开启表格解析 if ($line -match "SUBSCRIPTION.*STATE" -or $line -match "Subscription.*State") { $tableParsering = $true # 跳过表头下方的分隔符行(通常为-或=组成的行) continue } # 匹配表格结束标识(命令执行完成、断开连接等回显),停止解析 if ($tableParsering -and ($line -match "disconnect|exit|Command executed" -or $line -match "^[-= ]+$")) { break } # 解析有效数据行 if ($tableParsering) { # 按多个空白字符分割字段,过滤空值 $fields = $line -split "\s+" | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } # 调整索引适配你的实际输出字段顺序,默认第一列为订阅名,第二列为运行状态 if ($fields.Count -ge 2) { $subStatusList += [PSCustomObject]@{ "{#SUBNAME}" = $fields[0].Trim() "status" = $fields[1].Trim() # 可按需补充延迟、日志位置等其他监控字段 # "latency" = $fields[2].Trim() } } } } # 输出JSON格式结果,直接对接Zabbix $subStatusList | ConvertTo-Json -Depth 5
自定义调整说明
- 先手动执行一次chcclp命令,确认输出表格的字段顺序,若状态字段不在第二列,调整
$fields[1]的索引即可 - 脚本中
{#SUBNAME}为Zabbix低级别发现(LLD)的固定变量格式,可直接用于订阅的自动发现规则配置 - 若订阅名称包含空格,可通过输出的固定列宽截取对应字段,替换当前的
-split分割逻辑即可
内容的提问来源于stack exchange,提问作者Aleksandr
相关产品推荐
相关产品推荐

