zabbix之MSSQL操作

一、Zabbix简介

1.1 Zabbix简介

  官方网站:http://www.zabbix.com。Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。

1.2 参考资源

  企业应用监控利器-ZABBIX(包括zabbix安装方法、中文字体的设定和防火墙设定等)http://waringid.blog.51cto.com/65148/904201

  Zabbix中文使用手册(包括重要的zabbix监控参数、重要监控图表的意义等)http://waringid.blog.51cto.com/65148/945352

  zabbix中文配置指南(包括item参数的定制,windows监控参数的定义,snmp设备的OID查询、设置等。zabbix使用手册侧重使用人员,而这份文档侧重专业管理人员)http://waringid.blog.51cto.com/65148/955939

  zabbix中文配置指南续(时间同步,windows、linux、ciscoIOS设置以及cisco 2960网络设备监控)http://waringid.blog.51cto.com/65148/1104627

  zabbix之auth login邮件报警(通过使件msmtp实现zabbix验证型邮件的报警通知功能)http://waringid.blog.51cto.com/65148/1142579

  Monitor MySQL with Zabbix

  http://www.badllama.com/content/monitor-mysql-zabbix

  Monitor Apache with Zabbix

  http://www.badllama.com/content/monitor-apache-zabbix

  Monitor Nginx with Zabbix

  http://www.badllama.com/content/monitor-nginx-zabbix

  Partitioning Tables on Zabbix 1.8

  http://zabbixzone.com/zabbix/partitioning-tables/

  Heavy MySQL monitoring solution

  https://www.zabbix.com/wiki/howto/monitor/db/mysql/extensive_mysql_monitoring_including_replication

二、zabbix存在的问题

2.1 为什么需要操作MSSQL

  zabbix的强大功能无需过多的强调,对于服务器硬件性能和支持SNMP协议的设备都能很好的支持。随着业务复杂性的增加,单纯的性能监控已无法满足现实的需要,从多方面考虑希望能增加业务数据的监控。对业务监控有以下好处:

一、能从业务角度应用该系统,提升监控系统的重要性同时也为后期预算做好支持(有业务部门支持)。

二、性能数据结合业务数据更能体现监控的重要性,对于业务系统的架构起到很好的辅助评估作用。

三、减少各节点对业务数据的了解盲区,使业务数据更加清晰、流程化、自动化。减少手工操作以及对专业技能(例如SQL操作)的要求。

2.2 存在的问题

  业务的数据存在后端的MSSQL2008中,只有通过查询语句才能取到所需的数值(需要较多的条件语句支持)。最开始计划使用zabbix客户端配置文件中的”UserParameter”实现对数据库的查询,实验后发现存在以下问题:

一、Windows服务器上不能安装除zabbix客户端以外的其它软件。因此只能通过系统自带的指令、脚本或绿色软件实现。

二、”UserParameter”对系统命令的支持有限。经过测试只要是指令或是脚本中存在“。、()、{}”这类的特殊字符,整个指令都无法正常执行(会出一个指令文件执行一半的情况),或是直接返回不支持。

三、”UserParameter”结合“osql、sqlcmd”指令查询(查询条件复杂或是存在第二点的情况会直接返回不支持)出来的结果都是字符型(string型,windows下没有类似grep,awk的工具),无法在zabbix中以图形方式显示。

四、通过autoit3这类的自动化工具集成SQL查询指令在”UserParameter”下无法返回正常的查询结果(直接执行编译后的程序没问题)。

三、解决办法-pymssql

  2.2中存在的问题在windwos下很难实现直接获取MSSQL的数据(或者要实现它的代价比较大),所以现在换种方法:能不能在linux下直接操作MSSQL?至少在linux环境中shell的指令要比在windows下强大。

  于是pymssql出现了,通过它可以使用python来操作mssql数据库。http://code.google.com/p/pymssql/。pymssql这个组件能在多种操作系统运行:windows、linux、MACos、FreeBSD等;支持包括SQL2000、SQL2005、SQL2008数据库的操作。

3.1 环境

MSSQL(0.172)

  Zabbix客户端,win2003 R2企业版32位操作系统,安装SQL2008企业版数据库。

Zabbix_Server(0.189)

  Zabbix服务器端,CentOS 6.3 64位操作系统,Zabbix2.05。.

Zabbix_Agent(0.47)

  Zabbix客户端,CentOS 6.3 64位操作系统,Zabbix2.05。

