새소식

IaC/Ansible

[A101 Study 4주차] 모니터링 자동화

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 A101 Study 4주차 스터디 내용 정리

 

 

해당 스터디는 '앤서블로 시작하는 인프라 자동화' 책을 기반으로 진행하였습니다.
실습 환경은 'Control Node 1 대 + Target Node 3대' 로 구성하였습니다.



1. 모니터링 자동화

 

앤서블은 시스템 정보를 수집하는 팩트 기능을 제공합니다.


팩트 기능을 사용하여 시스템 기본 정보를 모니터링하고

CPU, Memory 사용률, 네트워크 상태 등을 다른 모니터링 도구에서 활용할 수 있도록 로그를 저장할 수 있습니다.



1.1. 팩트를 이용한 시스템 모니터링

 

상황

 

팩트를 이용하여 실행 중인 관리 노드의 인프라 정보를 파악하거나 이를 로그로 저장할 수 있습니다.

 

사전 분석

 

  • 팩트를 이용하여 다음과 같은 정보 추출
    • 호스트 이름
    • 커널 버전
    • 네트워크 인터페이스 이름
    • 네트워크 인터페이스 IP 주소
    • 운영체제 버전
    • CPU 개수
    • 사용 가능한 메모리
    • 스토리지 장치의 크기 및 여유 공간
  • 추출한 내용은 ansible.builtin.shell 모듈을 이용하여 /var/log/daily_check 디렉터리에 저장

 

플레이북 설계

 

 

 

- monitoring_facts.yml

---

- hosts: tnode
  vars:
    log_directory: /var/log/daily_check

  tasks:
    - name: Print system info
      ansible.builtin.debug:
        msg:
        - "################ Start #####################"
        - "Date: {{ ansible_facts.date_time.date }} {{ ansible_facts.date_time.time }}" 
        - "HostName: {{ ansible_facts.hostname }}"
        - "OS: {{ ansible_facts.distribution }}"
        - "OS Version: {{ ansible_facts.distribution_version }}"
        - "OS Kernel: {{ ansible_facts.kernel }}"
        - "CPU Cores: {{ ansible_facts.processor_vcpus }}"
        - "Memory: {{ ansible_facts.memory_mb.real }}"
        - "Interfaces: {{ ansible_facts.interfaces }}"
        - "IPv4: {{ ansible_facts.all_ipv4_addresses }}"
        - "################# End #######################" 
      register: result

    - name: Create log directory
      ansible.builtin.file:
        path: "{{ log_directory }}"
        state: directory

    - name: Print logs to log file
      ansible.builtin.shell: |
        echo "{{ item }}" >> "{{ log_directory }}"/system_info.logs
      loop: "{{ result.msg }}"

 

 

플레이북 실행

 

# 플레이북 실행
ansible-playbook monitoring_facts.yml

# 로그 파일 확인
for i in {1..3}; do echo ">> tnode$i <<"; ssh tnode$i ls -l /var/log/daily_check; echo; done

# 로그 확인
ssh tnode1 sudo cat /var/log/daily_check/system_info.logs

 

다음과 같이 시스템 정보가 로그로 출력된 것을 확인할 수 있습니다.

 

 

 

1.2. CPU, 메모리, 디스크 사용률 모니터링

 

사전 분석

 

  • 팩트에서 제공되지 않은 정보를 모니터링해야되는 상황
  • 자세한 CPU, 메모리, 디스크 사용률 모니터링을 위해 dstat, iostat, vmstat 명령어 사용 → 툴 설치 필요
  • 각각의 명령어 실행은 ansible.builtin.shell 이용하여 실행하고, loop 키워드를 이용하여 모니터링 명령어별로 여러 옵션을 추가하여 명령 실행
  • 실행된 명령어 결과는 로그 디렉터리에 저장

 

플레이북 설계

 

별다른 구성 없이 메인 플레이북 하나를 생성합니다.

 

 

 

- vars_packages.yml

---

log_directory: /home/ubuntu/logs
packages:
  - dstat
  - sysstat

 

 

- monitoring_system.yml

---

- hosts: tnode
  vars_files: vars_packages.yml

  tasks:
    - name: Install packages on RedHat
      ansible.builtin.dnf:
        name: "{{ item }}"
        state: present
      loop: "{{ packages }}"
      when: ansible_facts.os_family == "RedHat"

    - name: Install packages on Ubuntu
      ansible.builtin.apt:
        name: "{{ item }}"
        state: present
      loop: "{{ packages }}"
      when: ansible_facts.os_family == "Debian"

    - name: Create log directory
      ansible.builtin.file:
        path: "{{ log_directory }}"
        state: directory

    - name: Monitoring dstat
      ansible.builtin.shell: |
        {{ item }} >> {{ log_directory }}/dstat.log
      loop:
        - dstat 2 10
        - dstat -cmdlt -D vda 2 10

    - name: Monitoring iostat
      ansible.builtin.shell: |
        {{ item }} >> {{ log_directory }}/iostat.log
      loop:
        - iostat
        - echo "==============="
        - iostat -t -c -dp vda
        - echo "==============="

    - name: Monitoring vmstat
      ansible.builtin.shell: |
        {{ item }} >> {{ log_directory }}/vmstat.log
      loop:
        - vmstat
        - echo "==============="
        - vmstat -dt
        - echo "==============="
        - vmstat -D
        - echo "==============="

    - name: Monitoring df
      ansible.builtin.shell: |
        df -h >> {{ log_directory }}/df.log

 

 

플레이북 실행

 

# 플레이북 실행
ansible-playbook monitoring_system.yml

# 로그 파일 확인
for i in {1..3}; do echo ">> tnode$i <<"; ssh tnode$i ls -l ~/logs; echo; done

# 디스크 사용률 로그 확인
ssh tnode1 cat ~/logs/dstat.log

 

디스크 사용률 외에도 네트워크, CPU, Memory 사용률 등을 확인할 수 있습니다.

 

Contents

포스팅 주소를 복사했습니다