大佬们,我这边用sql server存储考勤数据,现在我怕数据丢失想做一个监控数据的这个一个动作,并配置邮件或者短信报警。 先在数据库内自动执行sql语句查询一段时间内的结果,如没有查询到数据,zabbix执行报警动作,这可行吗?
时间: 2024-03-01 11:55:45 浏览: 162
可以实现你的需求,具体步骤如下:
1. 在 SQL Server 中创建一个 SQL 代理作业,该作业包含你要执行的查询语句。可以使用 SQL Server Management Studio 来创建代理作业。
2. 在 Zabbix 中创建一个监控项,该监控项的类型为“External check”,并将其命名为“SQL Job Status”。
3. 编写一个 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"
}
```
4. 将 PowerShell 脚本保存在 Zabbix Server 的某个目录下,例如“C:\Monitoring\Scripts”。
5. 在 Zabbix 中创建一个动作,该动作的类型为“Remote command”,并将其命名为“SQL Job Failure Alert”。
6. 在动作的“Operations”选项卡中,添加一个操作,该操作的类型为“Remote command”,并在“Command”字段中输入以下命令:
```
powershell.exe -ExecutionPolicy Bypass -File "C:\Monitoring\Scripts\sql_job_check.ps1"
```
7. 在动作的“Conditions”选项卡中,添加一个条件,该条件的类型为“Trigger”,并选择“SQL Job Status”监控项。
8. 在条件的“Expression”字段中输入以下表达式:
```
{SQL Job Status.last()}=0
```
9. 在条件的“Recovery operations”字段中,添加一个操作,该操作的类型为“Remote command”,并在“Command”字段中输入以下命令:
```
echo "SQL Job has recovered" | sendmail -t your@email.com
```
10. 保存并测试你的 Zabbix 配置。
此时,你的 Zabbix 服务器将定期执行 PowerShell 脚本来检查 SQL Server 中的代理作业是否正在运行。如果代理作业失败,Zabbix 将通过电子邮件发送警报。如果代理作业恢复正常,Zabbix 将再次发送电子邮件,提示代理作业已恢复。
阅读全文