一、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"
本文出自 “虚拟的现实” 博客,转载请与作者联系!