티스토리 뷰

CloudNet@의 가시다님 Ansible 1기 스터디에 참여하게 되어 배운 내용과 책의 내용을 함께 정리합니다.

📚 앤서블로 시작하는 인프라 자동화

 

앤서블로 시작하는 인프라 자동화 | 장현정 - 교보문고

앤서블로 시작하는 인프라 자동화 | 효율적인 IT 자동화를 위한 도구, 앤서블 설계부터 응용까지 단계별로 배우는 인프라 관리클라우드 컴퓨팅을 논할 때 IaC(Infrastructure as Code)를 빼놓을 수 없는

product.kyobobook.co.kr

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

 

galaxy.ansible.com

ansible-galaxy role install geerlingguy.elasticsearch

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함