[AWS] Lier l'utilisation de la mémoire de l'instance Ubuntu EC2 à CloudWatch

L'utilisation de la mémoire EC2 n'est pas acquise en tant que métrique standard et nécessite des paramètres supplémentaires à vérifier sur CloudWatch.

La procédure est résumée sur la page officielle, mais toutes les distributions cibles sont sur la même page. Puisqu'il est écrit, je vais résumer la procédure définie dans Ubuntu sur cette page.

Vous trouverez ci-dessous les étapes que nous avons vues sur une instance Ubuntu 20.04 nouvellement lancée. Vous pouvez l'installer depuis la ligne de commande ou depuis SSM.

1. 1. Installer à partir de la ligne de commande

1-1. Créer et associer un rôle IAM

Avant l'installation, vous devez créer un rôle pour METTRE les métriques sur CloudWatch et l'attacher à l'instance. Sélectionnez "Créer un rôle" dans IAM → Rôles sur la console.

image.png

Sélectionnez AWS Service, EC2 et passez à l'étape suivante.

image.png

Dans la sélection de stratégie, cochez CloudWatchAgentServerPolicy </ b> </ font> et passez à l'étape suivante.

image.png

L'écran suivant est celui de la saisie des balises, saisissez donc n'importe quelle balise pour continuer. Enfin, entrez un nom ( CloudWatchAgentServerRole </ font>, etc.) pour créer le rôle.

image.png

Après la création, attachez le rôle à l'instance. Sélectionnez Actions → Sécurité → Modifier le rôle IAM dans le menu Instance.

image.png

Sélectionnez le rôle que vous avez créé précédemment et enregistrez-le pour terminer.

image.png

1-2. Installation et confirmation

Le reste est l'exécution de la commande sur l'instance.

Téléchargez et installez d'abord le programme d'installation

$ sudo wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb

$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
* La région de Tokyo peut également être téléchargée à partir du site suivant
https://s3.ap-northeast-1.amazonaws.com/amazoncloudwatch-agent-ap-northeast-1/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb

Exécutez ensuite l'assistant pour créer le fichier de configuration. Il existe de nombreux éléments de configuration, mais si vous souhaitez obtenir le taux d'utilisation de la mémoire, vous pouvez utiliser la plupart des paramètres par défaut (Entrée). Seuls deux endroits où j'ai changé sont marqués de ★.

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:

Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:

Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:

What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:

Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is avai                          lable?
1. yes
2. no
default choice: [1]:

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, b                          ut you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

Current config as follows:
{
* L'affichage du contenu des réglages est omis *
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:

Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuratio                          n file to import for migration?
1. yes
2. no
default choice: [2]:

Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2 ★ Entrez 2 ★
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
* L'affichage du contenu des réglages est omis *
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2 ★ Entrez 2 ★
Program exits now.

Après l'exécution, le fichier de configuration sera sorti dans / opt / aws / amazon-cloudwatch-agent / bin / config.json, alors spécifiez-le et démarrez l'agent.

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/bin/config.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
Start configuration validation...
* Omis en chemin *
======== Error Log ========
2020-11-10T07:48:25Z E![telegraf] Error running agent: Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file or directory

J'ai une erreur de démarrage. Il semble que le module collectd ne soit pas installé, alors installez-le.

$ sudo apt-get update
$ sudo apt install collectd

Après l'installation, j'ai pu démarrer l'agent CloudWatch.

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/bin/config.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
Start configuration validation...
* Omis en chemin *
Configuration validation second phase succeeded
Configuration validation succeeded
Created symlink /etc/systemd/system/multi-user.target.wants/amazon-cloudwatch-agent.service → /etc/systemd/system/amazon-cloudwatch-agent.service.

$ ps -ef | grep amazon-cloudwatch-agent
root       25666       1  0 08:04 ?        00:00:00 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -pidfile /opt/aws/amazon-cloudwatch-agent/var/amazon-cloudwatch-agent.pid
root       25694    1807  0 08:08 pts/0    00:00:00 grep --color=auto amazon-cloudwatch-agent

Une fois l'agent démarré, vous pouvez vérifier les métriques sur CloudWatch après une courte attente. Vous pouvez voir que l'utilisation de la mémoire (mem_used_percent) de l'instance cible est affichée dans CloudWatch → All → CWAgent → ImageId, InstanceId, InstanceType (le nom est un peu déroutant par défaut).

image.png

2. Installer avec SSM

À partir de là, c'est la procédure de paramétrage dans SSM.

2-1. Créer et associer un rôle IAM

Première procédure 1. Créez un rôle pour PUT des métriques vers CloudWatch ainsi que. La procédure est la même, mais la stratégie à attacher est différente car le paramètre est via SSM. Sélectionnez "Créer un rôle" dans IAM → Rôles sur la console.

image.png

Sélectionnez AWS Service, EC2 et passez à l'étape suivante.

image.png

Dans la sélection de stratégie, vérifiez AmazonSSMManagedInstanceCore </ b> </ font> et CloudWatchAgentAdminPolicy </ b> </ font> Et passez à l'étape suivante. De nombreuses politiques sont affichées ici, alors recherchez et sélectionnez une par une. (* La capture d'écran ci-dessous a été créée dans un souci de clarté. En fait, il y a beaucoup de politiques entre les deux, donc cet état ne se produit pas </ font>.)

