EC2 디스크 공간을 자동으로 확인하고 공간이 부족한 경우 경고하는 가장 쉬운 방법은 무엇입니까?


25

Amazon Linux AMI 실행 CloudWatch가 디스크 여유 공간을 확인하지 않는 것 같습니다. 나는 많은 서버를 가지고 있으며 이상적으로 메일 서버, 디스크 공간을 확인하는 스크립트 등으로 각 서버를 구성하고 싶지 않습니다.

더 간단한 방법이 있습니까?

답변:


13

Amazon은 2012 년 3 월 기준으로이를위한 스크립트를 제공합니다.

Linux 용 Amazon CloudWatch 모니터링 스크립트 : http://aws.amazon.com/code/8720044071969977


스크립트는 상당히 직설적으로 보입니다. 저를 걱정하는 것은 알려진 AWS 액세스 키와 비밀 쌍이 필요하다는 것입니다. 누구든지 EC2 인스턴스 역할을 통해 임시 페어를 얻거나 직접 코딩해야하는지 알고 있습니까?
sergiopereira 2016 년

내 자신의 질문에 대답합니다. 예! 스크립트는 EC2 인스턴스의 IAM 역할 (있는 경우)을 사용합니다. 선택한 역할에는 필요한 CloudWatch 권한이 있어야합니다.
sergiopereira 2016 년

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보다 작은 연산자와 1Gb 여유 공간에 해당하는 고정 값을 사용하여 간단한 셸 비교를 설정합니다 .
  • df명령은 /파일 시스템의 여유 공간을 테스트 합니다.
  • grep당신에게 출력 단지 라인을 얻는 대신 헤더의 필요 df포함되어 있습니다.
  • awkGET 출력에서 바로 네 번째 열, 자유 공간 번호입니다.
  • &&첫 번째합니다 (이 경우에만 다음 명령을 실행 말한다 test x -lt y)가 true를 반환합니다.

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
"Linux 용 Amazon CloudWatch 모니터링 스크립트"는 디스크 사용량을 사용자 지정 지표로 CloudWatch에 푸시 할 수 있습니다. docs.amazonwebservices.com/AmazonCloudWatch/latest/…
Laurion Burchall

@LaurionBurchall 그 답을 넣으십시오. CloudWatch 알림을 사용하는 기능을 제공하므로 정답 인 IMO입니다.
Joe Constant



0

크론은 당신의 친구입니다. 이 파일을 /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이 가득 찼습니다.


0

이것은 내가 작성한 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
    } 


}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.