前言
Ganglia主要用來監控系統性能的軟件,通過曲線很容易見到每個節點的工作狀態,對合理調整,分配系統資源,提高系統整體性能起到重要作用,支持浏覽器方式訪問,但不能監控節點硬件技術指標。Ganglia是分布式的監控系統。
Redis現在在業務中應用已經很廣泛了,但是如何監控redis,實時的觀察redis的性能,在搜索引擎搜索“ganglia監控redis”,發現都是13年的老文章,都是說要到https://github.com/ganglia/gmond_python_modules這個第三方插件庫下載redis監控模塊
解決方法
但是我發現gmond_python_modules
這個repo下面已經沒有redis模塊了,於是查看git log
,發現redis模塊已經集成到ganglia源碼包裡了
於是下載了源碼包,搜索之後發現redis模塊位於gmond/python_modules/db/redis.py
,配置文件在gmond/python_modules/conf.d/redis.pyconf.disabled
。
修改配置文件裡的host和port兩個參數為要監控redis的ip和端口,然後將兩個文件復制到對應的目錄下。(通常redis.pyconf
復制到ganglia安裝目錄/etc/conf.d/
下,redis.py復制到ganglia安裝目錄/lib64/ganglia/python_modules
)
重啟gmond,可以看到有redis的圖出來了,但是數據卻都是空的。
於是停掉gmond,使用gmond -f -d 1
啟用調試模式,發現redis.py報錯
[PYTHON] Can't call the metric handler function for [connected_clients] in the python module [redis]. Traceback (most recent call last): File “/opt/gmond/lib64/ganglia/python_modules/redis.py”, line 21, in metric_handler n, v = line.split(“:”) ValueError: need more than 1 value to unpack
查看上下文代碼
for line in info.splitlines()[1:]: if "" == line: continue n, v = line.split(":")
大概意思是把redis info
命令輸出的每一個非空行用:分割,但是我安裝的redis版本是2.8+,info命令會輸出類似#Server這樣的注釋,這樣就導致按:分割失敗,所以python報錯,gmond取不到值。
所以解決方案也很簡單,把上面那段代碼修改成如下即可,也就是跳過空行和以#開頭的行
for line in info.splitlines()[1:]: if "" == line or line[0] == '#': continue n, v = line.split(":")
再重啟gmond,過一會就可以在ganglia看到數據了
==========================================
看了下ganglia在github上的代碼,發現最新代碼已經把這個bug修復了,只不過還沒有release
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。