Ontwikkel een Bash of PowerShell Script voor Geautomatiseerde Server Resource Scaling
description
Met deze prompt kun je een script ontwikkelen dat dynamisch resources schaalt om serverprestaties te optimaliseren en kosten te besparen. Het voorkomt handmatige interventie en helpt overbelasting of onderbenutting te voorkomen. Het is een innovatieve aanpak die niet overlapt met bestaande scripts voor onderhoud, monitoring of foutafhandeling.
prompt
Help me een Bash of PowerShell script te maken dat automatisch server resources schaalt op basis van real-time gebruiksdata. Welke resources wil ik schalen (bijvoorbeeld CPU, geheugen, schijfruimte): <voer de te schalen resources in> D ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat automatisch CPU- en geheugengebruik monitort en schaalt op basis van de opgegeven drempelwaarden. Dit script logt alle schaalacties naar /var/log/resource_scaling.log.
Let op: Dit script is een basisvoorbeeld. Voor productiegebruik moet je het aanpassen aan jouw infrastructuur en schaalmechanismen (bijvoorbeeld via cloudprovider API's of andere tools).
```bash
#!/bin/bash
# Configuratie
LOGFILE="/var/log/resource_scaling.log"
CPU_UPPER_THRESHOLD=75
CPU_LOWER_THRESHOLD=40
MEM_UPPER_THRESHOLD=75
MEM_LOWER_THRESHOLD=40
MAX_RESOURCES=10 # pas aan naar jouw maximum
MIN_RESOURCES=1 # pas aan naar jouw minimum
CURRENT_RESOURCES=3 # startwaarde, pas aan naar jouw situatie
# Functie om CPU gebruik te meten
get_cpu_usage() {
mpstat 1 1 | awk '/Average/ {print 100 - $12}'
}
# Functie om geheugen gebruik te meten
get_memory_usage() {
free -m | awk '/Mem/ {print ($3 / $2) * 100}'
}
# Schaaltaken
scale_up() {
if [ "$CURRENT_RESOURCES" -lt "$MAX_RESOURCES" ]; then
CURRENT_RESOURCES=$((CURRENT_RESOURCES + 1))
echo "$(date): Opschaling uitgevoerd. Aantal resources: $CURRENT_RESOURCES" >> "$LOGFILE"
# Voeg hier de commando's toe om resources te schalen
# Bijvoorbeeld: start een nieuwe VM, verhoog aantal containers, etc.
fi
}
scale_down() {
if [ "$CURRENT_RESOURCES" -gt "$MIN_RESOURCES" ]; then
CURRENT_RESOURCES=$((CURRENT_RESOURCES - 1))
echo "$(date): Afschaling uitgevoerd. Aantal resources: $CURRENT_RESOURCES" >> "$LOGFILE"
# Voeg hier de commando's toe om resources te schalen
# Bijvoorbeeld: stop een VM, verlaag aantal containers, etc.
fi
}
# Main monitoring loop
while true; do
cpu_usage=$(get_cpu_usage)
mem_usage=$(get_memory_usage)
echo "$(date): CPU gebruik: $cpu_usage%, Geheugen gebruik: $mem_usage%" >> "$LOGFILE"
# Check voor opschaling
if (( $(echo "$cpu_usage > $CPU_UPPER_THRESHOLD" | bc -l) )) || (( $(echo "$mem_usage > $MEM_UPPER_THRESHOLD" | bc -l) )); then
scale_up
# Check voor afschaling
elif (( $(echo "$cpu_usage < $CPU_LOWER_THRESHOLD" | bc -l) )) && (( $(echo "$mem_usage < $MEM_LOWER_THRESHOLD" | bc -l) )); then
scale_down
fi
sleep 60 # wacht 60 seconden voordat opnieuw meten
done
```
**Belangrijke opmerkingen:**
- Pas de variabelen `MAX_RESOURCES`, `MIN_RESOURCES` en `CURRENT_RESOURCES` aan op jouw situatie.
- De schaalcommando's (`scale_up`, `scale_down`) moeten worden ingevuld met de juiste acties voor jouw infrastructuur (bijv. via cloud API's, containerbeheer, etc.).
- Het script draait continu in een loop; je kunt het als een service of achtergrondproces instellen.
- Zorg dat je de juiste rechten hebt om het script uit te voeren en te schrijven naar het logbestand.
Wil je een PowerShell-versie of verdere specificaties?
provider: deepseek
model: deepseek-chat
Hier is een PowerShell script dat voldoet aan uw vereisten:
```powershell
# resource_scaling.ps1
# Script voor automatisch schalen van CPU en geheugen op basis van gebruik
# Configuratie
$LogFile = "/var/log/resource_scaling.log"
$ScaleUpThreshold = 75 # Opschalen boven 75%
$ScaleDownThreshold = 40 # Afschalen onder 40%
$MaxResources = 10 # Maximum aantal resources
$MinResources = 1 # Minimum aantal resources
# Functie om te loggen
function Write-Log {
param([string]$Message)
$Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$Timestamp - $Message" | Out-File -FilePath $LogFile -Append
Write-Host $Message
}
# Functie om huidig resourcegebruik te controleren
function Get-ResourceUsage {
# CPU gebruik ophalen
$CPUUsage = (Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue
# Geheugengebruik ophalen
$MemoryUsage = (Get-Counter "\Memory\% Committed Bytes In Use").CounterSamples.CookedValue
return @{
CPU = [math]::Round($CPUUsage, 2)
Memory = [math]::Round($MemoryUsage, 2)
}
}
# Functie om huidig aantal resources te bepalen
function Get-CurrentResourceCount {
# Hier zou je de huidige schaaleenheden moeten ophalen
# Voorbeeld: aantal VM's, containers, of processen
return 2 # Vervang door echte implementatie
}
# Functie om resources op te schalen
function Scale-Up {
param([int]$CurrentCount)
if ($CurrentCount -ge $MaxResources) {
Write-Log "MAXIMUM BEREIKT: Kan niet verder opschalen (huidig: $CurrentCount, max: $MaxResources)"
return $CurrentCount
}
$NewCount = $CurrentCount + 1
Write-Log "OPSCHALEN: Van $CurrentCount naar $NewCount resources"
# Hier zou de daadwerkelijke opschaalactie plaatsvinden
# Bijvoorbeeld: nieuwe VM starten, container toevoegen, etc.
return $NewCount
}
# Functie om resources af te schalen
function Scale-Down {
param([int]$CurrentCount)
if ($CurrentCount -le $MinResources) {
Write-Log "MINIMUM BEREIKT: Kan niet verder afschalen (huidig: $CurrentCount, min: $MinResources)"
return $CurrentCount
}
$NewCount = $CurrentCount - 1
Write-Log "AFSCHALEN: Van $CurrentCount naar $NewCount resources"
# Hier zou de daadwerkelijke afschaalactie plaatsvinden
# Bijvoorbeeld: VM stoppen, container verwijderen, etc.
return $NewCount
}
# Hoofdlogica
try {
Write-Log "=== RESOURCE SCALING GESTART ==="
# Huidig gebruik ophalen
$Usage = Get-ResourceUsage
$CurrentResources = Get-CurrentResourceCount
Write-Log "Huidig gebruik - CPU: $($Usage.CPU)%, Geheugen: $($Usage.Memory)%"
Write-Log "Huidig aantal resources: $CurrentResources"
# Bepalen of schaling nodig is
$NeedsScaleUp = ($Usage.CPU -gt $ScaleUpThreshold) -or ($Usage.Memory -gt $ScaleUpThreshold)
$NeedsScaleDown = ($Usage.CPU -lt $ScaleDownThreshold) -and ($Usage.Memory -lt $ScaleDownThreshold)
# Schaalacties uitvoeren
if ($NeedsScaleUp) {
Write-Log "SCHAALBEHOEFTE: Opschaling nodig (gebruik boven $ScaleUpThreshold%)"
$CurrentResources = Scale-Up -CurrentCount $CurrentResources
}
elseif ($NeedsScaleDown) {
Write-Log "SCHAALBEHOEFTE: Afschaling nodig (gebruik onder $ScaleDownThreshold%)"
$CurrentResources = Scale-Down -CurrentCount $CurrentResources
}
else {
Write-Log "SCHAALBEHOEFTE: Geen actie nodig (gebruik binnen acceptabele range)"
}
Write-Log "=== RESOURCE SCALING VOLTOOID ==="
}
catch {
Write-Log "FOUT: $($_.Exception.Message)"
}
```
**Belangrijke opmerkingen:**
1. **Implementatie aanpassen**: De functies `Get-CurrentResourceCount`, `Scale-Up` en `Scale-Down` moeten worden aangepast aan uw specifieke omgeving (VM's, containers, cloud services).
2. **Uitvoeren als scheduled task**:
```powershell
# Maak een scheduled task aan die elke 5 minuten draait
$Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\pad\naar\resource_scaling.ps1"
$Trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask -TaskName "ResourceScaling" -Action $Action -Trigger $Trigger
```
3. **Vereiste rechten**: Zorg dat het script wordt uitgevoerd met administrator-rechten.
4. **Test eerst**: Test het script grondig in een testomgeving voordat u het in productie gebruikt.
Het script logt alle activiteiten naar `/var/log/resource_scaling.log` en volgt uw opgegeven drempelwaarden voor CPU en geheugen.