在使用zabbix监控 sql server过程中,发现了一个好的模板,分享如下:
https://share.zabbix.com/data...
github:
https://github.com/MantasTume...
效果如下:
包含两个
With SQL instance discovery 适用于多实例的sql server监控,未测试
Without SQL instance discovery 适用于单实例sql server监控,使用的模板,用在2008r2上,部分监控项不支持
此模板作者有更新,注意看别人的README和Documentation 内容。(老外做事真的是很细致)
模板备份地址:
http://t.cn/EKlYbiF
https://www.gueizu.com/file-5...
就目前发现的一些问题说明:
Discovery.mssql.server.ps1中:
$SQLInstanceName
$SQLInstanceName 需修改,其中脚本中有说明,或者直接修改为动态赋值:
# Parameters. Change Line 14 $SQLInstanceName="InstanceName" to correct instance name
或
if( $SQLInstanceName -eq "EnterInstanceName" )
{
$SQLInstanceName = $(hostname.exe)
}
乱码
中文windows环境下:
在powershell中执行 powershell.exe -File "C:\Program Files\Zabbix Agent\scripts\Discovery.mssql.server.ps1" JSONJOBNAME
返回结果不乱码,但是在zabbix server中用zabbix_get 获取的值返回乱码
解决办法:
加入转换方法:
# This function converts from one encoding to another.
function convertto-encoding ([string]$from, [string]$to){
begin{
$encfrom = [system.text.encoding]::getencoding($from)
$encto = [system.text.encoding]::getencoding($to)
}
process{
$bytes = $encto.getbytes($_)
$bytes = [system.text.encoding]::convert($encfrom, $encto, $bytes)
$encto.getstring($bytes)
}
}
修改:
foreach ($job in $jobname)
{
if ($idx -lt $jobname.Count)
{
$line= "{ `"{#JOBNAME}`" : `"" + $job + "`" },"
write-host $line
}
....
为:
foreach ($job in $jobname)
{
$job = $job | convertto-encoding "gbk" "utf-8"
if ($idx -lt $jobname.Count)
{
$line= "{ `"{#JOBNAME}`" : `"" + $job + "`" },"
write-host $line
}
注意:
$job = $job | convertto-encoding "gbk" "utf-8"
其他地方的中文乱码也可以通过此方法解决,但是使用powershell执行的时候返回结果乱码。
遗留问题:部分中文(特殊的几个字)依旧乱码,会显示为? ,不知道是哪里的问题。
获取定时任务列表,权限不足 sql server 2014
此问题目前只在 sql server 2014中发现,2008r2的数据库中未发现问题
zabbix server 中使用zabbix_get 获取定时任务列表时报错 拒绝了对对象 'sysjobs' (数据库 'msdb',架构'dbo')的SELECT权限,但使用powershell执行 能返回结果
现象如下:
最简单的办法:
加入用户名密码,修改下面内容,去掉注释
修改:$jobname = sqlcmd -S $SQLInstanceName -d msdb -h -1 -W -Q "set nocount on;SELECT [name] FROM msdb.dbo.sysjobs"
为$jobname = sqlcmd -S $SQLInstanceName -U $uid -P $pwd -d msdb -h -1 -W -Q "set nocount on;SELECT [name] FROM msdb.dbo.sysjobs"
下面获取 JOBSTATUS
的也一样加入用户名密码参数。
可能原因:
对比权限,2014用户少很多,而且没有SYSTEM用户,不能确定是安装问题,还是2014本身的问题,最终使用用户名密码方式解决