1

Я отслеживал счетчики производительности, такие как память, свободный диск и т. Д. С использованием пользовательских показателей CloudWatch. Могу ли я контролировать службы с помощью CloudWatch? Я проверил функции, которые наблюдали за облачными часами, но не нашел ничего, что связано с службами мониторинга. Мне просто нужно контролировать, работает ли служба или нет, и отправлять уведомление при изменении состояния службы.Службы мониторинга экземпляра EC2 Windows с использованием AWS CloudWatch

ответ

3

Да, но из готовых решений, таких как EC2Config Windows Integration, вы упомянули, что они не так легко доступны для пользовательских показателей уровня обслуживания.

CloudWatch Custom Metrics позволяет расширить CloudWatch с помощью ваших собственных определенных показателей и данных, чтобы вы могли разумно реализовать их сами, чтобы контролировать свои собственные услуги. Ваша служба может записывать данные показателей в CloudWatch самостоятельно, или вы можете написать другой процесс, который отслеживает вашу службу и записывает показатели на основе ответов вашей службы на CloudWatch.


За ваши изменения, публиковать CloudWatch пользовательских метрик для произвольного набора услуг окон потребуют некоторые окон специфичных для PowerShell, потому что мы не можем предположить, что услуга будет иметь веб конечной точку для пинга.

Вы хотите создать сервис-монитор, который оценивает ваши услуги с помощью Get-Service, а затем публикует точку данных для пользовательских показателей CloudWatch, если они запущены.

Вот пример реализации в PowerShell, который будет писать настраиваемые показатели для служб с именем, соответствующим *YOURSERVICENAMESHERE* каждые 300 секунд. Если вы хотите запустить это для каждой службы экземпляра EC2, вы можете заменить ее на подстановочный знак *, но это может быть дорогостоящим по шкале. Также может потребоваться некоторая настройка, если на коробке слишком много сервисов, потому что вы можете отправлять только столько показателей за один раз через Write-CwMetricData. Подробнее см. Комментарии к коду.

Создав только точку данных успеха, вы устанавливаете условие «сбоя» (INSUFFICIENT_DATA в течение X секунд), которое вы можете использовать для создания аварийных сигналов CloudWatch, которые удовлетворяют вашему уведомлению.

Этот скрипт должен быть запущен на экземпляре Windows, EC2 с AWS Tools for PowerShell установлен и настроен:

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 
} 

Сохранить это в файл, и вы можете запустить его из командной строки, чтобы начать писать метрики. Как только вам станет комфортно, не стесняйтесь, чтобы выровнять цикл «while true» для запланированной задачи или задания powershell.

Дополнительные ресурсы:

+0

Мое требование не слишком сложно. Он должен просто контролировать, работает ли служба или нет.Таким образом, он должен контролировать все службы в столбце Services экземпляра ec2. И еще одна вещь, я сделал это для экземпляров Windows. – prudhvi

+0

Я изменил мой вопрос. Пожалуйста, проверьте это. – prudhvi

+0

@prudhvi Ваше изменение не меняет мой ответ; для достижения этой цели CloudWatch вам потребуется либо найти сторонний монитор, который публикует пользовательские показатели CloudWatch, либо написать монитор службы, который публикует пользовательские показатели CloudWatch. Связанной документации должно быть достаточно для начала работы. –