業務の効率化や改善を求める現代の企業にとって、サーバーの状態監視は重要な課題です。静的な定点監視から動的なリアルタイム監視まで、そのニーズは多岐にわたります。しかし、商用ツールを使うにはコストがかかったり、機能が過剰だったりすることも多いでしょう。そこで、Bashスクリプトを使って簡単にサーバーの状態監視を実現する方法について解説します。専門的なスキルがなくても、自分たちの環境に適した監視スクリプトを作成することができます。
Bashスクリプトとは
Bash(Bourne Again SHell)は、LinuxやUnix環境で主に使われるシェルの一種です。シェルスクリプトは、このBashを使って記述されるプログラムで、タスクの自動化やコマンドの実行を支援します。Bashスクリプトを使えば、簡単なコマンドから高度なシステム管理まで様々な作業を自動化できます。
基本的な監視項目
サーバー監視において基本的に抑えるべき項目は、以下のようなものがあります。
- CPU使用率: 高負荷が続くとサービスが停止するリスクがあるため、常にチェックが必要です。
- メモリ使用率: メモリリークがないかどうかを確認することは非常に重要です。
- ディスク使用量: ディスクの使用量が100%に近づくとデータが書き込めなくなり、サービスに支障を来す可能性があります。
- プロセスの稼働状況: 特定のプロセスが正常に動いているかを確認することは、サービスの安定性を確保する上で大切です。
基本スクリプトの作成
CPU使用率の監視
top
コマンドは平均的なCPU使用率を確認するのに便利です。以下のスクリプトはCPU使用率を確認する例です。
#!/bin/bash
CPU_THRESHOLD=80
CPU_USAGE=$(top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}')
echo "Current CPU usage is: $CPU_USAGE"
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
echo "CPU usage is above threshold!"
# Add notification or alert logic here
fi
メモリ使用率の監視
メモリ使用率を確認するために、free
コマンドを使用します。
#!/bin/bash
MEMORY_THRESHOLD=80
MEMORY_USAGE=$(free | awk '/Mem/ {printf("%.2f", $3/$2 * 100.0)}')
echo "Current Memory usage is: $MEMORY_USAGE%"
if (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )); then
echo "Memory usage is above threshold!"
# Add notification or alert logic here
fi
ディスク使用量の監視
ディスクの使用量は、df
コマンドで確認できます。
#!/bin/bash
DISK_THRESHOLD=90
DISK_USAGE=$(df -h / | grep '/' | awk '{print $5}' | sed 's/%//')
echo "Current Disk usage is: $DISK_USAGE%"
if [ $DISK_USAGE -gt $DISK_THRESHOLD ]; then
echo "Disk usage is above threshold!"
# Add notification or alert logic here
fi
スクリプトの自動実行
cronジョブを使ってスクリプトを自動実行することで、手動操作を減らし、監視を自動化することができます。
# 5分ごとに実行する例
*/5 * * * * /path/to/your/script.sh
通知機能の追加
監視に役立つメール通知機能を追加することで、即座に問題に対応できる環境を構築できます。
メール通知を設定する
例えば、sendmail
を使ったメール通知を設定することができます。まず、sendmail
をインストールしてから以下のようにスクリプトに追加します。
#!/bin/bash
TO_ADDRESS="あなたのメールアドレス"
SUBJECT="Alert: サーバーの状態に注意が必要"
BODY="Alert: The server is currently experiencing high load."
echo -e "Subject:$SUBJECT\n\n$BODY" | sendmail $TO_ADDRESS
ログを活用する
ログファイルを書き込むことで、後から問題を確認しやすくなります。スクリプトにログ出力を追加することを検討してみてください。
LOG_FILE="/var/log/server_monitor.log"
echo "$(date): Current CPU $CPU_USAGE%, Memory $MEMORY_USAGE%, Disk $DISK_USAGE%" >> $LOG_FILE
スクリプトの改善
このようなシンプルなスクリプトからスタートし、サーバー監視のニーズに応じて機能を追加していくことができます。スクリプトをカスタマイズすることで、より個別のニーズに適した監視環境を構築することが可能です。また、オープンソースのモニタリングソフトウェアと連携することで、さらなる機能を追加することも考えられます。
結論
Bashスクリプトを使うことで、コストをかけずにサーバー監視を始めることができます。基本的な監視ポイントを押さえ、必要に応じて改善しながら使い続けることで、システムの安定稼働をサポートし、業務の自動化に貢献できます。やがて、より高度な監視機能を追加していくことで、システムの複雑性に応じた監視環境を築くことができるでしょう。
コメント