设为首页 收藏本站
查看: 1254|回复: 0

[经验分享] zabbix之MSSQL操作

[复制链接]

尚未签到

发表于 2019-1-17 12:23:11 | 显示全部楼层 |阅读模式
  一、Zabbix简介
  1.1 Zabbix简介
    官方网站:http://www.zabbix.com。Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。
  1.2 参考资源
    企业应用监控利器-ZABBIX(包括zabbix安装方法、中文字体的设定和防火墙设定等)http://waringid.blog.运维网.com/65148/904201
    Zabbix中文使用手册(包括重要的zabbix监控参数、重要监控图表的意义等)http://waringid.blog.运维网.com/65148/945352
    zabbix中文配置指南(包括item参数的定制,windows监控参数的定义,snmp设备的OID查询、设置等。zabbix使用手册侧重使用人员,而这份文档侧重专业管理人员)http://waringid.blog.运维网.com/65148/955939
    zabbix中文配置指南续(时间同步,windows、linux、ciscoIOS设置以及cisco 2960网络设备监控)http://waringid.blog.运维网.com/65148/1104627
    zabbix之auth login邮件报警(通过使件msmtp实现zabbix验证型邮件的报警通知功能)http://waringid.blog.运维网.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.运维网.com/65148/904201)。需要注意的是epel源中的epel-release-6-7.noarch.rpm已经换成了epel-release-6-8.noarch.rpm版本(同时注意32位和64位版本的区别)。

yum install freetds
rpm –qa|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 –S 192.168.0.172 –p 1433 –U 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"  

  

  



附件:http://down.运维网.com/data/2363301


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-664398-1-1.html 上篇帖子: zabbix系列zabbix3.4监控rabbitmq 下篇帖子: grafana
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表