새소식

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

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