四、安装pymssql4.1安装freedts包

  freedts主要用来直接操作MSSQL数据库,可以通过编译或是使用yum指令方式自动安装,方便起见这里采用yum方式安装。在使用yum指令前建议先设定好linux软件源(如下图所示,可以参考http://waringid.blog.51cto.com/65148/904201)。需要注意的是epel源中的epel-release-6-7.noarch.rpm已经换成了epel-release-6-8.noarch.rpm版本(同时注意32位和64位版本的区别)。

yum install freetds
rpm �Cqa|grep freetds

4.2 测试freetds

  freedts安装完成后可通过tsql指令来查看版本及设置状态,如下图所示。需要注意的是freetds.conf配置文件的存放路径以及TDS的版本状态。

  freedts的版本和操作的数据库版本相关,当使用tsql指令操作MSSQL出现错误时需要检查TDS版本是否一致(http://www.freetds.org/userguide/choosingtdsprotocol.htm)。

tsql -H 192.168.0.172 -p 1433 -U sa
TDSVER=7.1 tsql �CS 192.168.0.172 �Cp 1433 �CU sa

  freedts的freetds.conf配置文件可以设定和SQL服务器的连接,设置后可以通过机器名的方式进行访问,如下图所示。

4.3 安装setuptools

  setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutilsde工具的增强工具(适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本),可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况。

wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.7.2.tar.gz
tar zxvf setuptools-0.7.2.tar.gz
python setup.py build
python setup.py install

4.4 安装Cython

  Cython是单独的一门语言,专门用来写在Python里面import用的扩展库。实际上Cython的语法基本上跟Python一致,而 Cython有专门的“编译器”先将 Cython代码转变成C(自动加入了一大堆的C-Python API),然后使用C编译器编译出最终的Python可调用的模块。

wget http://www.cython.org/release/Cython-0.19.1.tar.gz
tar zxvf Cython-0.19.1.tar.gz
python setup.py build
python setup.py install

4.5 安装pymssql

wget http://pymssql.googlecode.com/files/pymssql-2.0.0b1-dev-20111019.tar.gz
tar zxvf pymssql-2.0.0b1-dev-20111019.tar.gz
python setup.py build
python setup.py install

4.6 使用python操作MSSQL

  首先建立python文件,内容如下(更多内容请参考http://www.cnblogs.com/qianlifeng/archive/2012/02/06/2340367.html或http://www.oschina.net/code/snippet_782086_16716。)

vim testmssql.py

#coding=utf-8
#!/usr/bin/env python
#-------------------------------------------------------------------------------
# Name: pymssqlTest.py
# Purpose: 测试 pymssql库
# Created: 04/02/2012
#-------------------------------------------------------------------------------
import pymssql
class MSSQL:
"""
对pymssql的简单封装使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启
用法:
"""
def __init__(self,host,user,pwd,db):
self.host = host
self.user = user
self.pwd = pwd
self.db = db
def __GetConnect(self):
"""
得到连接信息
返回: conn.cursor()
"""
if not self.db:
raise(NameError,"没有设置数据库信息")
self.conn =pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
cur = self.conn.cursor()
if not cur:
  raise(NameError,"连接数据库失败")
else:
  return cur
def ExecQuery(self,sql):
"""
执行查询语句
返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
调用示例:
ms =MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
resList =ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")
for (id,NickName) in resList:
print str(id),NickName
"""
cur = self.__GetConnect()
cur.execute(sql)
resList = cur.fetchall()#查询完毕后必须关闭连接
self.conn.close()
return resList
def ExecNonQuery(self,sql):
"""
执行非查询语句
调用示例:
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
"""
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
def main():
## ms =MSSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
## #返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
##ms.ExecNonQuery("insert into WeiBoUser values('2','3')")
ms =MSSQL(host="192.168.0.172",user="sa",pwd="P@$$w0rd",db="master")
resList = ms.ExecQuery("SELECTcpu_busy,io_busy FROM spt_monitor")
for (cpu_busy,io_busy) in resList:
printstr(cpu_busy).decode("utf8")
resList = ms.ExecQuery("SELECT * FROMspt_monitor")
for r in resList:
print str(r).decode("utf8")
if __name__ == '__main__':
main()

4.7 Zabbix设置

  首先在zabbix客户端的配置文件中设定“UserParameter”参数,可以使用以下指令(默认情况下)

vim /usr/local/etc/zabbix_agentd.conf

chown zabbix:zabbix /tmp/testsql.py
service zabbix_agentd restart

4.7 Zabbix获取mssql数据

  以下操作在zabbix服务器上执行。

/usr/local/zabbix/bin/zabbix_get -s 192.168.0.47 -p 10050 -k"system.test"




本文出自 “虚拟的现实” 博客,转载请与作者联系!

你可能感兴趣的:(zabbix,sql2005,sql2000,sql2008,pymssql)