#!/bin/bash # Monitoring script # Secrets username="{{ alert_username }}" password="{{ alert_password }}" VAULT="{{ alert_vault }}" # Servers servers=({{ alert_list_server | join (' ') }}) local_ip=$(hostname -I | awk '{print $1}') # SSL site="{{ alert_server_ssl }}" # Vérifier s'il y a un paramètre if [ $# -ne 1 ]; then echo "Usage : $0 [storage|load|ping|health|ssl|backup_git|backup_vault|cpu]" exit 1 fi # Récupérer le paramètre parametre="$1" # Vérifier la valeur du paramètre et afficher le résultat correspondant if [ "$parametre" = "storage" ]; then [ $(df -h / | awk 'NR==2 {sub(/%/, "", $(NF-1)); print $(NF-1)}') -gt 80 ] && curl -u "$username:$password" -H "Title: Full Storage" -H "ta:card_index_dividers" -d "90% used on `hostname`" https://alert.jingoh.fr/{{ alerts_storage }} elif [ "$parametre" = "load" ]; then [ $(uptime | awk -F'load average: ' '{print $2}' | awk '{print $1}' | cut -d , -f1) '>' $(nproc) ] && curl -u "$username:$password" -H "Title: Load" -H "ta:battery" -d "`hostname` Load with `uptime`" https://alert.jingoh.fr/{{ alerts_load }} elif [ "$parametre" = "ping" ]; then for ip in "${servers[@]}" do if [ "$ip" != "$local_ip" ]; then ping -c 1 "$ip" || curl -u "$username:$password" -H "Title: Ping Server" -H "ta:sos" -d "Server ping failed from `hostname` to $ip" https://alert.jingoh.fr/{{ alerts_ping }} fi done elif [ "$parametre" = "health" ]; then [ $(curl -s -o /dev/null -w "%{http_code}" https://gitea.jingoh.fr) -gt 400 ] && curl -u "$username:$password" -H "Title: Service gitea" -H "ta:bangbang" -d "No response From gitea.jingoh.fr" https://alert.jingoh.fr/{{ alerts_health }} [ $(curl -s -o /dev/null -w "%{http_code}" https://vault.jingoh.fr) -gt 400 ] && curl -u "$username:$password" -H "Title: Service vault" -H "ta:bangbang" -d "No response From vault.jingoh.fr" https://alert.jingoh.fr/{{ alerts_health }} [ $(curl -s -o /dev/null -w "%{http_code}" https://homepage.jingoh.fr) -gt 400 ] && curl -u "$username:$password" -H "Title: Service homepage" -H "ta:bangbang" -d "No response From homepage.jingoh.fr" https://alert.jingoh.fr/{{ alerts_health }} elif [ "$parametre" = "ssl" ]; then expiration_timestamp=$(date -d "$(echo | openssl s_client -servername $site -connect $site:443 2>/dev/null | openssl x509 -noout -enddate | cut -d "=" -f 2)" +%s) current_timestamp=$(date +%s) difference=$((expiration_timestamp - current_timestamp)) threshold=$((20 * 24 * 3600)) # 20 jours en secondes if [ $difference -lt $threshold ]; then curl -u "$username:$password" -H "Title: HTTPS Certificats" -H "ta:closed_lock_with_key" -d "*.jingoh.fr Less than 20 days" https://alert.jingoh.fr/{{ alerts_ssl }} fi elif [ "$parametre" = "backup_git" ]; then docker exec -u git -w /data/ gitea gitea dump -c /data/gitea/conf/app.ini mv /opt/dockerapps/appdata/gitea/gitea/gitea-dump-*.zip /opt/dockerapps/backup/ docker exec gitea-db pg_dump -U root gitea > gitea-db-pg.sql mv ./gitea-db-pg.sql /opt/dockerapps/backup/ curl -u "$username:$password" -H "Title: Backup gitea" -H "ta:inbox_tray" -d "Local Backup gitea done !" https://alert.jingoh.fr/{{ alerts_backup_gitea }} elif [ "$parametre" = "backup_vault" ]; then docker run --rm --volumes-from=vault -e UID=0 -e BACKUP_DIR=/data/backup -e TIMESTAMP=true -e ENCRYPTION_PASSWORD="$VAULT" bruceforce/vaultwarden-backup manual curl -u "$username:$password" -H "Title: Backup vault" -H "ta:inbox_tray" -d "Local Backup vault done !" https://alert.jingoh.fr/{{ alerts_backup_vault }} elif [ "$parametre" = "cpu" ]; then [ "$(echo "$(ps -eo %cpu --sort=-%cpu | awk 'NR>1 { sum += $1 } END { print sum }') > $(nproc) * 50" | bc)" -eq 1 ] && curl -u "$username:$password" -H "Title: CPU `nproc` cores" -H "ta:warning" -d "High usage `ps -eo %cpu --sort=-%cpu | awk 'NR>1 { sum += $1 } END { print sum }'`" https://alert.jingoh.fr/{{ alerts_cpu }} else echo "Paramètre invalide : Utilisez [storage|load|ping|health|ssl|backup_git|backup_vault|cpu]" fi