เรียกใช้ Amazon Linux AMI ดูเหมือนว่า CloudWatch จะไม่ตรวจสอบพื้นที่ว่างในดิสก์ ฉันมีเซิร์ฟเวอร์จำนวนหนึ่งและไม่ต้องการกำหนดค่าแต่ละเซิร์ฟเวอร์เซิร์ฟเวอร์เมลสคริปต์ตรวจสอบพื้นที่ดิสก์เป็นต้น
มีวิธีที่ง่ายกว่านี้หรือไม่?
เรียกใช้ Amazon Linux AMI ดูเหมือนว่า CloudWatch จะไม่ตรวจสอบพื้นที่ว่างในดิสก์ ฉันมีเซิร์ฟเวอร์จำนวนหนึ่งและไม่ต้องการกำหนดค่าแต่ละเซิร์ฟเวอร์เซิร์ฟเวอร์เมลสคริปต์ตรวจสอบพื้นที่ดิสก์เป็นต้น
มีวิธีที่ง่ายกว่านี้หรือไม่?
คำตอบ:
Amazon จัดหาสคริปต์สำหรับสิ่งนี้เมื่อเดือนมีนาคม 2012:
สคริปต์การตรวจสอบ Amazon CloudWatch สำหรับ Linux : http://aws.amazon.com/code/8720044071969977
ไม่มีวิธีใดที่เครื่องมือควบคุมและตรวจสอบ EC2 จะให้ข้อมูลนี้แก่คุณเนื่องจากระบบไฟล์ของอินสแตนซ์ของคุณสามารถเข้าถึงได้โดยอินสแตนซ์เท่านั้น ทั้งสถาปัตยกรรมพื้นฐานของฮาร์ดแวร์และโมเดลความปลอดภัยต้องการข้อ จำกัด นี้ ลองคิดดูว่ามันจะแย่แค่ไหนหากซอฟต์แวร์ที่อยู่นอกคอมพิวเตอร์ของคุณสามารถเปิดไฟล์ต่าง ๆ ในฮาร์ดไดรฟ์ของคุณ
นี่เป็นวิธีการที่ต่ำในการสร้าง cron (ติดตั้งในระบบส่วนใหญ่แล้ว) ตรวจสอบข้อมูลนี้ของคุณเป็นระยะ ระบบของคุณควรมีข้อกำหนดขั้นต่ำในการจัดการการแจ้งเตือนของอีเมลหลัก ฉันแนะนำให้มีเอเจนต์เมลขาออกที่เป็นรูปธรรมอย่างน้อยและตั้งค่ารูตหรือชื่อแทนของผู้ดูแลระบบเพื่อส่งต่อให้คุณในทุกระบบที่คุณดูแล หลายโปรแกรมรวมถึงcron
คาดว่าการกำหนดค่านี้
คุณสามารถเพิ่มสิ่งนี้ลงใน crontab ของคุณ:
0 0 * * * test $(df / | grep ^/ | awk '{print $4}') -lt 1048576 && echo "Warning: Free disk space is less than 1G on /"
เพื่อทำลายมันลงมาสิ่งนี้
test
ชุดคำสั่งขึ้นมาเปรียบเทียบเปลือกเรียบง่ายใช้-lt
เวลาน้อยกว่าผู้ประกอบการและ equivolent ค่าคงที่เพื่อเพิ่มพื้นที่ว่าง 1Gbdf
คำสั่งการทดสอบพื้นที่ว่างบน/
ระบบไฟล์grep
ทำให้คุณได้รับเพียงแค่เส้นของการส่งออกที่คุณต้องการแทนส่วนหัวdf
รวมถึงawk
รับเพียงคอลัมน์ที่สี่ในการส่งออกจำนวนพื้นที่ว่าง&&
แจ้งให้เรียกใช้คำสั่งถัดไปหากคำสั่งแรก (the test x -lt y
) ส่งคืนค่าจริงฉันเขียนสคริปต์เนื่องจากฉันต้องการตรวจสอบเซิร์ฟเวอร์หลายตัวในกลุ่ม 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
คำแนะนำทีละขั้นตอนสำหรับการตั้งค่านี้บนอินสแตนซ์ EC2 ด้วย CloudWatch:
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html
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
หมายเหตุ: สคริปต์นี้จะบอกว่าซีดีรอมที่เมาท์เต็มแล้ว
นี่เป็นสคริปต์ 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
}
}