Script: Uppdatera minne automatiskt via CloudAPI

Forum för OpenVZ-relaterad diskussion
Kokarn
Inlägg: 2
Blev medlem: 13 dec 2011, 10:01
Kontakt:

Script: Uppdatera minne automatiskt via CloudAPI

Inläggav Kokarn » 13 dec 2011, 11:27

Igår fick jag lite inspiration av http://www.glesys.se/#popup_no12 där det är ett script som körs varje minut för att uppgradera servern till 2048 MB minne om loaden är över 90%.
Bra start för visso men den saknade vissa saker som jag kände att ett sådant script behövde, t.ex maila en administratör när en förändring görs och större frihet i hur den ändrar minnet.

Därför skrev jag ihop en egen, uppdaterad version av scriptet :)

OBS: Jag är inget bash pro så har ni kommentarer på förändringar eller generella synpunkter är det bara att posta dem!

Förbättringar
Stegvis uppdatering av minnet både uppåt och neråt. (Default 512 MB)
Mailar ut ett email till ett specificerat konto om att den ändrat minnet, från vad till vad och vad servern gav för response.

Krav
CloudVPS hos Glesys som körs på OpenVZ
Möjlighet att installera program på servern

Det första vi behöver göra är att se till att ni har sendmail installerat

Testa att skriva följande i terminalen

Kod: Markera allt

sendmail

Får du upp

Kod: Markera allt

Recipient names must be specified

borde det vara good to go, annars är det bara att installera.

Kod: Markera allt

sudo apt-get install sendmail


När det är klart är det dags att kopiera in scriptet i någon lämplig mapp, t.ex /home/*user*/ där *user* är en lämplig användare. I det här fallet använder vi användaren "test"

Kod: Markera allt

cd /home/test/
nano memchange.sh

och sen bara klistra in koden.

Innan scriptet kan köras är det två saker kvar, ändra scriptet och lägga till så att det körs automatiskt.

Börja med att edita scriptet och fylla i värdena i config så att dom innehåller vad dom ska.

t.ex

Kod: Markera allt

EMAIL="admin@example.com"
APIKEY="KZ59klX8puOBY4xM4EgG777v1XkjiB5naowTFu15";
ACCOUNTID="cl12345"


Dags att testa scriptet.
Detta görs genom att köra

Kod: Markera allt

./memchange.sh

Det "bör" inte ge någon output om det fungerar som det ska.

Därefter är crontabs tur.

Kod: Markera allt

nano /etc/crontab


Där ska du skriva in någonting i stil med följande

Kod: Markera allt

* *     * * * test /usr/test/memchange.sh

för att det ska köras varje minut.

När det är gjort så ska det inte vara några problem alls.


Versioner
0.1.0 (13/12 -11)
    Första versionen
0.2.0 (16/12 -11)
    Dynamiska INCREMENTS för att passa Glesys tillåtna värden (otestat)
    Debug mode för att ge lite bättre output i command-line

Hela scriptet. Kopiera och kör :)

Kod: Markera allt

#!/bin/bash
# START CONFIG

#MANUAL CONFIG
EMAIL=""
APIKEY="";
ACCOUNTID=""
DEBUG=false
#END MANUAL CONFIG

#OTHER CONFIG
MAXLOAD=90
MINLOAD=50
SERVERID=`cat /proc/vz/veinfo | awk '{print $1}'`
HOSTNAME=`/usr/bin/curl -s -X POST -d serverid=vz$SERVERID -k --basic -u $ACCOUNTID:$APIKEY https://api.glesys.com/server/details/format/json | grep -Poe 'hostname":"(.+?)"' | cut -d \" -f 3`
#END CONFIG

TOTAL=`free | grep Mem: | awk '{print $2}'`
USED=`free | grep Mem: | awk '{print $3}'`
PERCENTAGE=$(((USED*100)/TOTAL));

#SET INCREMENT
if [ $TOTAL -gt "4000000" ]
then
   INCREMENTS=1048576
elif [ $TOTAL -gt "1000000" ]
then
   INCREMENTS=524288
elif [ $TOTAL -gt "500000" ]
then
   INCREMENTS=262144
else
   INCREMENTS=131072
fi
#END SET INCREMENT

function setmem {
        NEW=$(($NEW/1024))
   TMPINCREMENTS=$(($INCREMENTS/1024))
        /usr/bin/curl -s -X POST -d serverid=vz$SERVERID\&memorysize=$NEW -k --basic -u $ACCOUNTID:$APIKEY https://api.glesys.com/server/edit/ > result.txt
   RESULTCODE=`cat result.txt | grep code | grep -Po '([0-9]{3})'`
   RESULTTEXT=`cat result.txt | grep text | cut -d \> -f 2 | cut -d \< -f 1`
        MESSAGE="The server $HOSTNAME has changed its memory. The load was $PERCENTAGE% ($USED of $TOTAL used). Changed memory by $TMPINCREMENTS MB to $NEW MB. The server response: $RESULTCODE $RESULTTEXT."
   TMP="/tmp/tmpmail"
   rm -rf $TMP
   echo "From: server@$HOSTNAME" >> $TMP
   echo "To: $EMAIL" >> $TMP
   echo "Subject: Server memory change" >> $TMP
   echo "" >> $TMP
   echo $MESSAGE >> $TMP;
   cat $TMP | sendmail -t $TMP
   rm $TMP
}

if [ $PERCENTAGE -gt $MAXLOAD ];
then
   NEW=$(($TOTAL+$INCREMENTS))
   if $DEBUG
   then
      echo Memory usage greater than $MAXLOAD%. Increasing memory by $INCREMENTS from $TOTAL to $NEW
   else
      setmem
   fi
elif [ $PERCENTAGE -lt $MINLOAD ];
then
   NEW=$(($TOTAL-$INCREMENTS))
   if $DEBUG
   then
      echo Memory usage less then $MINLOAD%. Decreasing memory by $INCREMENTS from $TOTAL to $NEW
   else
      setmem
   fi
fi

if $DEBUG
then
   echo Current load: $PERCENTAGE%. Total: $TOTAL. Increments: $INCREMENTS
fi

LilleCarl
Inlägg: 2
Blev medlem: 02 jul 2012, 16:32

Re: Script: Uppdatera minne automatiskt via CloudAPI

Inläggav LilleCarl » 02 jul 2012, 16:53

Hur får jag fram en apikey? Blev verkligen intresserad av detta! Skulle förenkla massor för mig!

Kokarn
Inlägg: 2
Blev medlem: 13 dec 2011, 10:01
Kontakt:

Re: Script: Uppdatera minne automatiskt via CloudAPI

Inläggav Kokarn » 02 jul 2012, 18:58

Om du loggar in i kontrollpanelen, klickar på "API (Beta)" och sen API-nycklar så kan du skapa egna.

Detta gäller dock bara om du har GleSys API aktiverat.

För att aktivera det är det bara att dra ett mail till support@glesys.se om att du vill vara med som betatestare.


Återgå till "OpenVZ"

Vilka är online

Användare som besöker denna kategori: 1 och 0 gäst