【问题标题】:Monitoring memory usage in AWS CloudWatch for Windows instance监控 AWS CloudWatch for Windows 实例中的内存使用情况
【发布时间】:2017-05-10 21:03:58
【问题描述】:

默认情况下,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 服务。

我没有收到任何错误,但内存指标未显示在 Cloud Watch 控制台中。博客说要等待 10 到 15 分钟让指标出现,但我已经过了一个小时。怎么了?

【问题讨论】:

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


    【解决方案1】:

    首先,您需要向您的实例添加一个 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 监控级别也应设置为详细:

    更新:

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

    【讨论】:

    • @prudhvi 您的实例是否具有 IAM 角色?
    • 修改文件后是否重启了EC2Config服务?
    • 我有完全相同的配置(除了 IAM 角色),而且效果很好。我现在唯一想到的就是检查 CloudWatch 控制台的 Metrics 部分是否选择了正确的区域。
    • 是的,我在启动机器之前添加了角色。
    【解决方案2】:

    我正在运行 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 代理。

    我通过这样做解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多