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 –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"




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章