108 lines
3.8 KiB
Bash
Executable File
108 lines
3.8 KiB
Bash
Executable File
#!/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."
|