web-dev-qa-db-ja.com

AWS CloudWatch for Windowsインスタンスでのメモリ使用量のモニタリング

デフォルトでは、メモリ使用量はCloudWatchによって監視されません。そこで、 これらの手順 を使用して、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分間待機するように指示されていますが、それを実行してからすでに1時間が経過しています。何が悪いの?

16
prudhvi

Windows 2012 Base R2 Serverを実行しており、4.0以上のEC2Configバージョンを実行しています。誰かが同じ問題に直面した場合、EC2Configサービスを再起動した後、Amazon SSM Agentサービスを再起動してください

次のリンク[STEP-6]で読みました。

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

次のとおりです。

EC2Configバージョン4.0以降を実行している場合は、MicrosoftサービススナップインからインスタンスでSSMエージェントを再起動する必要があります。

これを行うことで問題を解決しました。

6
prudhvi

まず、インスタンスに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ロールをアタッチまたは変更できるようになりました。

7
Mahdi