监控AWS CloudWatch for Windows实例中的内存使用情况

时间:2016-12-26 11:28:01

标签: amazon-web-services amazon-ec2 monitoring amazon-cloudwatch

默认情况下,CloudWatch不会监控内存使用情况。因此,我尝试使用these instructions将其添加到AWS中的Windows实例。

这就是我所做的:

  1. 我创建了一个名为custom-metrics-user的用户。然后我存储了访问权限和密钥。

  2. 我为用户创建并附加了内联策略。它看起来像这样:

    { 
      "Version": "2012-10-17", 
      "Statement": [ 
        { 
          "Effect": "Allow", 
          "Action": ["cloudwatch:PutMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "ec2:DescribeTags"], 
          "Resource": "*" 
        } 
      ] 
    }
    

  3. 我推出了Windows实例[2012 R2 Base AMI]。通过RDP访问实例后,我发现AWS.EC2.Windows.CloudWatch.json文件已存在。

  4. 我相应更改了.json文件。更改后,它看起来像这样:

    {
        "EngineConfiguration": {
            "PollInterval": "00:00:15",
            "Components": [
                {
                    "Id": "ApplicationEventLog",
                    "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "LogName": "Application",
                        "Levels": "1"
                    }
                },
                {
                    "Id": "SystemEventLog",
                    "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "LogName": "System",
                        "Levels": "7"
                    }
                },
                {
                    "Id": "SecurityEventLog",
                    "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                    "LogName": "Security",
                    "Levels": "7"
                    }
                },
                {
                    "Id": "ETW",
                    "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "LogName": "Microsoft-Windows-WinINet/Analytic",
                        "Levels": "7"
                    }
                },
                {
                    "Id": "IISLog",
                    "FullName": "AWS.EC2.Windows.CloudWatch.IisLog.IisLogInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "LogDirectoryPath": "C:\\inetpub\\logs\\LogFiles\\W3SVC1"
                    }
                },
                {
                    "Id": "CustomLogs",
                    "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "LogDirectoryPath": "C:\\CustomLogs\\",
                        "TimestampFormat": "MM/dd/yyyy HH:mm:ss",
                        "Encoding": "UTF-8",
                        "Filter": "",
                        "CultureName": "en-US",
                        "TimeZoneKind": "Local"
                    }
                },
                {
                    "Id": "PerformanceCounter",
                    "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "CategoryName": "Memory",
                        "CounterName": "Available MBytes",
                        "InstanceName": "",
                        "MetricName": "Memory",
                        "Unit": "Megabytes",
                        "DimensionName": "InstanceId",
                        "DimensionValue": "{instance_id}"
                    }
                },
                {
                    "Id": "CloudWatchLogs",
                    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
                    "Parameters": {
                        "AccessKey": "",
                        "SecretKey": "",
                        "Region": "us-east-1",
                        "LogGroup": "Default-Log-Group",
                        "LogStream": "{instance_id}"
                    }
                },
                {
                    "Id": "CloudWatch",
                    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
                    "Parameters": 
                    {
                        "AccessKey": "AKIAIK2U6EU675354BQ",
                        "SecretKey": "nPyk9ntdwW0y5oaw8353fsdfTi0e5/imx5Q09vz",
                        "Region": "us-east-1",
                        "NameSpace": "System/Windows"
                    }
                }
            ],
            "Flows": {
                "Flows": 
                [
                    "PerformanceCounter,CloudWatch"
                ]
            }
        } 
    }
    

  5. 我在EC2ConfigSettings下启用了CloudWatch Logs集成。

  6. 我重启了EC2Config服务。

  7. 我没有出现任何错误,但内存指标未显示在Cloud Watch控制台中。博客说要等待10-15分钟才能显示指标,但自从我完成它已经过了一个小时。出了什么问题?

2 个答案:

答案 0 :(得分:7)

首先,您需要向您的实例添加IAM角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccessToSSM",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

请注意,您无法将角色添加到现有实例。所以在发布之前这样做。 然后,您需要通过以下路径配置EC2Config文件(通常):

C:\Program Files\Amazon\Ec2ConfigService\Settings.AWS.EC2.Windows.CloudWatch.json

您应该将以下块添加到JSON文件中:

...

{
    "Id": "PerformanceCounter",
    "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
    "Parameters": {
        "CategoryName": "Memory",
        "CounterName": "Available MBytes",
        "InstanceName": "",
        "MetricName": "Memory",
        "Unit": "Megabytes",
        "DimensionName": "InstanceId",
        "DimensionValue": "{instance_id}"
    }
}

...

{
    "Id": "CloudWatch",
    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
    "Parameters": 
    {
        "AccessKey": "",
        "SecretKey": "",
        "Region": "eu-west-1",
        "NameSpace": "PerformanceMonitor"
    }
}

更改配置文件后,请不要忘记重新启动服务器上的EC2Config服务。您应该能够在CloudWatch控制台中几分钟后获取内存指标。 您的实例上的CloudWatch监控级别也应设置为详细信息:

enter image description here

<强>更新

根据documentation,您现在可以将IAM角色附加或修改为现有实例。

答案 1 :(得分:6)

我正在运行Windows 2012 Base R2 Server,它运行的EC2Config版本大于4.0。如果有人遇到同样的问题,请在重启EC2Config服务后 重启Amazon SSM代理服务

我在以下链接[ STEP-6 ]中阅读:

http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/send_logs_to_cwl.html

它内容如下:

  

如果您运行的是EC2Config 4.0或更高版本,则必须从Microsoft服务管理单元重新启动实例上的SSM代理。

我这样解决了我的问题。