Hadoop日常運行過程中一些參數需要進行實時監控,如:Map、Reduce任務數量,HDFS磁盤使用情況,namenode、datanode在線數量及健康情況,以便更好的掌握整個Hadoop集群架構的運行情況。
下面結合最近工作中的一些實踐經驗,分享一下如何用zabbix實時監控Hadoop集群。
工作一開始想在網上找現成的zabbix監控Hadoop文檔,發現只一篇老外的文檔:https://code.google.com/p/mikoomi/wiki/05,51cto有人做了翻譯,上面提供的好用的現成模板和兩個強大的數據抓取腳本。
但是在使用的過程中有很多問題,需要根據自己的實際環境進行修改,但腳本中大部分的數據抓取和分析代碼是沒有問題的,寫這個的人的確很NB,下了不少工夫。
我在這里僅提一下,需要改變的部分。
mikoomi文檔中使用的是zabbix的externalscripts功能,生成數據后使用zabbix_sender命令向服務器發送數據,實現過程非常簡單,但不走運的是,我使他這個方法,數據的抓取和整理都沒有問題,就是在用zabbix_sender上傳數據時問上失敗。中間掙扎、糾結了好久,沒有找到解決辦法。遂決定,放棄原有的套路,換另一種方法。
如果你用mikoomi的原始方法實現在,那么恭喜你,他的方法確實簡單好用,請你一定聯系我你是怎么做到的。
下面來講一下我的基于mikoomi腳本的另一種實現方法。
一開始,按照mikoomi原文中方法,導入他所提供的hadoop監控模板,一個用于監控namemode,一個用于監控jobstracker。
然后,將需要被監控的namenode加入這兩個模板,當加入第二個模板的時候會提示你,這兩個模板中有兩個item沖突了,很好辦,從任意一個模板中刪除沖突項就好了。
上述兩步操作比較簡單,就不多說了,下面重點來了,前方高能。
兩個模板中默認原作者是要以zabbix_sender的方式傳送監控數據的,所以兩個模板中的item都是zabbix_trap的數據類型,現在我們即將采用的是傳統的在被監控端創建UserParameter的方式,所以一個很重要的地方需要做修改,如圖:
(這個頁面就是這么寬,沒辦法,將就著看吧!)
兩個模板60多個item一個一個改勢必很痛苦,zabbix給我們提供了一個叫“mess update”的功能,全選之后(除了一個叫Data Collector的item),選擇mess update即可進入如下頁面進行修改:
就是這么貼心,就是這么簡單。有些情況下,全選的話,可能無法成功,那就一次少選 幾個,多改幾次就是了。
模板中item的數據類型改完之后,將進入最重要的數據抓取階段。原作提供的腳本功能強大,但有很多地方不是哪里都能用,比如他的shell腳本是以#!/usr/bin/bash開頭的。腳本抓取數據的來源是hadoop自身提供的web頁面,腳本通過curl命令抓取頁面內容進行分析,提煉后按照 “主機名 key value” 的格式進行存儲。
如果你們hadoop服務器的web頁面是不需要密碼訪問的還好,如果像我們公司一樣是需要密碼訪問的,這個url就需要特別注意一個,免得不能訪問,就將無法獲取數據。
現把我修改后的,正在使用的腳本放在這里,供參考 :
mikoomi-hadoop-jobtracker-plugin-helper.sh
mikoomi-hadoop-jobtracker-plugin.sh
mikoomi-hadoop-namenode-plugin-helper.sh
mikoomi-hadoop-namenode-plugin.sh
******************************************************
注意事項:
上述腳本均是放在被監控端即namenode上運行。
上述腳本中的URL使用了user.name變量,是因為我們的環境中訪問hadoop頁面是需要密碼的,直接把密碼加入url就行。如果不需要密碼,把這個就是去掉就了行,注意,每一個腳本有兩處URL。
從腳本名稱中便可看出,帶有“jobtracker”的腳本是用于抓取和jobtracker運行有關的數據的,帶有“namenode”的是用來抓取和namenode運行有關的數據的。
腳本run_hd.sh是用來將前面腳本生成的數據合并到一處的,后并后的文件我取名為/tmp/namenode.txt(這個文件不要放在zabbix用戶無法訪問的目錄,比如:root家目錄下)。
首次使用需先運行run_hd.sh產生數據文件/tmp/namenode.txt ,然后執行如下awk命令,將生成結果導入 /etc/zabbix/zabbix_agentd.d/hadoop.conf 中,代碼如下:
awk '{ print "UserParameter="$2",grep \" "$2" \" /tmp/namenode.txt | awk '\''{ print '\$'3 }'\''" }' /tmp/namenode.txt > /etc/zabbix/zabbix_agentd.d/hadoop.conf
注意: 此awk命令只需執行一次即可。
然后重啟被監控端的zabbix_agent進程:
service zabbix_agent restart
最后,也是最重要的,要把腳本run_hd.sh放入crontab,第分鐘執行一次,這樣/tmp/namenode.txt 中的數據就會每分更新一次,和zabbix監控中的更新同步。
好了,坐等出圖。出圖需要一點點時間,這個時候可以使用zabbix_get命令來測試,看一看zabbix server 端能不能接收到數據,比如:
zabbix_get -s namenode -k min_free_storage_pct_node_name
就先展示這兩個吧,其它的數據不方便放上來。
至于triger和報警,mikoomi的模板中都為我們安排好了,我們只要保障數據能正常上傳,就可以了。
如有疑問,歡迎留言~~~~
************************************************************
神馬, 谷歌不能訪問?mikoomi的網頁打不開?好吧,附送hosts一枚,不謝!
戳我就能上谷歌!
原創文章,作者:紅豆殺,如若轉載,請注明出處:http://www.www58058.com/736