Par défaut, l'utilisation de la mémoire n'est pas surveillée par CloudWatch. J'ai donc essayé de l'ajouter à mon instance Windows dans AWS en utilisant ces instructions .
C'est ce que j'ai fait:
J'ai créé un utilisateur nommé custom-metrics-user
. Ensuite, j'ai stocké l'accès et la clé secrète.
J'ai créé et attaché une stratégie en ligne à l'utilisateur. cela ressemble à ceci:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["cloudwatch:PutMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "ec2:DescribeTags"],
"Resource": "*"
}
]
}
J'ai lancé une instance Windows [2012 R2 Base AMI]. Après avoir accédé à l'instance via RDP, j'ai constaté que le AWS.EC2.Windows.CloudWatch.json
le fichier est déjà présent.
J'ai changé ça .json
fichier en conséquence. Après l'avoir changé, il ressemble à ceci:
{
"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"
]
}
}
}
J'ai activé l'intégration de CloudWatch Logs sous EC2ConfigSettings.
J'ai redémarré le service EC2Config.
Je n'ai eu aucune erreur, mais la mesure de la mémoire n'est pas affichée dans la console Cloud Watch. Le blog dit d'attendre 10 à 15 minutes pour que la métrique apparaisse, mais cela fait déjà une heure que je l'ai fait. Qu'est-ce qui ne va pas?
J'exécute un serveur Windows 2012 Base R2 et il exécute la version EC2Config supérieure à 4.0. Si quelqu'un est confronté au même problème, veuillez redémarrer le service d'agent Amazon SSM après avoir redémarré le service EC2Config.
Je l'ai lu dans le lien suivant [ STEP-6 ]:
http://docs.aws.Amazon.com/AWSEC2/latest/WindowsGuide/send_logs_to_cwl.html
Il se lit comme suit:
Si vous exécutez EC2Config version 4.0 ou ultérieure, vous devez redémarrer l'agent SSM sur l'instance à partir du composant logiciel enfichable Services Microsoft.
J'ai résolu mon problème en faisant cela.
Tout d'abord, vous devez ajouter un rôle IAM à votre instance:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAccessToSSM",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricData",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents"
],
"Resource": [
"*"
]
}
]
}
Notez que vous ne pouvez pas ajouter de rôle à une instance existante. Faites-le donc avant le lancement. Ensuite, vous devez configurer le EC2Config
fichier (normalement) accessible via le chemin suivant:
C:\Program Files\Amazon\Ec2ConfigService\Settings.AWS.EC2.Windows.CloudWatch.json
Vous devez ajouter le bloc suivant au fichier 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"
}
}
N'oubliez pas de redémarrer le EC2Config
service sur votre serveur après avoir modifié le fichier de configuration. Vous devriez pouvoir obtenir les métriques de mémoire après quelques minutes dans votre console CloudWatch
. Le niveau de surveillance de CloudWatch
sur votre instance doit également être défini sur détaillé:
Mise à jour:
Selon la documentation , vous pouvez désormais attacher ou modifier un rôle IAM à votre instance existante.