歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ganglia 3.1.x下擴展Python模塊(翻譯自官方wiki)

Ganglia 3.1.x下擴展Python模塊(翻譯自官方wiki)

日期:2017/2/28 14:34:07   编辑:Linux教程

僅供參考,不負責任

Gmond擴展Python度量模塊

在最新的Ganglia3.1.x版本中,我們可以創造出C/Python的度量收集模塊,這些模塊能被直接插入到gmond中以用來監視用戶自定義的度量。
在早期的版本中(2.5.x,3.0.x),添加用戶自定義的度量只有通過命令行調用gmetric這麼一種方法,它可以簡單地通過一個cronjob或者其他進程將度量插入到gmond中。雖然這種方法對大多數人來說是可行的,但是他使得用戶自定義的度量難以管理。
本文將介紹自己編寫一個python度量監視模塊的一些細節問題

以下的組件是建立/使用Python支持所必須的

  • Ganglia 3.1.x
  • Python 2.3.4+(這是在RHEL4上測試的最老的支持版本,2.3以後的版本應該都能正常工作)
  • Python開發頭文件(通常在python-devel這個軟件包中)

安裝

RPM安裝

如果你安裝Python度量模塊在基於RPM軟件包管理的系統上,安裝“ganglia-gmond-modules-python”這個軟件包即可。這包含了Python模塊開發的所有東西。

APT安裝

執行 apt-get install ganglia-monitor
然後看下面的注意事項

源碼安裝

如果你是從源碼編譯的,確保添加了 –with-python這個選項。如果Python解釋器被檢測到,這個選項是會被自動添加

檢查

為了確保Ganglia的安裝有了Python支持的設置,檢查一下以下設置:

  • gmond.conf 有一行 include (“/etc/ganglia/conf.d/*.conf”),這是你應該放置.pyconf格式的python模塊配置文件所在的目錄。
  • modpython.conf 這個文件應該存在於/etc/ganglia/conf.d 他包含了pyconf文件的所在位置
  • modpython.so應該在/usr/lib{64}/ganglia中
  • /usr/lib{64}/ganglia/python_modules這個目錄應該存在,這是你放置以.py結尾的python模塊文件所在的目錄

如果你通過二進制文件安裝python模塊支持,上面的這些應該會被自動生成。假如有些文件缺失的話,請把bug提交給我們

Ubuntu 10.10 注意事項

Ubuntu 10.10 沒有Python支持的設置,你需要:

  • 建立/etc/ganglia/conf.d/modpython.conf,讓他看起來像這樣,https://sourceforge.net/apps/trac/ganglia/browser/trunk/monitor-core/gmond/modules/conf.d/modpython.conf.in
modules {
module {
name = "python_module"
path = "/usr/lib(64)/ganglia/modpython.so"
params = "/usr/lib(64)/ganglia/python_modules"
}
}
include('/etc/ganglia/conf.d/*.pyconf')
  • 建立目錄 /usr/lib(64)/ganglia/python_modules
  • 確保 /usr/lib(64)/ganglia/modpython.so 已經存在(如果你通過apt安裝的話,Ubuntu 10.10 將會默認有這個文件)

編寫自定義Python模塊

編寫一個Python模塊是非常簡單的。你只需要根據模板編寫,完成之後將以.py結尾的模塊放到/usr/lib(64)/ganglia/python_modules下面。同時將對應的.pyconf格式的配置文件放置在/etc/ganglia/conf.d/下。
如果你的Python模塊需要訪問服務器上的一些文件,記住他是以運行gmond進程的用戶執行的。換句話說,如果gmond以nobody運行,那麼你的模塊就是nobody運行。所以確保運行gmond的用戶有權限訪問這些文件。Ganglia有示例模塊在/usr/lib(64)/ganglia/python_modules/example.py中。

示例模塊

讓我們來看一下一個監測主機溫度的實在的Python模塊實例,它通過讀取/proc文件系統,讓我們稱他為temp.py

acpi_file = "/proc/acpi/thermal_zone/THRM/temperature"

def temp_handler(name):
try:
f = open(acpi_file, 'r')

except IOError:
return 0

for l in f:
line = l.split()

return int(line[1])

def metric_init(params):
global descriptors, acpi_file

if 'acpi_file' in params:
acpi_file = params['acpi_file']

d1 = {'name': 'temp',
'call_back': temp_handler,
'time_max': 90,
'value_type': 'uint',
'units': 'C',
'slope': 'both',
'format': '%u',
'description': 'Temperature of host',
'groups': 'health'}

descriptors = [d1]

return descriptors

def metric_cleanup():
'''Clean up the metric module.'''
pass

#This code is for debugging and unit testing
if __name__ == '__main__':
metric_init({})
for d in descriptors:
v = d['call_back'](d['name'])
print 'value for %s is %u' % (d['name'], v) Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡

推薦閱讀:

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Copyright © Linux教程網 All Rights Reserved