2015-12-03 16 views
1

有一堆作爲hadoop堆棧的一部分運行的服務;需要一個簡單的CLI腳本來檢查各種過程,併爲最終用戶提供簡單的輸出。腳本(當前bash) - 快速檢查其他主機集羣上的各種進程狀態

將有超過50個主機;以及每個主機需要檢查的大約10個服務。

當前用bash編寫;我喜歡輸出,但代碼是slllloooowww,因爲它檢查每個進程; 1通過無密碼的ssh和pgrep。

尋找建議或提示使其更快。

即:

Hostname  | IP    | Ping | SSH  | Zookeeper | Namenode | Datanode 

localhost  | 127.0.0.1  | online | online | _   | _   | _ 
node1   | 172.30.50.150 | online | online | _   | _   | _ 
dn1    | 10.142.0.100 | online | online | online  | online  | online 

示例代碼:

fun_datanode() { 
zup=`ssh $1 "ps ax | grep -v grep | grep datanode | wc -l"` 
    if [ $zup -gt 0 ]; then 
    dn=online 
    else 
    dn="_" 
    fi 
} 



#main 


#main loop that reads host file 
for host in `awk '/^[0-9]/ { print $1 }' /etc/hosts` 

do 

#ping 
    fping -c1 -t10 -n $host > /dev/null 2>&1 
    RETVAL=$? 
    hname=`getent hosts $host | awk '{print $2 }'` 

    if [ $RETVAL -eq 0 ]; then 

    if ssh $host 'pgrep ssh' > /dev/null 2>&1; then 
     ssh=online 
     fun_zookeeper $host 
     fun_namenode $host 
     fun_datanode $host 
    fi 
    fun_print "$hname $host "online" $ssh $zoo $nn $dn" 
    echo 
    else 
     fun_print $hname $host "${red}offline${norm}" "_" "_" "_" "_" 
     echo 
    fi 
done 

回答

1

應使用神經節或Ambari來監控大型集羣。他們是免費和開源的。它們具有基於閾值的監視和警報功能。

+0

你是對的,Cloudera經理或Ambari可能是一個更好的選項,專門監測Hadoop集羣。 – Tagar

+0

有沒有CLI utils?這些監視應用程序中的大多數都是基於GUI和Web的極其痛苦的REST API,用於檢查進程狀態的簡單任務。 Amabari和CM特別接管了enitre安裝,並且不再允許您直接編輯配置文件並要求通過Web層進行的所有更改。 – zerobane

+0

我們使用CM和so-o-o比手動編輯文件方便得多。監控也隨之而來。 – Tagar

0

找到一個工作解決方案,沒有範圍蔓延到一個重大項目;

而不是每次都通過SSH去獲取進程狀態;在每個節點上抓住ps ax一次,然後分配給局部變量。然後每次詢問變量以獲取當前過程狀態。

而不是做(節點數×服務量)= SSH連接;現在它只有(節點數量)= SSH連接。

從那裏;我可能背景/叉每個SSH ...

fun_grabps() { 
psout=`ssh $1 "ps ax"` 
} 

fun_zookeeper() { 
zup=`echo $psout | grep -v grep | grep zoo | wc -l` 
    if [ $zup -gt 0 ]; then 
    zoo=online 
    else 
    zoo="_" 
    fi 
}