Merge branch 'main' of https://git.coolaj86.com/josh/proxmox-scripts
This commit is contained in:
		
						commit
						1afe7c7e59
					
				
							
								
								
									
										144
									
								
								Proxmox/sysmon.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								Proxmox/sysmon.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,144 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | # Josh's Automatic System Monitor | ||||||
|  | # Written by Josh Mudge | ||||||
|  | # Ad Mejorem Dei Glorium | ||||||
|  | 
 | ||||||
|  | DSSSOURCE=https://git.coolaj86.com/josh/proxmox-scripts/raw/branch/main/dss/ | ||||||
|  | update=1 | ||||||
|  | version=v1.6.0a | ||||||
|  | alpha=0 | ||||||
|  | dfh=$(df -h | grep '8[0-9]%') | ||||||
|  | dfh2=$(df -h | grep '9[0-9]%') | ||||||
|  | # This requires sensors, grep, awk, sed, sort, and tail to be installed. | ||||||
|  | temp=$(sensors | grep Core | awk '{print $3}' | sed 's/+//g' | sed 's/°C//g' | sort -n | tail -n 1 | sed 's/[^0123456789].*//') | ||||||
|  | 
 | ||||||
|  | while [[ $# -gt 0 ]] | ||||||
|  | do | ||||||
|  |   key="$1" | ||||||
|  | 
 | ||||||
|  |   case $key in | ||||||
|  |     --setup) | ||||||
|  |     shift # past argument | ||||||
|  |     setup=1 | ||||||
|  |     ;; | ||||||
|  |     --no-update) | ||||||
|  |     update=0 | ||||||
|  |     shift # past argument | ||||||
|  |     ;; | ||||||
|  |     --audit) | ||||||
|  |     audit=1 | ||||||
|  |     shift # past argument | ||||||
|  |     ;; | ||||||
|  |     --email) | ||||||
|  |     email="$2" | ||||||
|  |     shift # past argument | ||||||
|  |     ;; | ||||||
|  |     -h|help) | ||||||
|  |     echo "dss-mon $version" | ||||||
|  |     echo "Usage: dss --monitor --email user@mailprovider.com" | ||||||
|  |     exit 1 | ||||||
|  |     ;; | ||||||
|  |     -v|version) | ||||||
|  |     echo "dss $version" | ||||||
|  |     exit 1 | ||||||
|  |     ;; | ||||||
|  |     *) | ||||||
|  |     # unknown option | ||||||
|  |     if test -z "${unknown}" | ||||||
|  |     then | ||||||
|  |       unknown=$1 | ||||||
|  |     else | ||||||
|  |       echo "dss-mon $version" | ||||||
|  |       echo "Usage: dss --monitor --email user@mailprovider.com" | ||||||
|  |       exit 1 | ||||||
|  |     fi | ||||||
|  |     ;; | ||||||
|  |   esac | ||||||
|  |   shift # past argument or value | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | if test $update = 1 | ||||||
|  | then | ||||||
|  | 
 | ||||||
|  |   sudo apt-get update | ||||||
|  |   sudo apt-get upgrade | ||||||
|  |   sudo apt-get install sysstat # Check if installed, then do this | ||||||
|  |   curl -s "$DSSSOURCE/setup.sh" | bash | ||||||
|  | 
 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Cleanup | ||||||
|  | 
 | ||||||
|  | sudo apt-get clean | ||||||
|  | 
 | ||||||
|  | # Security Audit (Tackled by dss init before setting this up.) | ||||||
|  | 
 | ||||||
|  | # if test ! -f /home/.dssv1.7 | ||||||
|  | # then | ||||||
|  | # | ||||||
|  | #   dss init | ||||||
|  | # | ||||||
|  | # fi | ||||||
|  | 
 | ||||||
|  | auth=$(sudo cat /var/log/auth.log | grep "Invalid user") | ||||||
|  | #auth2=$(sudo cat /var/log/auth.log | grep "Connection closed") | ||||||
|  | 
 | ||||||
|  | if test $alpha = 1; | ||||||
|  | then | ||||||
|  | 
 | ||||||
|  |   sudo apt-get autoremove | ||||||
|  | 
 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # To setup email, point a domain name to your server using DNS. | ||||||
|  | # Disable any firewall rules that block port 25 (You may have to go to a server admin panel or contact your system administrator) | ||||||
|  | # Then run: sudo apt-get install mailutils | ||||||
|  | # Open up /etc/hosts and make sure it has: | ||||||
|  | # 127.0.1.1 mydomain.com myserverHOSTNAME | ||||||
|  | # Select "Internet Site" and enter the domain you want it to send email from. | ||||||
|  | # Then you can send email like this: echo "Body of email" | mail -s "subject" EMAILADDRESS | ||||||
|  | 
 | ||||||
|  | if test ! -z "$auth" # If set to run automatically, don't run this check every time. | ||||||
|  | then | ||||||
|  |   echo "Attacks found. Sending authentication log to $email" | ||||||
|  |   sudo cat /var/log/auth.log | grep "Invalid user" | mail -s "Invalid User Login on $(hostname)" $email | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if test ! -z "$dfh" | ||||||
|  | then | ||||||
|  |   echo "Disk usage is high, sending disk usage to $email" | ||||||
|  |   echo "$dfh" | mail -s "High Disk Usage on $(hostname)" $email | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if test ! -z "$dfh2" | ||||||
|  | then | ||||||
|  |   echo "Disk usage is critical, sending disk usage to $email" | ||||||
|  |   echo "$dfh2" | mail -s "Critical Disk Usage on $(hostname)" $email | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | for i in {1..300} # Do this 300 times. | ||||||
|  | do | ||||||
|  | CPU=$(mpstat 1 1 | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { printf("%d",100 - $field) }') # Find CPU usage for the last 10 seconds. Code credit: Stackoverflow | ||||||
|  | CPUT=$(($CPUT + $CPU)) # Add each 1 second record to the total. | ||||||
|  | done | ||||||
|  | CPURESULT=$(($CPUT / 300)) # Divide the total by 300 seconds to find average CPU usage over the last 5 minutes. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if test $CPURESULT -gt 90 | ||||||
|  | then | ||||||
|  |   echo "CPU usage is quite high, sending report to $email" | ||||||
|  |   echo "$CPURESULT %" | mail -s "High CPU Usage on $(hostname)" $email | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | USEDRAM=$(free | grep Mem | awk '{print ($2 -$7) / $2 * 100.0}') | ||||||
|  | 
 | ||||||
|  | if test $USEDRAM -gt 80 | ||||||
|  | then | ||||||
|  |   echo "RAM usage is quite high, sending report to $email" | ||||||
|  |   echo "$USEDRAM %" | mail -s "High RAM Usage on $(hostname)" $email | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if test $temp -gt 80 | ||||||
|  | then | ||||||
|  |     echo "CPU temp is over 80C, sending report to $email" | ||||||
|  |     echo "$temp" | mail -s "High CPU Temperature on $(hostname)" $email | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user