christiangda.amazon_cloudwatch_agent

Rôle Ansible : christiangda.amazon_cloudwatch_agent

Workflow de la branche principale Workflow de la branche de développement Rôle Ansible

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 :

Remarques :

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

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 :

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

Installer
ansible-galaxy install christiangda.amazon_cloudwatch_agent
Licence
gpl-3.0
Téléchargements
421.5k