วิธีที่ง่ายที่สุดในการตรวจสอบพื้นที่ดิสก์ EC2 โดยอัตโนมัติและได้รับการแจ้งเตือนว่ามีพื้นที่เหลือน้อยหรือไม่


25

เรียกใช้ Amazon Linux AMI ดูเหมือนว่า CloudWatch จะไม่ตรวจสอบพื้นที่ว่างในดิสก์ ฉันมีเซิร์ฟเวอร์จำนวนหนึ่งและไม่ต้องการกำหนดค่าแต่ละเซิร์ฟเวอร์เซิร์ฟเวอร์เมลสคริปต์ตรวจสอบพื้นที่ดิสก์เป็นต้น

มีวิธีที่ง่ายกว่านี้หรือไม่?

คำตอบ:


13

Amazon จัดหาสคริปต์สำหรับสิ่งนี้เมื่อเดือนมีนาคม 2012:

สคริปต์การตรวจสอบ Amazon CloudWatch สำหรับ Linux : http://aws.amazon.com/code/8720044071969977


สคริปต์ดูค่อนข้างตรงไปตรงมา สิ่งที่ฉันกังวลก็คือต้องใช้รหัสลับและรหัสลับของ AWS ไม่มีใครรู้ว่ามันจะดูในบทบาทอินสแตนซ์ EC2 เพื่อรับคู่ชั่วคราวหรือถ้าฉันจะต้องรหัสด้วยตัวเอง?
sergiopereira

เพื่อตอบคำถามของฉันเอง ใช่ สคริปต์จะใช้บทบาท IAM ของอินสแตนซ์ EC2 (ถ้ามี) การดักจับคือบทบาทที่คุณเลือกต้องมีสิทธิ์ CloudWatch ที่จำเป็น
sergiopereira

5

ไม่มีวิธีใดที่เครื่องมือควบคุมและตรวจสอบ EC2 จะให้ข้อมูลนี้แก่คุณเนื่องจากระบบไฟล์ของอินสแตนซ์ของคุณสามารถเข้าถึงได้โดยอินสแตนซ์เท่านั้น ทั้งสถาปัตยกรรมพื้นฐานของฮาร์ดแวร์และโมเดลความปลอดภัยต้องการข้อ จำกัด นี้ ลองคิดดูว่ามันจะแย่แค่ไหนหากซอฟต์แวร์ที่อยู่นอกคอมพิวเตอร์ของคุณสามารถเปิดไฟล์ต่าง ๆ ในฮาร์ดไดรฟ์ของคุณ

นี่เป็นวิธีการที่ต่ำในการสร้าง cron (ติดตั้งในระบบส่วนใหญ่แล้ว) ตรวจสอบข้อมูลนี้ของคุณเป็นระยะ ระบบของคุณควรมีข้อกำหนดขั้นต่ำในการจัดการการแจ้งเตือนของอีเมลหลัก ฉันแนะนำให้มีเอเจนต์เมลขาออกที่เป็นรูปธรรมอย่างน้อยและตั้งค่ารูตหรือชื่อแทนของผู้ดูแลระบบเพื่อส่งต่อให้คุณในทุกระบบที่คุณดูแล หลายโปรแกรมรวมถึงcronคาดว่าการกำหนดค่านี้

คุณสามารถเพิ่มสิ่งนี้ลงใน crontab ของคุณ:

0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"

เพื่อทำลายมันลงมาสิ่งนี้

  • สร้างงานที่อักษรรูนวันละครั้งเวลา 00:00 น
  • Cron จะจัดการการส่งอีเมลของผู้ดูแลระบบโดยอัตโนมัติด้วยผลลัพธ์ของงาน งานนี้จะสร้างเอาต์พุตเฉพาะเมื่อมีข้อผิดพลาดหรือหากพื้นที่ดิสก์เหลือน้อย
  • testชุดคำสั่งขึ้นมาเปรียบเทียบเปลือกเรียบง่ายใช้-ltเวลาน้อยกว่าผู้ประกอบการและ equivolent ค่าคงที่เพื่อเพิ่มพื้นที่ว่าง 1Gb
  • dfคำสั่งการทดสอบพื้นที่ว่างบน/ระบบไฟล์
  • grepทำให้คุณได้รับเพียงแค่เส้นของการส่งออกที่คุณต้องการแทนส่วนหัวdfรวมถึง
  • awkรับเพียงคอลัมน์ที่สี่ในการส่งออกจำนวนพื้นที่ว่าง
  • การ&&แจ้งให้เรียกใช้คำสั่งถัดไปหากคำสั่งแรก (the test x -lt y) ส่งคืนค่าจริง

