Introduzione

Nel panorama dell'infrastruttura cloud, monitorare lo stato e le risorse delle istanze EC2 è essenziale. Una sfida comune per gli amministratori di sistema è garantire che lo spazio su disco non si esaurisca, il che può portare a degrado delle prestazioni o interruzioni del servizio. Sebbene AWS fornisca strumenti di monitoraggio robusti come CloudWatch, possono comportare costi e complessità aggiuntivi, specialmente per configurazioni più piccole o meno complesse.

In questo articolo, esploreremo una soluzione semplice ed economica utilizzando uno script Bash che viene eseguito come cron job sulle tue istanze EC2. Questo script controllerà l'utilizzo del disco sull'istanza e, se supera una soglia definita, invierà un avviso a un canale Slack. Questo metodo richiede una configurazione minima, nessuno strumento di monitoraggio esterno e mantiene bassi i costi.


Perché Hai Bisogno del Monitoraggio del Disco?

I problemi di spazio su disco vengono spesso trascurati fino a quando non portano a problemi come:

  • Guasti dell'Applicazione: Le applicazioni o i servizi potrebbero fallire quando lo spazio su disco è insufficiente per il logging, la scrittura di dati o i file temporanei.
  • Degrado delle Prestazioni: Lo spazio su disco ridotto può causare lentezza del sistema, specialmente per i servizi che dipendono fortemente dalle operazioni di lettura/scrittura.
  • Downtime: I sistemi critici potrebbero arrestarsi se i processi essenziali non possono funzionare a causa di dischi pieni.

La Soluzione con Script Bash

Ecco la soluzione utilizzando uno script Bash e un webhook Slack. Lo script controlla l'utilizzo del disco del volume root (/) e invia un avviso a un canale Slack se l'utilizzo supera una soglia definita. Include anche informazioni come hostname, IP privato e IP pubblico dell'istanza EC2 per aiutare a identificare rapidamente l'istanza interessata.

#!/bin/bash

THRESHOLD=85 # Definisce la soglia di utilizzo del disco (in %) SLACK_WEBHOOK_URL=“https://hooks.slack.com/services/your/webhook/url"

Ottieni i metadati EC2 per hostname, IP pubblico e IP privato

hostname=$(curl -s http://169.254.169.254/latest/meta-data/local-hostname) public_ip=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4) private_ip=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)

Controlla l’uso dello spazio disco per la directory root

disk_usage=$(df -h / | grep -v Filesystem | awk ‘{print $5}’ | sed ’s/%//’)

if [ “$disk_usage” -ge “$THRESHOLD” ]; then message=“Utilizzo del disco sull’istanza EC2 ‘${hostname}’ al ${disk_usage}%. \nIP Privato: ${private_ip} \nIP Pubblico: ${public_ip}. \nEstendere lo spazio disco!”

payload=”{’text’: ‘$message’}" curl -X POST -H ‘Content-type: application/json’ –data “$payload” $SLACK_WEBHOOK_URL fi

Pro e Contro

Pro:

  1. Economico: Nessun costo aggiuntivo per servizi come CloudWatch.
  2. Semplice e Leggero: Usa strumenti nativi (Bash, curl, cron) disponibili su quasi tutti i sistemi Linux.
  3. Notifiche Immediate: Slack assicura che il team riceva avvisi in tempo reale.

Contro:

  1. Nessun Monitoraggio Centralizzato: Lo script gira su singole istanze, nessuna dashboard centralizzata.
  2. Manutenzione: Con molte istanze EC2, devi distribuire e mantenere lo script su tutte.

Conclusione

Questo script Bash offre una soluzione semplice ed economica per monitorare lo spazio disco EC2 e inviare avvisi a Slack quando l'uso del disco supera una soglia critica. È un'ottima soluzione per organizzazioni o progetti che non necessitano della complessità e dei costi associati ad AWS CloudWatch o altri strumenti di monitoraggio completi.