christiangda.amazon_cloudwatch_agent
Rôle Ansible : christiangda.amazon_cloudwatch_agent
Ce rôle installe l'agent AWS CloudWatch.
La meilleure façon d'installer ce rôle est d'utiliser la commande ansible-galaxy install christiangda.amazon_cloudwatch_agent
, le dépôt Ansible Galaxy est christiangda.amazon_cloudwatch_agent.
Le code du dépôt se trouve ici : https://github.com/christiangda/ansible-role-amazon-cloudwatch-agent.
Fonctionnalités :
- Fonctionne sur des instances AWS EC2 / instances sur site
- Prend en charge différentes versions de Python, Ansible et des systèmes d'exploitation (voir la matrice d'intégration continue pour les détails)
- Télécharge et installe l'agent CloudWatch à partir du package de distribution AWS
- Redémarre le service lorsque la configuration est modifiée
- Fournit un fichier de configuration par défaut de l'agent (configuration minimale, non recommandée)
- Fait la rotation du fichier journal de l'agent CloudWatch
- Vous permet de charger votre propre fichier JSON / fichier YAML ou configuration en ligne pour les sections agent, métriques et journaux
- Supporte les architectures
amd64
etarm64
Remarques :
- La version 2.x.y n'est pas compatible avec la version 1.x.y
- À partir de la version 2.x.y, ce rôle n'installe plus par défaut le dépôt EPEL, vous devez maintenant gérer cela, je recommande mon
rôle Ansible
christiangda.epel_repo à la place - À partir de la version 2.x.y, ce rôle ne crée plus de profil AWS CLI (config et identifiants), vous devez désormais prendre en charge cela, je recommande mes
rôles Ansible
christiangda.awscli et christiangda.awscli_configure à la place. Voir les exemples sous (lorsque cwa_agent_mode: "onPremise") - Installe automatiquement le
package collectd OS
lorsqu'il détecte l'utilisation de Récupérer des métriques personnalisées avec collectd dans le fichier de configuration. Selon leOS
, lepackage collectd
pourrait nécessiter le dépôt EPEL - Utilisateurs de RedHat : Il est important d'avoir un abonnement valide pour éviter des problèmes d'installation de paquets de dépendance.
Plus de détails dans VERSION.md.
Exigences
Ce rôle fonctionne sur des distributions RedHat, CentOS, Amazon Linux, Debian et Ubuntu
- RedHat
- 7
- 8
- CentOS
- 7
- 8
- stream8
- Rocky Linux
- 8
- 9
- Amazon Linux
- 2
- Ubuntu
- 14.04 (*)
- 16.04 (*)
- 18.*
- 20.*
- 21.*
- 22.*
- Debian
- Stretch (9)
- buster (10)
- bullseye (11)
- Bookworm (12)
Pour voir la matrice de compatibilité des versions Python par rapport aux versions d'Ansible, voir Travis-CI build matrix.
Variables du rôle
Variable | Valeur par défaut |
---|---|
cwa_conf_json_file_content | "" --> Vide |
cwa_agent_mode | "ec2" |
cwa_aws_region | "" |
cwa_use_credentials | false |
cwa_profile | "AmazonCloudWatchAgent" |
cwa_agent_profile_path | /root |
cwa_http_proxy | "" --> Vide |
cwa_https_proxy | "" --> Vide |
cwa_no_proxy | "169.254.169.254" |
cwa_logrotate_file_size | "10M" |
cwa_logrotate_files | 5 |
cwa_debug | false |
Plus de détails : Voir le fichier defaults/main.yaml.
Dépendances
- Dans le cas des familles de systèmes d'exploitation RedHat/Centos, le dépôt EPEL pourrait être nécessaire.
- Si vous définissez
cwa_agent_mode: "onPremise"
, la configuration du profil AWS CLI est nécessaire. - Si vous Récupérez des métriques personnalisées avec collectd, le package
collectd
sera installé automatiquement et, selon leOS
, le dépôt EPEL pourrait être nécessaire.
Exemple de Playbook
Lorsque cwa_agent_mode: "onPremise"
# Vous devez utiliser ansible-vault pour le provisionner
# Exemple :
# ansible-vault encrypt_string --ask-vault-pass --name 'cwa_access_key' 'AKIAIOSFODNN7EXAMPLE'
# ansible-vault encrypt_string --ask-vault-pass --name 'cwa_secret_key' 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
- hosts: servers
gather_facts: True
roles:
- role: christiangda.epel_repo # Si vous n'avez pas installé le dépôt EPEL
when: >
ansible_os_family == 'RedHat' and (
ansible_distribution == 'CentOS' or
ansible_distribution == 'RedHat' or
ansible_distribution == 'Amazon'
)
- role: christiangda.awscli_configure # Si vous n'avez pas configuré les profils AWS CLI
vars:
awscliconf_path: '/root'
awscliconf_files:
credentials:
- AmazonCloudWatchAgent:
aws_access_key_id: !vault |
$ANSIBLE_VAULT;1.1;AES256
30376338613338326663373366303234623665633339303338613463313564633832363237306137
3362643039616631323339383332306536333962346133310a383265376665316235653261616136
61306566623531356263346439633761633830323636646236373736353530396134636536666532
3939636433636364310a316639366139366566623337623536346661633339343766323936346336
65333035366635396138656132643262626438333961326266396466626464643766
aws_secret_access_key: !vault |
$ANSIBLE_VAULT;1.1;AES256
65643230613939303737336632346432393234616437383532386139616364316233333933643735
6633636261383163323362623562323333323533336564310a323030343431366135343035326635
33623161376634643939636464306139386662303034616531346632303039643238373834616266
3064623232373233610a346432646565396235316631626137653731376365333531323866626665
62656638623330643539653763636364363738653932653831316238633939356462653636633463
6130613761633565616533633332376565373062396565396261
config:
- profile AmazonCloudWatchAgent:
region: "eu-west-1"
- role: christiangda.amazon_cloudwatch_agent # Utilisant la configuration minimale de l'agent fournie par le rôle
vars:
cwa_agent_mode: "onPremise"
cwa_aws_region: "eu-west-1"
cwa_profile: "AmazonCloudWatchAgent"
Lorsque cwa_agent_mode: "ec2"
Lecture du fichier de configuration à partir d'un fichier de configuration JSON
---
- hosts: servers
gather_facts: True
roles:
- role: christiangda.amazon_cloudwatch_agent # Utilisation d'un fichier JSON fourni par vous à l'emplacement `files/CloudWatch.json` par rapport à ce playbook
vars:
cwa_agent_mode: "ec2"
cwa_conf_json_file_content: "{{ lookup('file', 'files/CloudWatch.json') | from_json }}"
---
- hosts: servers
gather_facts: True
roles:
- role: christiangda.epel_repo
when: >
ansible_os_family == 'RedHat' and (
ansible_distribution == 'CentOS' or
ansible_distribution == 'RedHat' or
ansible_distribution == 'Amazon'
)
- role: christiangda.awscli_configure
vars:
awscliconf_path: '/root'
awscliconf_files:
credentials:
- AmazonCloudWatchAgent:
aws_access_key_id: 'AKIAIOSFODNN7EXAMPLE'
aws_secret_access_key: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
- role: christiangda.amazon_cloudwatch_agent # Utilisation de la configuration minimale fournie par le rôle
vars:
cwa_agent_mode: "ec2"
Lecture du fichier de configuration à partir d'un fichier de configuration YAML
---
- hosts: servers
gather_facts: True
roles:
- role: christiangda.amazon_cloudwatch_agent # Utilisation d'un fichier YAML fourni par vous à l'emplacement `files/CloudWatch.yaml` par rapport à ce playbook
vars:
cwa_agent_mode: "ec2"
cwa_conf_json_file_content: "{{ lookup('file', 'files/CloudWatch.yaml') | from_yaml }}"
Utilisation d'un fichier de configuration YAML INLINE
---
- hosts: centos7, centos6, ubuntu1804, ubuntu1810, debian8, debian9, amzn2
become: True
roles:
- role: christiangda.epel_repo # Si vous n'avez pas installé le dépôt EPEL
when: >
ansible_os_family == 'RedHat' and (
ansible_distribution == 'CentOS' or
ansible_distribution == 'RedHat' or
ansible_distribution == 'Amazon'
)
- role: christiangda.awscli_configure # Si vous n'avez pas configuré les profils AWS CLI
vars:
awscliconf_path: '/root'
awscliconf_files:
credentials:
- AmazonCloudWatchAgent:
aws_access_key_id: !vault |
$ANSIBLE_VAULT;1.1;AES256
30376338613338326663373366303234623665633339303338613463313564633832363237306137
3362643039616631323339383332306536333962346133310a383265376665316235653261616136
61306566623531356263346439633761633830323636646236373736353530396134636536666532
3939636433636364310a316639366139366566623337623536346661633339343766323936346336
65333035366635396138656132643262626438333961326266396466626464643766
aws_secret_access_key: !vault |
$ANSIBLE_VAULT;1.1;AES256
65643230613939303737336632346432393234616437383532386139616364316233333933643735
6633636261383163323362623562323333323533336564310a323030343431366135343035326635
33623161376634643939636464306139386662303034616531346632303039643238373834616266
3064623232373233610a346432646565396235316631626137653731376365333531323866626665
62656638623330643539653763636364363738653932653831316238633939356462653636633463
6130613761633565616533633332376565373062396565396261
config:
- profile AmazonCloudWatchAgent:
region: "eu-west-1"
- role: christiangda.amazon_cloudwatch_agent # Utilisation d'une configuration YAML EN LIGNE pour votre agent
vars:
cwa_agent_mode: onPremise
cwa_aws_region: "eu-west-1"
cwa_profile: "AmazonCloudWatchAgent"
cwa_conf_json_file_content:
agent:
metrics_collection_interval: 60
region: es-west-1
logfile: "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
debug: false
metrics:
metrics_collected:
cpu:
resources:
- "*"
measurement:
- name: cpu_usage_idle
rename: CPU_USAGE_IDLE
unit: Percent
- name: cpu_usage_nice
unit: Percent
- cpu_usage_guest
totalcpu: false
metrics_collection_interval: 10
append_dimensions:
test: test1
date: "2017-10-01"
netstat:
measurement:
- tcp_established
- tcp_syn_sent
- tcp_close
metrics_collection_interval: 60
processes:
measurement:
- running
- sleeping
- dead
append_dimensions:
ImageId: "${aws:ImageId}"
InstanceId: "${aws:InstanceId}"
InstanceType: "${aws:InstanceType}"
AutoScalingGroupName: "${aws:AutoScalingGroupName}"
aggregation_dimensions:
- - AutoScalingGroupName
- - InstanceId
- InstanceType
- []
logs:
logs_collected:
files:
collect_list:
- file_path: "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
log_group_name: amazon-cloudwatch-agent.log
log_stream_name: amazon-cloudwatch-agent.log
timezone: UTC
- file_path: "/opt/aws/amazon-cloudwatch-agent/logs/test.log"
log_group_name: test.log
log_stream_name: test.log
timezone: Local
log_stream_name: my_log_stream_name
force_flush_interval: 15
Configuration minimale sur une instance AWS EC2
---
- hosts: all
gather_facts: True
become: true
become_user: root
become_method: sudo
remote_user: ec2-user
roles:
- role: christiangda.amazon_cloudwatch_agent # Supposant que vous êtes sur une "instance EC2" et que vous utilisez la configuration par défaut du rôle
Exemple de fichier d'inventaire (inventory)
[all]
10.14.x.y
10.14.v.z
[amazon-1]
10.14.x.y
[amazon-2]
10.14.v.z
Comment l'utiliser
ansible-playbook my-playbook.yml \
--inventory inventory \
--private-key [~/emplacement de ma clé.pem] \
--become \
--become-user=ec2-user \
--user ec2-user
Développement / Contributions
Ce rôle est testé à l'aide de Molecule et a été développé en utilisant des environnements virtuels Python.
De plus, nous utilisons deux branches principales :
- master
- develop
Si vous souhaitez contribuer à ce projet, voici ce que vous devez faire :
- Forker le projet
- Préparer votre environnement
- Corriger le problème dans la branche
develop
- Exécuter
molecule test
- Créer une demande de tirage (Pull Request) vers la branche
develop
du projet officiel.
Références :
Préparer votre environnement
- Python 3
mkdir ansible-roles
cd ansible-roles/
python3 -m venv venv
source venv/bin/activate
pip install pip --upgrade
pip install ansible
pip install molecule
pip install 'molecule[docker]'
pip install 'molecule[podman]'
pip install 'molecule[lint]'
pip install molecule-vagrant
pip install python-vagrant
pip install selinux
pip install docker
pip install pytest
pip install pytest-mock
pip install pylint
pip install rope
pip install autopep8
pip install yamllint
pip install flake8
pip install ansible-lint
Cloner le dépôt du rôle (de votre fork) et créer un lien symbolique
NOTE : Forkez d'abord le dépôt principal.
git clone https://github.com/<votre nom d'utilisateur github>/ansible-role-amazon-cloudwatch-agent.git
ln -s ansible-role-amazon-cloudwatch-agent christiangda.amazon_cloudwatch_agent
cd christiangda.amazon_cloudwatch_agent
Exécuter le test de molécule
Scénarios disponibles :
- default -->
--driver-name docker
- podman -->
--driver-name podman
- vagrant -->
--driver-name vagrant
scénario par défaut
Étape par étape
molecule create [--scenario-name default]
molecule converge [--scenario-name default]
molecule verify [--scenario-name default]
molecule destroy [--scenario-name default]
ou
Tout en un
molecule test [--scenario-name default]
scénario podman
Étape par étape
molecule create --scenario-name podman
molecule converge --scenario-name podman
molecule verify --scenario-name podman
molecule destroy --scenario-name podman
ou
Tout en un
molecule test --scenario-name podman
scénario vagrant
Étape par étape
molecule create --scenario-name vagrant
molecule converge --scenario-name vagrant
molecule verify --scenario-name vagrant
molecule destroy --scenario-name vagrant
ou
Tout en un
molecule test --scenario-name vagrant
De plus, si vous souhaitez le tester en utilisant des machines virtuelles, j'ai un très beau projet ansible-playground qui utilise Vagrant et VirtualBox, essayez-le !
Licence
Ce module est publié sous la licence générale publique GNU version 3 :
Informations sur l'auteur
Ansible Role for AWS CloudWatch Agent
ansible-galaxy install christiangda.amazon_cloudwatch_agent