gpt4 book ai didi

amazon-web-services - 使用 AWS CloudWatch 监控 EC2 Windows 实例的服务

转载 作者:行者123 更新时间:2023-12-04 12:48:48 25 4
gpt4 key购买 nike

我使用 CloudWatch 自定义指标监控性能计数器,例如内存、可用磁盘等。我可以使用 CloudWatch 监控服务吗?我检查了云 watch 监控的功能,但没有发现与监控服务相关的内容。我只需要监控服务是否正在运行,并在服务状态发生变化时发送通知。

最佳答案

是的,但开箱即用的解决方案,如 EC2Config Windows Integration您提到的服务级别自定义指标并不那么容易获得。

CloudWatch 自定义指标允许您使用自己定义的指标和数据扩展 CloudWatch,因此您可以自己合理地实现它们以监控您自己的服务。您的服务可以将指标数据写入 CloudWatch 本身,或者您可以编写另一个进程来监控您的服务并根据您的服务对 CloudWatch 的响应写入指标。


根据您的编辑,为任意一组 Windows 服务发布 CloudWatch 自定义指标将需要一些特定于 Windows 的 powershell,因为我们不能假设该服务将具有要 ping 的 Web 端点。

您需要创建一个服务监控器,通过 Get-Service 评估您的服务,然后将数据点发布到 CloudWatch 自定义指标(如果它们正在运行)。

这是 PowerShell 中的一个示例实现,它将每 300 秒为名称匹配 *YOURSERVICENAMESHERE* 的服务编写自定义指标。如果您想为 EC2 实例上的每项服务 运行它,您可以将其替换为通配符 *,但这在规模上可能会很昂贵。如果盒子上有太多服务,它可能还需要进行一些调整,因为您一次只能通过 Write-CwMetricData 发送这么多指标。有关详细信息,请参阅代码注释。

通过仅创建成功数据点,您可以建立一个“失败”条件(INSUFFICIENT_DATA 持续 X 秒),您可以使用该条件创建满足您的通知约束的 CloudWatch 警报。

此脚本必须在带有 AWS Tools for PowerShell 的 Windows EC2 实例上运行安装和配置:

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
}

将其保存到一个文件中,您可以从命令行运行它以开始编写指标。一旦您对它感到满意,就可以随意放弃计划任务或 powershell 作业的“while true”循环。

其他资源:

关于amazon-web-services - 使用 AWS CloudWatch 监控 EC2 Windows 实例的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com