Gmond模塊分析

目錄及文件分析:

目錄:gmond模塊位於ganglia源碼的gmond目錄下。php

依賴文件:Gmond模塊依賴於gmond.ccmdline.c.incmdline.ccmdline.hdtd.hg25_config.ccore_metrics.cg25_config.hgmond_internal.h文件(若是支持sflow模塊,還需依賴sflow.hsflow.csflow_gmetric.h文件)css

文件及目錄做用:html

cmdline.c(cmdline.c.in)cmdline.hcmdline.sh:該四個文件都是處理與cmd輸入參數解析相關的功能。python

conf.pod:該文件時gmond生產gmond.conf配置文件的示例文件(在自動生成配置文件的過程當中可能用到該文件定義的信息)。c++

core_metrics.c:實現對core模塊的信息監控git

dtd.h:估計是實現數據類型轉換(編碼轉換)github

g25_config.cg25_config.h:與gmond.conf配置文件解析相關。web

gmond.aix.init:與gmond的啓動相關的腳本(korn shell腳本)shell

gmond.cgmond主模塊,gmond主要功能都在該文件中實現和完成。模塊化

gmond.conf.5gmond.conf.html:這兩個文件可能和配置文件信息相關,html文件應該是配置文件的說明文件。.5文件具體功能不是特別清楚,但也應該和配置文件相關。

gmond.initgmond的啓動腳本文件,當要配置成自啓動時,可將該文件copy/etc/init.d/目錄下,並命名爲gmond,這樣就能夠用service服務直接啓動gmond

gmond.init.SuSE:應該是SuSE下的啓動腳本(功能應該同gmond.init

gmond.solaris.init:應該是solaris系統下的啓動腳本(功能同gmond.init

gmond_internal.h:定義有關ganglia-host的有段信息。

modules/:該目錄下實現了一些監控模塊和擴展支持模塊。監控模塊由cpudiskmemory networkstatussystem等。擴展支持模塊主要實現對擴展模塊的支持,能夠實現對由其餘語言編寫的監控模塊的支持,可支持的擴展模塊有perlpythonphp。在編譯階段,能夠經過對./configure的參數添加決定是否支持pythonperlphp等擴展功能。

Perl_modules:存放用perl語言編寫的模塊(有example例子,可根據該例子編本身的模塊)

Php_modules:存放用php腳本編寫的模塊(同上)

Python_modules:存放用python語言編寫的模塊(用戶能夠根據該目錄下的例子本身編寫)

Sflow.csflow_gmetric.hsflow.h:這三個文件可能與sflow的支持相關。

 

gmond擴展:

gmond自己提供了大量的檢測指標,如對cpu數量等,內存使用狀況等,可是有時候,可能這些監控指標並不能知足咱們的需求(如監控GPU工做狀況),這時候就須要咱們隊gmond監控功能進行擴展。因爲gmond實現了對模塊化擴展的支持,而且支持pythonperlphp腳本編寫的模塊,咱們能夠經過修改源碼(編寫模塊)實現功能擴展。

用開源源碼擴展基本功能(主要由python實現)

1:從https://github.com/ganglia/gmond_python_modules下載python擴展模塊包,解壓

2:查看是否有要本身要擴展的模塊,若是有,進入該模塊並根據README提示進行擴展

Eg:擴展GPU監控

Cd  gmond_python_modules

Cd gpu/nvidia

根究README配置

1)將python_modules目錄下的*.py文件copy/ganglia安裝目錄/ganglia/python_modules/ 目錄下面

2)將conf.d/目錄下的*.pyconf文件copy/ganglia安裝目錄/etc/ganglia/conf.d/目錄下

3)將graph.d/* 文件copy/gweb安裝目錄/graph.d/ 目錄下(該過程在監控住節點實現)

當從新進行web訪問的時候,便可實現gpu的信息獲取及監控

 

本身寫監控模塊

C/C++編寫模塊

c/c++模塊編寫方法

1:定義本身的mmodule變量(該變量名稱爲本身編寫的模塊的名稱,變量名必須和conf文件中module模塊的name相同,若是不相同,該模塊將不能被加載應用),該變量包含初始信息(versionname等)、init函數句柄、cleanup函數句柄、handler函數句柄、Info字典信息。

2:定義本身的xxx_metric_init函數:該函數用來初始化一些基本的metric信息

3:定義xxx_metric_cleanup函數:該函數釋放資源用

4:定義xxx_metric_hander函數:該函數主要實現對該模塊中各個指標的收集

5:定義xxx_metric_ino字典:該字典用來定義指標的各類信息

6:編譯模塊,並將.so文件放到/ganglia安裝路徑/ganglia/lib64/ganglia/ 目錄下

7:編寫配置文件,並將配置文件放到/ganglia安裝路徑/etc/conf.d/目錄下

注:具體可參考ganglia/gmond/modules/example/mod_example.c

 

c/c++模塊加載方法分析

在用C/C++編寫模塊的時候首先須要定義mmodule全局變量,該變量名稱必定要與config中該模塊的名稱相同,gmond是經過該變量的名稱來查找模塊並實現對conf中定義模塊的支持的,若是該變量名稱與conf中模塊名不一樣,將沒法支持該模塊。

特別須要注意的是,在編譯本身編寫的模塊時,儘可能不要進行優化(去除字符表)

模塊加載過程以下:

Gmond根據conf中模塊的path路徑找到so文件所在目錄->調用load函數(gmond用的是apr中的一個包裝函數,功能與load類似)加載so->根據conf中模塊名稱,在加載的so中找到該變量位置(用變量名查找)->將模塊添加到模塊鏈表中->初始化模塊。

 

 

Python編寫模塊

Python語言支持模塊

Gmond自己是用c/c++語言編寫的,爲了支持python語言編寫的模塊,gmond中實現了一個特殊的模塊——該模塊部進行數據等指標收集,而僅僅是實現對python的解析支持(該模塊由c/c++編寫),這樣當gmond加載該模塊後,就能夠支持由python編寫的模塊了。(python支持模塊位於:ganglia/gmond/modules/python/ 目錄中)

 

使用python編寫模塊的優勢

1:開發人員無需再管理mmodule結構體,初始化宏,apr庫接口等信息

2:編寫的模塊能夠脫離gmond單獨運行,無需ganglia環境的支持。在單獨運行調試完成後加入到gmond中便可應用。編寫調試很是方便。

例如用戶能夠進入到 ganglia/gmond/python_modules/process/ 目錄中,運行procsstat.py

命令:python procsstat.py

運行後,該信息便可打印出來,並且可將該文件copy到任意機器(支持python,能夠沒安裝ganglia),切可正確運行。

 

Python模塊編寫

每種python模塊須要定義一個全局鏈表並至少實現三個函數:metric_init(parms)metric_cleanup()metric_handler(name).

全局鏈表 descriptors = []:該全局變量存儲全部收集到的指標信息

metric_init(parms):該函數必需要有參數傳遞,且在初始化的時候被調用,返回要收集的指標的字典(初始化該字典並返回,該字典之後將被用到)

metric_cleanup():釋放資源函數

metric_hander(name):該函數是具體的收集函數,函數名稱能夠改變(函數名必須與init初始化的收集指標字典中指定的調用函數名相同)

注:可參考 ganglia/gmond/python_modules/example/ 中的例子

相關文章
相關標籤/搜索