Добавить server-stats.sh
This commit is contained in:
111
server-stats.sh
Normal file
111
server-stats.sh
Normal file
@@ -0,0 +1,111 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
if [[ "${TRACE-0}" == "1" ]]; then
|
||||
set -o xtrace
|
||||
fi
|
||||
|
||||
# Colors
|
||||
color_reset="\033[0m"
|
||||
color_red="\033[0;31m"
|
||||
color_green="\033[0;32m"
|
||||
color_yellow="\033[0;33m"
|
||||
color_bright_black="\033[1;30m"
|
||||
|
||||
# Help message
|
||||
print_help() {
|
||||
echo "Usage: ./server-stats.sh [OPTIONS...]"
|
||||
echo " -h --help Print help"
|
||||
}
|
||||
|
||||
# Early argument parsing
|
||||
case "${1:-}" in
|
||||
"-h" | "--help")
|
||||
print_help
|
||||
exit 0
|
||||
;;
|
||||
"")
|
||||
# do script below
|
||||
;;
|
||||
*)
|
||||
echo -e "${color_red}unrecognized option: ${1}${color_reset}" >&2
|
||||
echo "" >&2
|
||||
print_help >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# System stats
|
||||
cpu_total=$(LC_ALL=C top -bn1 | awk '/Cpu\(s\)/ {printf "%.0f", 100 - $8}')
|
||||
read -r ram_total ram_used <<<"$(free --mebi | awk '/Mem:/ {print $2, $3}')"
|
||||
ram_percentage=$(awk "BEGIN {printf \"%d\", ($ram_used/$ram_total)*100}")
|
||||
read -r disk_total disk_used disk_percentage <<<"$(LC_ALL=C df --human-readable / | awk 'NR==2{print $2, $3, $5}')"
|
||||
disk_percentage="${disk_percentage%\%}"
|
||||
|
||||
# Tops
|
||||
top_cpu=$(ps -e --format comm --sort=-%cpu | head -6 | tail -5)
|
||||
top_ram=$(ps -e --format comm --sort=-%mem | head -6 | tail -5)
|
||||
|
||||
# System info
|
||||
os_version=$(grep '^PRETTY_NAME=' /etc/os-release | cut -d= -f2 | tr -d '"')
|
||||
uptime=$(uptime --pretty)
|
||||
load_avg=$(uptime | awk -F'load average:' '{print $2}' | sed 's/^ //')
|
||||
users_logged_in=$(who | awk '{print $1}' | sort -u | paste -sd ", ")
|
||||
|
||||
### Failed login attempts
|
||||
# if [ -f /var/log/auth.log ]; then
|
||||
# failed_logins=$(grep -ci "Failed password" /var/log/auth.log)
|
||||
# last_failed=$(grep -i "Failed password" /var/log/auth.log | tail -3 | sed 's/^/ /')
|
||||
# elif [ -f /var/log/secure ]; then
|
||||
# failed_logins=$(grep -ci "Failed password" /var/log/secure)
|
||||
# last_failed=$(grep -i "Failed password" /var/log/secure | tail -3 | sed 's/^/ /')
|
||||
# else
|
||||
# failed_logins="N/A"
|
||||
# last_failed="Log file not found"
|
||||
# fi
|
||||
|
||||
# Conditional display
|
||||
if ((cpu_total > 85)); then
|
||||
cpu_color=$color_red
|
||||
elif ((cpu_total > 70)); then
|
||||
cpu_color=$color_yellow
|
||||
else
|
||||
cpu_color=$color_green
|
||||
fi
|
||||
|
||||
if ((ram_percentage > 85)); then
|
||||
ram_color=$color_red
|
||||
elif ((ram_percentage > 70)); then
|
||||
ram_color=$color_yellow
|
||||
else
|
||||
ram_color=$color_green
|
||||
fi
|
||||
|
||||
if ((disk_percentage > 85)); then
|
||||
disk_color=$color_red
|
||||
elif ((disk_percentage > 70)); then
|
||||
disk_color=$color_yellow
|
||||
else
|
||||
disk_color=$color_green
|
||||
fi
|
||||
|
||||
# Output
|
||||
echo -e "${color_bright_black}╭───────────────── System stats ─────────────────╮${color_reset}"
|
||||
echo -e " CPU Usage: ${cpu_color}${cpu_total}%${color_reset}"
|
||||
echo -e " RAM Usage: ${ram_color}${ram_used}/${ram_total} MB (${ram_percentage}%)${color_reset}"
|
||||
echo -e " Disk Usage: ${disk_color}${disk_used}/${disk_total} (${disk_percentage}%)${color_reset}"
|
||||
echo -e "${color_bright_black}├───────── Top 5 Processes by CPU usage ─────────┤${color_reset}"
|
||||
echo "${top_cpu}" | awk '{printf " %d. %s\n", NR, $0}'
|
||||
echo -e "${color_bright_black}├───────── Top 5 Processes by RAM usage ─────────┤${color_reset}"
|
||||
echo "${top_ram}" | awk '{printf " %d. %s\n", NR, $0}'
|
||||
echo -e "${color_bright_black}├────────────── System information ──────────────┤${color_reset}"
|
||||
echo " OS Version: ${os_version}"
|
||||
echo " Uptime: ${uptime}"
|
||||
echo " Load Average: ${load_avg}"
|
||||
echo " Logged in Users: ${users_logged_in}"
|
||||
# echo -e "${color_bright_black}├──────────── Failed login attempts ─────────────┤${color_reset}"
|
||||
# echo " Failed logins: ${failed_logins}"
|
||||
# echo " Last failed: ${last_failed}"
|
||||
echo -e "${color_bright_black}╰────────────────────────────────────────────────╯${color_reset}"
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user