笺注:这是在 使用Navicat远程管理MSSQL2014 的基础上进行的。
在CMD命令行中,查看本机的MSSQL的版本信息:
sqlcmd -S localhost -U sa -P Jacky888 -Q "select @@VERSION as 'MSSQL_Version:'"
注释:
用户名 sa
用户密码 Jacky888
SQL语句 "select @@VERSION as 'MSSQL_Version:'"
sqlcmd -S localhost -U zhuohua -P 123 -Q "select @@VERSION as 'MSSQL Version:'"
注释:
用户名 zhuohua
用户密码 123
SQL语句 "select @@VERSION as 'MSSQL Version:'"
查看MSSQL的最大用户连接数:
C:\Users\Administrator>sqlcmd -S localhost -U sa -P Jacky888 -Q "select @@MAX_CONNECTIONS as '最大用户连接数:'"
最大用户连接数:
-----------
32767
(1 行受影响)
C:\Users\Administrator>
C:\Users\Administrator>sqlcmd -S localhost -U zhuohua -P 123 -Q "select @@MAX_CONNECTIONS as '最大用户连接数:'"
最大用户连接数:
-----------
32767
(1 行受影响)
C:\Users\Administrator>
查看MSSQL的当前连接数:(这里使用数据库管理员sa才够权限)
C:\Users\Administrator>sqlcmd -S localhost -U sa -P Jacky888 -Q "SELECT cntr_value AS 'User_Connections:' FROM master.dbo.sysperfinfo WHERE counter_name = 'User Connections'"
User_Connections:
--------------------
9
(1 行受影响)
C:\Users\Administrator>
查看MSSQL的当前进程数:(这里使用数据库管理员sa才够权限)
C:\Users\Administrator>sqlcmd -S localhost -U sa -P Jacky888 -Q "select count(*) as '当前进程数:' from master.dbo.sysprocesses"
当前进程数:
-----------
46
(1 行受影响)
C:\Users\Administrator>
测试用的表和数据:
查询表data1.dbo.table1中字段id的最大值:
C:\Users\Administrator>sqlcmd -S localhost -U sa -P Jacky888 -Q "SELECT max(id) FROM data1.dbo.table1"
-----------
3
(1 行受影响)
C:\Users\Administrator>
查询表data1.dbo.table1中某个符合条件的字段的值:
C:\Users\Administrator>sqlcmd -S localhost -U zhuohua -P 123 -Q "SELECT id FROM data1.dbo.table1 Where name = '李大杰'"
id
-----------
2
(1 行受影响)
C:\Users\Administrator>
查询表data1.dbo.table1中某个符合条件的字段的值:
C:\Users\Administrator>sqlcmd -S localhost -U zhuohua -P 123 -Q "SELECT name FROM data1.dbo.table1 Where id = 1"
name
--------------------
Python
(1 行受影响)
C:\Users\Administrator>
############
被监控主机上安装第三方库(pyodbc),可参考:Python3脚本管理MSSQL2014
查看pyodbc的版本:
C:\Users\Administrator\Desktop>pip3 freeze
pyodbc==4.0.30
C:\Users\Administrator\Desktop>
######
在被监控主机上创建Python3脚本:(输出MSSQL的当前进程数)
### d:\xx.py
#coding=utf-8
import pyodbc
def db_connect():
#打开数据库连接;本地连接(localhost)、端口号(1433)、其中一个库的名称(master)、用户名、密码:
db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',PORT='1433',DATABASE='master',UID='sa',PWD='Jacky888')
cursor = db.cursor()
SQL_1 = "select count(*) from sysprocesses" #SQL语句
cursor.execute(SQL_1) #执行SQL语句
Result_1 = cursor.fetchone() #使用fetchone只能获取一个元素
#print(Result_1) # (46, )
#print(type(Result_1)) # <class 'pyodbc.Row'>
print(Result_1[0])
#print(type(Result_1[0])) # <class 'int'>
db.close()
def main():
try:
db_connect()
except Exception as e:
print(e)
if __name__ == "__main__":
main()
脚本运行的结果:
C:\Users\Administrator\Desktop>python d:\xx.py
46
C:\Users\Administrator\Desktop>
######
在被监控主机上创建Python3脚本:(输出MSSQL的当前连接数)
### d:\yy.py
#coding=utf-8
import pyodbc
def db_connect():
db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',PORT='1433',DATABASE='master',UID='sa',PWD='Jacky888')
cursor = db.cursor()
SQL_1 = "SELECT cntr_value FROM sysperfinfo WHERE counter_name = 'User Connections'"
cursor.execute(SQL_1)
Result_1 = cursor.fetchone()
#print(Result_1) # (9, )
#print(type(Result_1)) # <class 'pyodbc.Row'>
print(Result_1[0])
#print(type(Result_1[0])) # <class 'int'>
db.close()
def main():
try:
db_connect()
except Exception as e:
print(e)
if __name__ == "__main__":
main()
脚本运行的结果:
C:\Users\Administrator\Desktop>python d:\yy.py
9
C:\Users\Administrator\Desktop>
######
在被监控主机上创建Python3脚本:(输出MSSQL的最大用户连接数)
### d:\zz.py
#coding=utf-8
import pyodbc
def db_connect():
db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
cursor = db.cursor()
SQL_1 = "select @@MAX_CONNECTIONS"
cursor.execute(SQL_1)
Result_1 = cursor.fetchone()
#print(Result_1) # (32767, )
#print(type(Result_1)) # <class 'pyodbc.Row'>
print(Result_1[0])
#print(type(Result_1[0])) # <class 'int'>
db.close()
def main():
try:
db_connect()
except Exception as e:
print(e)
if __name__ == "__main__":
main()
脚本运行的结果:
C:\Users\Administrator\Desktop>python d:\zz.py
32767
C:\Users\Administrator\Desktop>
######
在被监控主机上创建Python3脚本:(输出表data1.dbo.table1中字段id的最大值)
### d:\kk.py
#coding=utf-8
import pyodbc
def db_connect():
db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
cursor = db.cursor()
SQL_1 = "Select Max(id) FROM table1"
cursor.execute(SQL_1)
Result_1 = cursor.fetchone()
#print(Result_1) # (3, )
#print(type(Result_1)) # <class 'pyodbc.Row'>
print(Result_1[0])
#print(type(Result_1[0])) # <class 'int'>
db.close()
def main():
try:
db_connect()
except Exception as e:
print(e)
if __name__ == "__main__":
main()
脚本运行的结果:
C:\Users\Administrator\Desktop>python d:\kk.py
3
C:\Users\Administrator\Desktop>
###############
被监控主机的Agent的安装可参考:Zabbix使用Agent监控Windows2012R2
修改被监控主机的Agent配置文件:
C:\Program Files\Zabbix Agent\zabbix_agentd.conf
# UnsafeUserParameters=0
修改为:
UnsafeUserParameters=1
接着插入:
UserParameter=Command_1,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\xx.py
UserParameter=Command_2,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\yy.py
UserParameter=Command_3,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\zz.py
UserParameter=Command_4,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe D:\kk.py
如下图:(截图有省略)
保存好配置文件后,重启Zabbix Agent服务:
备注:这相当于在被监控主机上进行本地监控,所以被监控主机无需打开防火墙的TCP 1433端口。
######
在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.133)的键值:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.133 -k Command_1
ZBX_NOTSUPPORTED: Timeout while executing a shell script.
[root@centos8 ~]#
解决方法:
修改被监控主机的Agent配置文件:
C:\Program Files\Zabbix Agent\zabbix_agentd.conf
修改为 Timeout=30
保存好配置文件后,重启Zabbix Agent服务:
在Zabbix服务器可以获取被监控主机(192.168.168.133)的键值了:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.133 -k Command_1
46
[root@centos8 ~]#
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.133 -k Command_2
9
[root@centos8 ~]#
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.133 -k Command_3
32767
[root@centos8 ~]#
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.133 -k Command_4
3
[root@centos8 ~]#
##################Zabbix添加被监控主机:
配置》主机》创建主机:(主机名称无需与被监控主机的真实主机名一致;群组可以随便选;IP地址那里要输入被监控主机的IP地址;端口为10050)
注释:
使用agent代理程序的接口。
使用 TCP 10050 端口。
主机MSSQL2014添加成功:(主机可以不用模板的)
给“MSSQL的当前进程数”创建监控项:
自定义名称: MSSQL Command_1
键值: Command_1
信息类型: 数字(无正负)
单位: !个
备注:其他地方保持默认,点击底下的“添加”按键。
给“MSSQL的当前连接数”创建监控项:
自定义名称: MSSQL Command_2
键值: Command_2
信息类型: 数字(无正负)
单位: !个
备注:其他地方保持默认,点击底下的“添加”按键。
给“MSSQL的最大用户连接数”创建监控项:
自定义名称: MSSQL Command_3
键值: Command_3
信息类型: 数字(无正负)
单位: !个
备注:其他地方保持默认,点击底下的“添加”按键。
给“表data1.dbo.table1中字段id的最大值”创建监控项:
自定义名称: MSSQL Command_4
键值: Command_4
信息类型: 数字(无正负)
备注:其他地方保持默认,点击底下的“添加”按键。
######
给监控项“MSSQL Command_1”创建图形:
监控项:
给监控项“MSSQL Command_2”创建图形:
监控项:
给监控项“MSSQL Command_3”创建图形:
监控项:
给监控项“MSSQL Command_4”创建图形:
监控项:
######
查看图形:
监测》图形:
######
给主机MSSQL2014的监控项“MSSQL Command_4”创建一个触发器:(返回值大于5就告警)
自定义名称: ID is bigger than 5 (当前值: {ITEM.VALUE})
严重性: 一般严重
注释: {ITEM.VALUE} 是预定义变量,即触发状态时监控项的值。
插入表达式:( 监控项 MSSQL2014: MSSQL Command_4 )
自动生成的表达式:(触发器的表达式要用到监控项中的键值)
{MSSQL2014:Command_4.last()}>5
本页拖下去:
主机MSSQL2014的图形“MSSQL Command_4 image”会自动发生改变:
############
先在被监控主机的表data1.dbo.table1中再插入三条记录,至此,一共有六条记录。
在被监控主机本地测试:
C:\Users\Administrator>python d:\kk.py
6
C:\Users\Administrator>
在Zabbix服务器远程测试:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.133 -k Command_4
6
[root@centos8 ~]#
主机MSSQL2014的图形“MSSQL Command_4 image”中看到的效果:
注释:图形中的数据线是从右往左延伸的。
主机MSSQL2014的监控项“MSSQL Command_4”的返回值大于5时,仪表板会如下图显示:(显示对应触发器的名称)
ID is bigger than 5 (当前值: 6)
############
主机MSSQL2014的监控项“MSSQL Command_4”的返回值继续增大至8个后,在图形“MSSQL Command_4 image”中看到的效果:
注释:在图形中可以看到预定义变量{ITEM.VALUE}的值会随着监控项的返回值的变化而变化。
但在仪表板却没有看到预定义变量{ITEM.VALUE}的值随着监控项的返回值的变化而变化,只是一直显示当初触发状态时的值:
############
主机MSSQL2014的监控项“MSSQL Command_4”的返回值小于或等于5个后,在仪表板的告警会自动消失:
相关文章:
Zabbix调用Python3脚本监控Linux下的MySQL
Zabbix创建模板监控Windows下的MariaDB
Zabbix使用Agent监控Windows2012R2
Zabbix5.0.12_调用Python3脚本监控Windows下的MSSQL |