可以实现你的需求,具体步骤如下:
在 SQL Server 中创建一个 SQL 代理作业,该作业包含你要执行的查询语句。可以使用 SQL Server Management Studio 来创建代理作业。
在 Zabbix 中创建一个监控项,该监控项的类型为“External check”,并将其命名为“SQL Job Status”。
编写一个 PowerShell 脚本,用于检查 SQL 代理作业的运行状态,并将结果返回给 Zabbix。脚本内容如下:
$jobName = "Your SQL Job Name"$serverName = "Your SQL Server Name"$jobStatus = (Invoke-Sqlcmd -ServerInstance $serverName -Query "exec msdb..sp_help_job @job_name='$jobName'" | Select-Object -ExpandProperty current_execution_status)if ($jobStatus -eq 1) { Write-Output "1"} else { Write-Output "0"}
将 PowerShell 脚本保存在 Zabbix Server 的某个目录下,例如“C:\Monitoring\Scripts”。
在 Zabbix 中创建一个动作,该动作的类型为“Remote command”,并将其命名为“SQL Job Failure Alert”。
在动作的“Operations”选项卡中,添加一个操作,该操作的类型为“Remote command”,并在“Command”字段中输入以下命令:
网页链接 -ExecutionPolicy Bypass -File "C:\Monitoring\Scripts\sql_job_check.ps1"
在动作的“Conditions”选项卡中,添加一个条件,该条件的类型为“Trigger”,并选择“SQL Job Status”监控项。
在条件的“Expression”字段中输入以下表达式:
{SQL Job Status.last()}=0
在条件的“Recovery operations”字段中,添加一个操作,该操作的类型为“Remote command”,并在“Command”字段中输入以下命令:
echo "SQL Job has recovered" | sendmail -t your@youremail
保存并测试你的 Zabbix 配置。
此时,你的 Zabbix 服务器将定期执行 PowerShell 脚本来检查 SQL Server 中的代理作业是否正在运行。如果代理作业失败,Zabbix 将通过电子邮件发送警报。如果代理作业恢复正常,Zabbix 将再次发送电子邮件,提示代理作业已恢复。