vm 107 monitor
This commit is contained in:
@@ -4,6 +4,7 @@ HOSTNAME=$(hostname)
|
|||||||
DATE=$(date '+%Y-%m-%d %H:%M:%S')
|
DATE=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
VM_ID=107
|
VM_ID=107
|
||||||
LOG_FILE="/var/log/vm107-monitor.log"
|
LOG_FILE="/var/log/vm107-monitor.log"
|
||||||
|
STATE_FILE="/var/run/vm107-last-state"
|
||||||
|
|
||||||
check_vm_status() {
|
check_vm_status() {
|
||||||
local vm_status=$(qm status $VM_ID 2>/dev/null | grep -oP 'status: \K.*')
|
local vm_status=$(qm status $VM_ID 2>/dev/null | grep -oP 'status: \K.*')
|
||||||
@@ -39,27 +40,63 @@ CHECK_EXIT=$?
|
|||||||
STATUS=$(echo "$RESULT" | cut -d: -f1)
|
STATUS=$(echo "$RESULT" | cut -d: -f1)
|
||||||
ERROR_TYPE=$(echo "$RESULT" | cut -d: -f2)
|
ERROR_TYPE=$(echo "$RESULT" | cut -d: -f2)
|
||||||
|
|
||||||
|
# Citește starea anterioară
|
||||||
|
LAST_STATE=""
|
||||||
|
[ -f "$STATE_FILE" ] && LAST_STATE=$(cat "$STATE_FILE")
|
||||||
|
|
||||||
echo "$(date '+%Y-%m-%d %H:%M:%S'): VM $VM_ID status: $STATUS ($ERROR_TYPE)" >> "$LOG_FILE"
|
echo "$(date '+%Y-%m-%d %H:%M:%S'): VM $VM_ID status: $STATUS ($ERROR_TYPE)" >> "$LOG_FILE"
|
||||||
|
|
||||||
if [ $CHECK_EXIT -ne 0 ]; then
|
# Verifică dacă starea s-a schimbat
|
||||||
SUBJECT="VM $VM_ID $STATUS on $HOSTNAME"
|
CURRENT_STATE="$STATUS:$ERROR_TYPE"
|
||||||
BODY="VM $VM_ID Status: $STATUS\n"
|
|
||||||
BODY+="Error Type: $ERROR_TYPE\n"
|
|
||||||
BODY+="Check Time: $DATE\n"
|
|
||||||
BODY+="Host: $HOSTNAME\n\n"
|
|
||||||
|
|
||||||
if [ "$STATUS" = "STOPPED" ]; then
|
if [ "$LAST_STATE" != "$CURRENT_STATE" ]; then
|
||||||
BODY+="VM is stopped. To start: qm start $VM_ID"
|
# Starea s-a schimbat - trimite email
|
||||||
elif [ "$ERROR_TYPE" = "INTERNAL_ERROR" ]; then
|
SEND_EMAIL=true
|
||||||
BODY+="VM has internal-error (KVM crash)."
|
|
||||||
elif [ "$ERROR_TYPE" = "PROCESS_MISSING" ]; then
|
if [ $CHECK_EXIT -eq 0 ]; then
|
||||||
BODY+="VM marked as running but process missing."
|
# VM acum e OK
|
||||||
|
if [[ "$LAST_STATE" == STOPPED:* ]] || [[ "$LAST_STATE" == ERROR:* ]]; then
|
||||||
|
# Era oprit/eroare, acum e pornit - trimite email de recovery
|
||||||
|
SUBJECT="✅ VM $VM_ID RECOVERED - Running on $HOSTNAME"
|
||||||
|
BODY="VM $VM_ID has RECOVERED and is now RUNNING\n"
|
||||||
|
BODY+="Previous state: $LAST_STATE\n"
|
||||||
|
BODY+="Current state: RUNNING\n"
|
||||||
|
BODY+="Recovery time: $DATE\n"
|
||||||
|
BODY+="Host: $HOSTNAME\n\n"
|
||||||
|
BODY+="VM is now operating normally."
|
||||||
|
else
|
||||||
|
# Altă tranziție către RUNNING - nu trimite email
|
||||||
|
SEND_EMAIL=false
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# VM are probleme
|
||||||
|
SUBJECT="⚠️ VM $VM_ID $STATUS on $HOSTNAME"
|
||||||
|
BODY="VM $VM_ID Status: $STATUS\n"
|
||||||
|
BODY+="Error Type: $ERROR_TYPE\n"
|
||||||
|
BODY+="Check Time: $DATE\n"
|
||||||
|
BODY+="Host: $HOSTNAME\n\n"
|
||||||
|
|
||||||
|
if [ "$STATUS" = "STOPPED" ]; then
|
||||||
|
BODY+="VM is stopped. To start: qm start $VM_ID"
|
||||||
|
elif [ "$ERROR_TYPE" = "INTERNAL_ERROR" ]; then
|
||||||
|
BODY+="VM has internal-error (KVM crash)."
|
||||||
|
elif [ "$ERROR_TYPE" = "PROCESS_MISSING" ]; then
|
||||||
|
BODY+="VM marked as running but process missing."
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Trimite email simplu prin mail command
|
# Trimite email dacă e necesar
|
||||||
echo -e "$BODY" | mail -s "$SUBJECT" root
|
if [ "$SEND_EMAIL" = true ]; then
|
||||||
|
echo -e "$BODY" | mail -s "$SUBJECT" root
|
||||||
echo "$(date '+%Y-%m-%d %H:%M:%S'): Email sent for VM $VM_ID $STATUS" >> "$LOG_FILE"
|
echo "$(date '+%Y-%m-%d %H:%M:%S'): Email sent - state changed from '$LAST_STATE' to '$CURRENT_STATE'" >> "$LOG_FILE"
|
||||||
|
else
|
||||||
|
echo "$(date '+%Y-%m-%d %H:%M:%S'): State changed but no email needed" >> "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$(date '+%Y-%m-%d %H:%M:%S'): No email - state unchanged ($CURRENT_STATE)" >> "$LOG_FILE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Salvează starea curentă
|
||||||
|
echo "$CURRENT_STATE" > "$STATE_FILE"
|
||||||
|
|
||||||
exit $CHECK_EXIT
|
exit $CHECK_EXIT
|
||||||
|
|||||||
Reference in New Issue
Block a user