108 lines
3.8 KiB
Bash
Raw Normal View History

#!/bin/bash
# List of servers (replace these with your actual server hostnames or IPs)
servers=("thevault.sshjunkie.com" "zcluster.technodrome1.sshjunkie.com" "zcluster.technodrome2.sshjunkie.com" "shredder.sshjunkie.com" "root@chatwithus.live") # Add as many servers as needed
# Define log file
log_file="/home/doc/system_health_report_$(date +%F).log"
# Telegram Bot API Token and Chat ID
BOT_TOKEN="8178867489:AAH0VjN7VnZSCIWasSz_y97iBLLjPJA751k"
CHAT_ID="1559582356"
TELEGRAM_API="https://api.telegram.org/bot$BOT_TOKEN/sendMessage"
# Function to escape Markdown special characters
escape_markdown() {
echo "$1" | sed 's/\([_*[]\)/\\\1/g' # Escape _, *, [, and ]
}
# Function to send the report to Telegram
send_to_telegram() {
local message=$1
local chunk_size=4096
local start=0
local end=$chunk_size
while [ ${#message} -gt $start ]; do
chunk="${message:$start:$chunk_size}"
curl -s -X POST $TELEGRAM_API \
-d chat_id=$CHAT_ID \
-d text="$chunk" \
-d parse_mode="Markdown"
start=$end
end=$((start + chunk_size))
done
}
# Function to run the checks on each server
check_health() {
server=$1
server_report="=== Health Check for $server ===\n"
# Memory Usage (summary)
memory_output=$(ssh $server "free -h")
free_memory=$(echo "$memory_output" | awk 'NR==2 {print $4}')
if [[ "$free_memory" < "1.0Gi" ]]; then
server_report+="Memory: Low memory available! Only $free_memory free, consider adding more RAM.\n"
else
server_report+="Memory: Sufficient memory available ($free_memory free).\n"
fi
# Swap Usage (summary)
swap_output=$(ssh $server "swapon -s")
swap_used=$(echo "$swap_output" | awk '{if(NR>1) print $3}')
if [[ "$swap_used" > "1Gi" ]]; then
server_report+="Swap: High swap usage ($swap_used used). This may indicate memory pressure.\n"
else
server_report+="Swap: Minimal swap usage ($swap_used used).\n"
fi
# CPU Load (summary)
cpu_output=$(ssh $server "uptime")
load_avg=$(echo "$cpu_output" | awk '{print $10}' | sed 's/,//')
if (( $(echo "$load_avg > 2.0" | bc -l) )); then
server_report+="CPU Load: High load average ($load_avg). Check if any processes are consuming too much CPU.\n"
else
server_report+="CPU Load: Normal load average ($load_avg).\n"
fi
# Disk Space (summary)
disk_output=$(ssh $server "df -h")
disk_free=$(echo "$disk_output" | grep -v 'tmpfs' | grep -v 'Filesystem' | awk '{print $4}' | sed 's/[A-Za-z]*//g' | head -n 1)
if [[ "$disk_free" < "10G" ]]; then
server_report+="Disk Space: Low disk space! Only $disk_free free. Consider cleaning up or adding storage.\n"
else
server_report+="Disk Space: Sufficient disk space ($disk_free free).\n"
fi
# Service Check (example: check if Apache is running)
apache_status=$(ssh $server "systemctl is-active apache2")
if [[ "$apache_status" == "active" ]]; then
server_report+="Apache: Running normally.\n"
else
server_report+="Apache: Not running. Check service logs for issues.\n"
fi
# Additional Checks (summary: disk I/O, uptime)
iostat_output=$(ssh $server "iostat | head -n 2") # Get summary of disk I/O
uptime_output=$(ssh $server "uptime")
server_report+="Disk I/O: $iostat_output\n"
server_report+="Uptime: $uptime_output\n"
# Escape Markdown special characters
escaped_report=$(escape_markdown "$server_report")
# Send the server-specific summary to Telegram
send_to_telegram "$escaped_report"
# Separator for readability in log file
echo -e "\n=====================\n" >> $log_file
}
# Main loop to go through each server
for server in "${servers[@]}"; do
check_health $server
done
echo "Health check completed. Reports sent to Telegram and saved to $log_file."