christiangda.amazon_cloudwatch_agent

Rol de Ansible: christiangda.amazon_cloudwatch_agent

Flujo de trabajo de la rama principal Flujo de trabajo de la rama de desarrollo Rol de Ansible

Este rol instala AWS CloudWatch Agent.

La mejor manera de instalar este rol es usando el comando ansible-galaxy install christiangda.amazon_cloudwatch_agent. El repositorio de Ansible Galaxy es christiangda.amazon_cloudwatch_agent.

El código del repositorio está en https://github.com/christiangda/ansible-role-amazon-cloudwatch-agent.

Características:

Notas:

Más detalles en VERSION.md.

Requisitos

Este rol funciona en distribuciones RedHat, CentOS, Amazon Linux, Debian y 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)

Para ver la matriz de compatibilidad de Python vs. versiones de Ansible, ver Matriz de construcción de Travis-CI.

Variables del Rol

Variable Valor por Defecto
cwa_conf_json_file_content "" --> Vacío
cwa_agent_mode "ec2"
cwa_aws_region ""
cwa_use_credentials false
cwa_profile "AmazonCloudWatchAgent"
cwa_agent_profile_path /root
cwa_http_proxy "" --> Vacío
cwa_https_proxy "" --> Vacío
cwa_no_proxy "169.254.169.254"
cwa_logrotate_file_size "10M"
cwa_logrotate_files 5
cwa_debug false

Más Detalles: Ver el archivo defaults/main.yaml.

Dependencias

Ejemplo de Playbook

Cuando cwa_agent_mode: "onPremise"

# Debes usar ansible-vault para aprovisionarlo
# Ejemplo:
# 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 no tienes instalado el repositorio EPEL
        when: >
          ansible_os_family == 'RedHat' and (
            ansible_distribution == 'CentOS' or
            ansible_distribution == 'RedHat' or
            ansible_distribution == 'Amazon'
          )
      - role: christiangda.awscli_configure # Si no tienes configurados los perfiles de 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 # Usando la configuración mínima del agente proporcionada por el rol
          vars:
              cwa_agent_mode: "onPremise"
              cwa_aws_region: "eu-west-1"
              cwa_profile: "AmazonCloudWatchAgent"

Cuando cwa_agent_mode: "ec2"

Leyendo el archivo de configuración desde un archivo JSON.

---
- hosts: servers
    gather_facts: True
    roles:
      - role: christiangda.amazon_cloudwatch_agent # Usando un archivo JSON proporcionado por ti en la ubicación `files/CloudWatch.json` relativa a este 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 # Usando la configuración mínima proporcionada por el rol
          vars:
              cwa_agent_mode: "ec2"

Leyendo el archivo de configuración desde un archivo YAML.

---
- hosts: servers
    gather_facts: True
    roles:
      - role: christiangda.amazon_cloudwatch_agent # Usando un archivo YAML proporcionado por ti en la ubicación `files/CloudWatch.yaml` relativa a este playbook
          vars:
              cwa_agent_mode: "ec2"
              cwa_conf_json_file_content: "{{ lookup('file', 'files/CloudWatch.yaml') | from_yaml }}"

Usando un archivo de configuración INLINE YAML.

---
- hosts: centos7, centos6, ubuntu1804, ubuntu1810, debian8, debian9, amzn2
  become: True
  roles:
    - role: christiangda.epel_repo # Si no tienes instalado el repositorio EPEL
        when: >
          ansible_os_family == 'RedHat' and (
            ansible_distribution == 'CentOS' or
            ansible_distribution == 'RedHat' or
            ansible_distribution == 'Amazon'
          )
      - role: christiangda.awscli_configure # Si no tienes configurados los perfiles de 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 # Usando la configuración YAML ONLINE para tu agente
      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

Configuración mínima en una instancia 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 # Asumiendo que estás en una "instancia EC2" y la configuración predeterminada del agente del rol

Ejemplo de archivo de inventario (inventory).

[all]
10.14.x.y
10.14.v.z

[amazon-1]
10.14.x.y

[amazon-2]
10.14.v.z

Cómo usarlo.

ansible-playbook my-playbook.yml \
    --inventory inventory \
    --private-key [~/ubicación de mi key.pem] \
    --become \
    --become-user=ec2-user \
    --user ec2-user

Desarrollo / Contribución

Este rol es probado usando Molecule y fue desarrollado usando Entornos Virtuales de Python.

Además, usamos dos ramas principales de git:

  • master
  • develop

Si deseas contribuir a este proyecto, sigue estos pasos:

  • Fork del proyecto.
  • Prepara tu entorno.
  • Soluciona el problema en la rama develop.
  • Ejecuta molecule test.
  • Crea una solicitud de extracción para la rama develop del proyecto oficial.

Referencias:

Prepara tu entorno

  • 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

Clona el repositorio del rol (de tu fork) y crea un enlace simbólico

NOTA: Primero fork el repositorio principal.

git clone https://github.com/<tu usuario de github>/ansible-role-amazon-cloudwatch-agent.git
ln -s ansible-role-amazon-cloudwatch-agent christiangda.amazon_cloudwatch_agent
cd christiangda.amazon_cloudwatch_agent

Ejecuta la prueba de molecule

Escenarios disponibles:

  • default --> --driver-name docker
  • podman --> --driver-name podman
  • vagrant --> --driver-name vagrant

escenario default

Paso a paso.

molecule create [--scenario-name default]
molecule converge [--scenario-name default]
molecule verify [--scenario-name default]
molecule destroy [--scenario-name default]

o

Todo en uno.

molecule test [--scenario-name default]

escenario podman

Paso a paso.

molecule create --scenario-name podman
molecule converge --scenario-name podman
molecule verify --scenario-name podman
molecule destroy --scenario-name podman

o

Todo en uno.

molecule test --scenario-name podman

escenario vagrant

Paso a paso.

molecule create --scenario-name vagrant
molecule converge --scenario-name vagrant
molecule verify --scenario-name vagrant
molecule destroy --scenario-name vagrant

o

Todo en uno.

molecule test --scenario-name vagrant

Adicionalmente, si deseas probarlo usando VMs, tengo un muy buen proyecto de ansible-playground que utiliza Vagrant y VirtualBox, ¡pruébalo!.

Licencia

Este módulo se publica bajo la Licencia Pública General GNU Versión 3:

Información del Autor

Instalar
ansible-galaxy install christiangda.amazon_cloudwatch_agent
Licencia
gpl-3.0
Descargas
421.5k