답변:
Amazon은 2012 년 3 월 기준으로이를위한 스크립트를 제공합니다.
Linux 용 Amazon CloudWatch 모니터링 스크립트 : 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
보다 작은 연산자와 1Gb 여유 공간에 해당하는 고정 값을 사용하여 간단한 셸 비교를 설정합니다 .df
명령은 /
파일 시스템의 여유 공간을 테스트 합니다.grep
당신에게 출력 단지 라인을 얻는 대신 헤더의 필요 df
포함되어 있습니다.awk
GET 출력에서 바로 네 번째 열, 자유 공간 번호입니다.&&
첫 번째합니다 (이 경우에만 다음 명령을 실행 말한다 test x -lt y
)가 true를 반환합니다.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
CloudWatch를 사용하여 EC2 인스턴스에서이를 설정하기위한 단계별 지침 :
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts.html
크론은 당신의 친구입니다. 이 파일을 /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
참고 :이 스크립트는 마운트 된 CDROM이 가득 찼습니다.
이것은 내가 작성한 DC의 빠른 PowerShell 스크립트이며 AWS의 DC에서 실행되며 드라이브가 가득 찬 경우 수신자 그룹에게 이메일을 발송합니다. 두 개의 열이있는 csv가 필요합니다. 하나는 컴퓨터 이름을 가진 제목 이름과 하나는 드라이브 문자를 가진 제목 드라이브입니다. 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
}
}