多数のマシンのping更新をチェックする

多数のマシンのping更新をチェックする

大量のマシンがあり、それらを cron で 1 時間ごとに可用性をチェックする必要があります。約 1000 台のマシンがあり、各ノードごとに 4 ~ 5 個の名前シリーズとその後に続く番号に分割されています。たとえば、ab1000 から ab1200、bs3000 から bs3892、zx7800 から zx8900 などです。現在、これらのノードに監視用のソフトウェアを配置できないため (そのための承認を得ていないため)、単純な ping スクリプトを使用しています。そのため、コード内で、すべてのマシン名を 1 つずつ更新するファイルを呼び出しています (マシン名は頻繁に変更されるため、毎日実行する必要があります)。また、正規表現を使用してマシンを指定できるかどうかを検討しています。そうすれば、作業が大幅に楽になります。たとえば、ab1*、zx[7-8]* などです。入力ファイルでも同じことを試しましたが、あまり役に立ちませんでした。また、これに関するもう 1 つの問題は、1 台または 2 台のマシンが永久にダウンしている場合があり、そのたびにカウントする必要がないことです。そのため、アラート リストで除外しておく必要があります。

また、マシン名が sz7701、7702、7703 の 3/300 sx がダウンしているためにリストを提供するアラートなど、アラートをより堅牢にできる他の方法があればお知らせください。

cat /tmp/node.txt

zx7800
zx7801
zx7802
.....
....
zx8900
bs3000
bs3001

cat nodecheck.sh

for node in `cat /tmp/node.txt`
do
 count=0
 count=$(ping -c 3 $node | grep "100%packet loss"|wc -l)
 if [ $count -ne 0 ]
 then
  echo "$node" >> /tmp/nodedown.txt
 fi
done

答え1

監視する名前のリストが必要です。このリストを手動で管理するか、実行されているはずのマシンのリストを他の誰かが管理している場所からリストを抽出します。

いくつかの点を簡素化できます。pingコマンドはすでに終了ステータスを返しているので、それを使用できます。また、各エコーごとにリダイレクトする必要はなく、ループごとに 1 回で十分です。これには、ファイルが初期化され、前回の実行からの行が含まれないという追加の利点があります。

for node in $(cat /tmp/node.txt); do
  if ! ping -c 3 $node &> /dev/null; then
    echo "$node"
  fi
done > /tmp/nodedown.txt

統計が必要な場合は、それらをカウントするか、 を使用してwc2 つのファイル内の行数をカウントすることができます。

echo "$(wc -l < /tmp/nodedown.txt) / $(wc -l < /tmp/node.txt)"

答え2

代替案:

  • フピングping に似ていますが、複数のホストに ping を実行するために明示的に設計されています。
  • どうしたのマシンの起動または停止を監視するために設計されたユーティリティです。

関連情報