サーバーのエラーをいち早く検知するためのログ監視スクリプトを作ります。特定キーワードが出たら通知する仕組みを解説します。
基本的なログ監視スクリプト
#!/bin/bash
LOGFILE="/var/log/nginx/error.log"
LAST_POS_FILE="/tmp/log_monitor_pos"
last_pos=$(cat "$LAST_POS_FILE" 2>/dev/null || echo 0)
current_size=$(wc -c < "$LOGFILE")
if [ "$current_size" -gt "$last_pos" ]; then
new_lines=$(tail -c +$((last_pos+1)) "$LOGFILE")
matched=$(echo "$new_lines" | grep -E "ERROR|CRITICAL|FATAL")
[ -n "$matched" ] && echo "[$(date)] アラート: $matched"
fi
echo "$current_size" > "$LAST_POS_FILE"tailでリアルタイム監視
#!/bin/bash
tail -f /var/log/syslog | while IFS= read -r line; do
echo "$line" | grep -q "ERROR" && echo "[$(date)] エラー: $line"
doneまとめ
- grep -E でERROR・CRITICALなどをパターンマッチできる
- 最後に読んだ位置を記録して差分のみを処理できる
- tail -f とwhileループでリアルタイム監視ができる
- cronと組み合わせて定期チェックにするのが実用的



コメント