4

ฉันเขียนสคริปต์เนื่องจากฉันต้องการตรวจสอบเซิร์ฟเวอร์หลายตัวในกลุ่ม EC2 ของฉัน มันต้องการไฟล์ที่มีรายชื่อเซิร์ฟเวอร์ IP / ชื่อโดเมนแต่ละรายการในบรรทัดเดียว

#! /bin/bash

ADMIN="serveralerts@youraddress.com"
ALERT=85

for SERVER in `cat ~/scripts/servers.txt` do
ssh -i ~/.ssh/yourkey.pem $SERVER df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
echo $output
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $SERVER as on $(date)" | 
mail -s "Alert: Almost out of disk space $usep" $ADMIN
fi
done done

2
"Amazon CloudWatch Monitoring Scripts สำหรับ Linux" สามารถผลักการใช้งานดิสก์ลงใน CloudWatch เป็นตัวชี้วัดที่กำหนดเอง docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall

@ LaurionBurchall โปรดระบุว่าเป็นคำตอบ IMO ที่เป็นคำตอบที่ถูกต้องเนื่องจากให้ความสามารถในการใช้การแจ้งเตือน CloudWatch
โจคงที่



0

Cron เป็นเพื่อนของคุณ ใส่ไฟล์นี้ลงใน ไดเรกทอรี/etc/cron.dailyของคุณและมันจะทำงานวันละครั้ง:

#!/bin/sh
# this script is /etc/cron.daily/diskAlert.cron    
ADMIN="jdoe@maildomain.com"
ALERT=90    
df -PkH | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output;
do
  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
  partition=$(echo $output | awk '{print $2}' )
  if [ $usep -ge $ALERT ]; then
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" |
    mail -s "Alert: Almost out of disk space $usep%" $ADMIN
  fi
done

หมายเหตุ: สคริปต์นี้จะบอกว่าซีดีรอมที่เมาท์เต็มแล้ว


0

นี่เป็นสคริปต์ PowerShell ฉบับย่อที่ฉันเขียนซึ่งทำงานบน DC ของเราใน AWS และส่งอีเมลไปยังกลุ่มผู้รับหากไดรฟ์เต็ม มันใช้ csv ที่มี 2 คอลัมน์ - ชื่อหนึ่งชื่อกับชื่อคอมพิวเตอร์และหนึ่งไดรฟ์ที่มีชื่ออักษรชื่อไดรฟ์ เราไม่มีเมลเซิร์ฟเวอร์ในสภาพแวดล้อม AWS ของเราดังนั้นฉันจึงกำหนดค่าให้ส่งผ่าน SES นอกจากนี้คุณยังสามารถปรับเปลี่ยนสคริปต์เล็กน้อยเพื่อส่งรายงานทุกครั้งที่มีการใช้งานไดรฟ์หากคุณต้องการ แค่คิดว่าฉันจะโพสต์สิ่งนี้ที่นี่เนื่องจากโซลูชั่นทั้งหมดที่ฉันพบมีไว้สำหรับอินสแตนซ์ของ Linux

$CSVPath = "c:\Scripts\computerNames.csv"
$computerName = new-object System.Data.DataSet
$computerName = Import-CSV $CSVPath
$AwsUn = "" 
$AwsPw = ConvertTo-SecureString "" -AsPlainText -Force

$cred = New-Object -typename System.Management.Automation.PSCredential -ArgumentList $AwsUn, $AwsPw

Foreach($name in $computerName)
{

    $dl = $name.drive

    $Utilization = Get-WmiObject win32_Volume -ComputerName $name.computerName -Filter "DriveLetter = '$($dl)'"|   Foreach{ “{0:N2}” -f ((1-$_.FreeSpace / $_.Capacity)*100) } 

    if($Utilization -gt 90)
    {
        Send-MailMessage -From Sender to Recipients -subject (
    "$($name.computerName) Disk utilization" )-Body "The $dl drive on the AWS instance $($name.computerName) has $utilization% disk utilization.   Please log in and delete log files or contact the Network Operations team to increase the storage allocated to this instance"  -SmtpServer email-smtp.us-west-2.amazonaws.com -Credential $cred -useSSL -port 25
    } 


}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.