티스토리 뷰
CloudNet@의 가시다님 Ansible 1기 스터디에 참여하게 되어 배운 내용과 책의 내용을 함께 정리합니다.
📚 앤서블로 시작하는 인프라 자동화
1. 모니터링 자동화
1.1. 팩트를 이용한 시스템 모니터링
사전 분석
- 팩트는 관리 노드에서 시스템과 관련된 정보(아래 예시)들을 찾아 변수로 제공합니다. (인프라 정보 파악 및 로그로 저장합니다.)
- 호스트 이름
- 커널 버전
- 네트워크 인터페이스 이름
- 네트워크 인터페이스 IP 주소
- 운영체제 버전
- CPU 개수
- 사용 가능한 메모리
- 스토리지 장치의 크기 및 여유 공간
- 추출한 내용은 ansible.builtin.shell 모듈을 이용하여 /var/log/daily_check 디렉토리에 저장됩니다.
플레이북 설계
플레이북 개발 및 실행
1. 프로젝트 디렉토리를 생성하고 ansible.cfg, inventory 파일을 작성합니다. (결과를 편하게 보기 위해 tnode1만 대상으로 합니다.)
~/my-ansible/chapter_12.1
#
mkdir ~/my-ansible/chapter_12.1
cd ~/my-ansible/chapter_12.1
# ansible.cfg, inventory 파일 작성
cat <<EOT> ansible.cfg
[defaults]
inventory = ./inventory
remote_user = ubuntu
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
EOT
cat <<EOT> inventory
[tnode]
tnode1
EOT
2. debug와 facts 수집 후 file에 저장하는 플레이북을 작성합니다.
~/my-ansible/chapter_12.1/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 }}"
# 너무 많은 정보가 들어있어서 주석처리
# - "Devices: {{ ansible_facts.mounts }}"
- "################# 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 }}"
3. 플레이북을 실행합니다.
4. 플레이북을 2번 실행하고 로그 파일을 확인해보면 누적해서 로그가 쌓이는 것을 확인할 수 있습니다.
도전과제2
- chapter12.1의 수집 결과를 날짜와 시간이 포함된 log 파일 이름으로 저장되게 하고, Crontab을 활용하여 30분 마다 반복 실행 될 수 있게 설정해보자.
1.2. CPU, 메모리, 디스크 사용률 모니터링
사전 분석
- 팩트에서 제공되지 않은 정보를 모니터링해야되는 상황입니다.
- 자세한 CPU, 메모리, 디스크 사용률 모니터링을 위해 dstat, iostat, vmstat 명령어의 툴을 설치하여 사용합니다.
- 각각의 명령어 실행은 ansible.builtin.shell을 이용하여 실행하고, loop 키워드를 이용하여 모니터링 명령어별로 여러 옵션을 추가하여 명령을 실행합니다.
- 실행된 명령어 결과는 로그 디렉토리에 저장됩니다.
플레이북 설계
플레이북 개발 및 실행
1. 프로젝트 디렉토리를 생성하고 ansible.cfg, inventory 파일을 작성합니다. (결과를 편하게 보기 위해 tnode1만 대상으로 합니다.)
~/my-ansible/chapter_12.2
#
mkdir ~/my-ansible/chapter_12.2
cd ~/my-ansible/chapter_12.2
# ansible.cfg, inventory 파일 작성
cat <<EOT> ansible.cfg
[defaults]
inventory = ./inventory
remote_user = ubuntu
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
EOT
cat <<EOT> inventory
[tnode]
tnode1
EOT
2. 로그 디렉토리와 설치할 패키지의 변수 파일을 작성합니다. (vmstat은 기본으로 설치되어 있습니다.)
~/my-ansible/chapter_12.2/vars_packages.yml
---
log_directory: /home/ubuntu/logs
packages:
- dstat
- sysstat
3. debug와 facts 수집 후 file에 저장하는 플레이북을 작성합니다.
~/my-ansible/chapter_12.2/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
4. 플레이북을 실행합니다.
5. 로그 파일이 생성된 것을 확인할 수 있습니다. 해당 로그 또한 누적됩니다.
도전과제3
- chapter12.2의 플레이북에 대상 노드에 ifconfig ens5 정보를 ifconfig.log 파일로 수집 할수 있게 태스크를 추가해보자.
1.3. 모니터링 환경 구축
도전과제4
- 앤서블 갤럭시에서 elasticsearch 롤을 검색하여 es와 kibana를 tnode1에 설치 후 접속해보자.
ansible-galaxy role install geerlingguy.elasticsearch
'DevOps > Ansible' 카테고리의 다른 글
[A101] Ansible - Semaphore (0) | 2024.02.12 |
---|---|
[A101] Ansible로 AWS EC2 생성 (0) | 2024.02.06 |
[A101] Ansible - 보안설정 자동화 (0) | 2024.02.05 |
[A101] Ansible - 시스템 구축 및 환경 설정 자동화 (0) | 2024.01.28 |
[A101] Ansible - 앤서블 갤럭시와 콘텐츠 컬렉션 (0) | 2024.01.28 |