1

CloudWatch 사용자 지정 메트릭을 사용하여 메모리, 여유 디스크 등의 성능 카운터를 모니터링했습니다. CloudWatch를 사용하여 서비스를 모니터링 할 수 있습니까? 나는 클라우드 감시 모니터 기능을 확인했지만 모니터링 서비스와 관련이없는 것을 발견했습니다. 서비스가 실행 중인지 여부를 모니터링하고 서비스 상태가 변경되면 알림을 보내면됩니다.AWS CloudWatch를 사용하여 EC2 Windows 인스턴스의 모니터링 서비스

답변

3

예를 들어, 언급 한 EC2Config Windows Integration과 같은 바로 사용 가능한 솔루션은 서비스 수준 맞춤 측정 항목에 대해 쉽게 사용할 수 없습니다.

CloudWatch 사용자 정의 메트릭을 사용하면 CloudWatch를 사용자 정의 된 메트릭 및 데이터로 확장 할 수 있으므로 사용자 자신의 서비스를 모니터하기 위해 합리적인 방법으로 구현할 수 있습니다. 서비스가 CloudWatch 자체에 메트릭 데이터를 쓰거나 서비스를 모니터링하는 다른 프로세스를 작성하고 서비스에서 CloudWatch에 대한 응답을 기반으로 메트릭을 작성할 수 있습니다. 우리는 서비스를 핑 (ping) 할 수있는 웹 엔드 포인트를한다고 가정 할 수 없기 때문에 편집 당


는 일부 창 특정 PowerShell을 필요로 Windows 서비스의 임의의 집합에 대한 CloudWatch를 맞춤 측정 항목을 게시합니다.

Get-Service을 통해 서비스를 평가하는 서비스 모니터를 만든 다음 데이터 포인트가 실행중인 경우 CloudWatch 사용자 지정 메트릭에 게시합니다.

다음은 3003 초마다 이름이 *YOURSERVICENAMESHERE* 인 서비스에 대한 사용자 지정 메트릭을 작성하는 PowerShell의 구현 예입니다. EC2 인스턴스의 모든 서비스에 을 실행하려면 와일드 카드 *으로 바꿀 수 있지만 규모면에서는 비쌉니다. Write-CwMetricData을 통해 한 번에 너무 많은 메트릭을 보낼 수 있기 때문에 상자에 너무 많은 서비스가있는 경우 약간의 조정이 필요할 수도 있습니다. 자세한 내용은 코드 주석을 참조하십시오.

성공했을 때만 데이터 포인트를 만들면 알림 제약 조건을 충족하는 CloudWatch Alarms를 만드는 데 사용할 수있는 '실패'조건 (X 초 동안 INSUFFICIENT_DATA)이 설정됩니다. 파일에

Param 
(
    [string]$Period = 300, 
    [string]$Namespace = 'service-monitor' 
) 

# Use the EC2 metadata service to get the host EC2 instance's ID 
$instanceId = (New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id") 

# Associate current EC2 instance with your custom cloudwatch metric 
$instanceDimension = New-Object -TypeName Amazon.CloudWatch.Model.Dimension; 
$instanceDimension.Name = "instanceid"; 
$instanceDimension.Value = $instanceId; 

# "Job" loop; write to CloudWatch and then sleep for the interval defined by the period variable above, in seconds. 
while($true) 
{ 
    $metrics = @(); 

    $runningServices = Get-Service -Name *YOURSERVICENAMESHERE* | ? { $_.Status -eq 'Running' } 

    # For each running service, add a metric to metrics collection that adds a data point to a CloudWatch Metric named 'Status' with dimensions: instanceid, servicename 
    $runningServices | % { 
     $dimensions = @(); 

     $serviceDimension = New-Object -TypeName Amazon.CloudWatch.Model.Dimension; 
     $serviceDimension.Name = "service" 
     $serviceDimension.Value = $_.Name; 

     $dimensions += $instanceDimension; 
     $dimensions += $serviceDimension; 

     $metric = New-Object -TypeName Amazon.CloudWatch.Model.MetricDatum; 
     $metric.Timestamp = [DateTime]::UtcNow; 
     $metric.MetricName = 'Status'; 
     $metric.Value = 1; 
     $metric.Dimensions = $dimensions; 

     $metrics += $metric;  

     Write-Host "Checking status for: $($_.Name)"   
    } 

    # Write all of the metrics for this run of the job at once, to save on costs for calling the CloudWatch API. 
    # This will fail if there are too many services in metrics collection; if this happens, just reduce the amount of 
    # services monitored, or edit this line into the above foreach loop and write each metric directly. 
    Write-CWMetricData -Namespace $Namespace -MetricData $metrics 

    Write-Host "Sleeping for $Period seconds." 

    Start-Sleep -s $Period 
} 

저장이를 당신은 서면으로 측정을 시작하기위한 명령 행에서 실행할 수 있습니다

이 스크립트

은 설치 및 구성 AWS Tools for PowerShell있는 Windows EC2 인스턴스에서 실행해야합니다. 일단 마음에 들지 않으면 예약 된 작업이나 PowerShell 작업에 대해 "while true"루프를 자유롭게 사용할 수 있습니다.

추가 자료 :

+0

내 요구 사항은 너무 복잡하지 않습니다. 서비스가 실행 중인지 여부를 모니터링해야합니다.그렇게하면 ec2 인스턴스의 Services 열에서 모든 서비스를 모니터링해야합니다. 그리고 한 가지 더요, 저는 Windows 인스턴스에서이 작업을 수행 할 것입니다. – prudhvi

+0

질문을 수정했습니다. 그것을 확인하시기 바랍니다. – prudhvi

+0

@prudhvi 수정하면 내 대답이 변경되지 않습니다. CloudWatch에서이를 달성하려면 CloudWatch 사용자 지정 메트릭을 게시하는 타사 모니터를 찾거나 CloudWatch 사용자 지정 메트릭을 게시하는 서비스 모니터를 작성해야합니다. 링크 된 문서는 시작하기에 충분해야합니다. –

관련 문제