image.png

L'écran suivant est celui de la saisie des balises, saisissez donc n'importe quelle balise pour continuer. Enfin, entrez un nom ( AmazonSSMManagedInstanceRole </ font>, etc.) pour créer le rôle.

image.png

Après la création, attachez le rôle à l'instance. Sélectionnez Actions → Sécurité → Modifier le rôle IAM dans le menu Instance.

image.png

Sélectionnez le rôle que vous avez créé précédemment et enregistrez-le pour terminer.

image.png

2-2. Installation et confirmation

La configuration du SSM continuera de fonctionner sur la console. Sélectionnez SSM → Exécuter la commande → Exécuter la commande.

image.png

Vérifiez AWS-ConfigureAWSPackage.

image.png

Dans les paramètres de commande au bas du même écran, entrez AmazonCloudWatchAgent pour le nom et le dernier pour la version.

image.png

Dans la cible plus bas, sélectionnez manuellement l'instance → Vérifier l'instance cible.

image.png

Enfin (cet écran est très portrait), vérifiez les options de sortie et appuyez sur le bouton "Exécuter".

image.png

Confirmez que le résultat de l'exécution est normal.

image.png

Connectez-vous ensuite à l'instance et exécutez l'assistant pour créer le fichier de configuration. étape 1. Presque la même chose qu'avec le réglage par défaut (Entrée), mais dans le cas de SSM, la sélection peut changer. Un seul endroit où je l'ai changé est marqué d'une étoile.

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:

Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:

Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:

Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:

What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:

Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

Current config as follows:
{
* L'affichage du contenu des réglages est omis *
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:

Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?
1. yes
2. no
default choice: [2]:

Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2 ★ Entrez 2 ★
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
* L'affichage du contenu des réglages est omis *
}
Please check the above content of the config.
The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:

What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-linux]

Trying to fetch the default region based on ec2 metadata...
Which region do you want to store the config in the parameter store?
default choice: [ap-northeast-1]

Which AWS credential should be used to send json config to parameter store?
1. ASxxxxxxxxxxxxxxx4D(From SDK)
2. Other
default choice: [1]:

Successfully put config to parameter store AmazonCloudWatch-linux.
Program exits now.

Après la configuration, revenez à SSM et démarrez l'agent. Sélectionnez Instance gérée → Sélectionnez Instance → Définir l'inventaire → Exécuter la commande.

image.png

Sélectionnez Amazon CloudWatch-ManageAgent dans la documentation des commandes. En raison du grand nombre de types de commandes, cela ne sera pas affiché à moins que vous n'avanciez la page avec le bouton > à droite.

image.png

Entrez AmazonCloudWatch-linux dans les paramètres de commande au bas du même écran.

image.png

Dans la cible plus bas, sélectionnez manuellement l'instance → Vérifier l'instance cible.

image.png

Enfin (cet écran est très portrait), vérifiez les options de sortie et appuyez sur le bouton "Exécuter".

image.png

étape 1. J'ai aussi une erreur de démarrage.

image.png

Si vous cochez / var / log / amazon / ssm, vous pouvez voir que le même message d'erreur est affiché (seule la partie pertinente est extraite).

"standardOutput": "======== Error Log ========\n2020-11-10T09:31:25Z E![telegraf] Error running agent:
 Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db:
 no such file or directory\n",
"standardError": "2020/11/10 09:31:25 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-linux.tmp ...\nfailed to run commands: exit status 1"

Installez le module collectd.

$ sudo apt-get update
$ sudo apt install collectd

Après l'installation, j'ai pu démarrer l'agent en appuyant sur le bouton de ré-exécution de la commande.

image.png
image.png

Après cela, vous pouvez également vérifier les métriques sur CloudWatch.

image.png

Ceci termine la procédure de réglage. (SSM semble avoir une marge de révision afin que le travail ne puisse être effectué qu'avec SSM) Il a été confirmé que chaque procédure peut être liée à CloudWatch.

Matériel de référence