脚本(bash)-快速检查其他主机集群上的各种进程状态

l2osamch  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(381)

拥有大量作为hadoop堆栈一部分运行的服务;需要一个简单的cli脚本来检查各种进程并为最终用户提供简单的输出。
将有50多个主机;它需要在每台主机上检查大约10个服务。
目前用bash编写;我喜欢输出,但代码是sllllooowww,因为它检查每个进程;通过无密码ssh和pgrep一次1个。
寻找建议或提示,使这更快。
即:

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
nr9pn0ug

nr9pn0ug1#

有类似pdsh(parallel distributed shell)的实用程序https://code.google.com/p/pdsh/wiki/usingpdsh
这可用于在多个节点上并行运行进程检查。
并行ssh在google代码中存档(只读)。有关更多最新版本,请参见https://github.com/pkittenis/parallel-ssh .
另一种选择是面料:http://www.fabfile.org/

nukf8bse

nukf8bse2#

找到一个工作解决方案,而不涉及重大项目;
不是每次都去井里通过ssh获取节点上的进程状态;在每个节点上获取一次ps ax,然后分配给局部变量。然后每次询问变量当前进程状态。
而不是做(节点数量x服务数量)=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
}
gopyfrb3

gopyfrb33#

您应该使用ganglia或ambari来监视大型集群。它们是免费的、开源的。它们具有基于阈值的监视和警报功能。

相关问题