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 사용률 등을 확인할 수 있습니다.