메뉴 닫기

앤서블을 이용하여 CPU, 메모리, 디스크 사용률 모니터링

 

 

앤서블 로고
앤서블 로고

 

 

 

 

앤서블을 사용하여 CPU, 메모리, 디스크 사용률을 좀 더 자세하게 살펴볼 수 있는 dstat, iostat, vmstat과 같은 명령어를 이용해 관리 노드의 CPU, 메모리, 디스크 사용률을 모니터링 해보겠습니다. 

 

 

 

앤서블 테스트 환경 

 

앤서블 서버 (1대) : Ubuntu 22.04

관리 노드 서버 (3대) : Ubuntu 22.04

– ubuntu_1

– ubuntu_2

– ubuntu_3

 

 

 

 

KVM 및 virt-manager 설치 

 

CPU 가상화 여부 확인

# cat /proc/cpuinfo | egrep “vmx|svm”

시스템 업데이트

# apt update -y 

kvm 관련 패키지 설치

# apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils

virt-manager 설치

# apt install virt-manager

 

 

 

 

앤서블 설치하기 

 

# apt install software-properties-common

# add-apt-repository –yes –update ppa:ansible/ansible

# apt install ansible

# ansible –version
ansible [core 2.15.6]
  config file = /etc/ansible/ansible.cfg
  configured module search path = [‘/root/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’]
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True

 

 

 

 

인벤토리를 이용한 자동화 대상 호스트 설정

 

인벤토리 파일은 텍스트 파일이며, 앤서블이 자동화 대상으로 하는 호스트들을 작성할 수 있습니다.

.ini 또는 .yaml 형식을 사용하여 작성이 가능합니다. 

 

[IP를 이용한 인벤토리 파일 생성]

// my-ansible 디렉토리 생성

# midlr my-ansible

# cd my-ansible

// IP를 이용한 inventory 파일 생성

# vi inventory

115.68.xxx.xxx

115.68.xxx.xxx

115.68.xxx.xxx

 

[호스트명을 이용한 인벤토리 파일 생성]

// /etc/hosts에 자동화 대상 호스트 등록 

# vi /etc/hosts

115.68.xxx.xxx  ubuntu_1

115.68.xxx.xxx  ubuntu_2

115.68.xxx.xxx  ubuntu_3

// 호스트명을 이용한 inventory 파일 생성

# vi inventory

[group]

ubuntu_1

ubuntu_2

ubuntu_3

 

 

ansible-inventory 명령어와 –graph 옵션을 이용하면 트리 형태로 인벤토리 정보를 확인할 수 있습니다.

# ansible-inventory -i ./inventory –graph
@all:
  |–@ungrouped:
  |–@TEST:
  |  |–115.68.xxx.xxx
  |  |–115.68.xxx.xxx
  |  |–115.68.xxx.xxx

 

 

 

앤서블 환경 설정 파일 생성 

 

# vi ansible.cfg

[defaults]
inventory=./inventory
remote_user=user
ask_pass=false

[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_ask_pass=false

 

 

 

 

앤서블 접근을 위한 SSH 인증 구성

 

로컬 사용자에게 개인 ssh 키가 있거나, 관리 호스트에서 원격 사용자임을 인증 가능한 키가 구성된 경우 자동으로 로그인됩니다.

ssh-keygen 명령어를 이용하여 다음과 같이 생성할 수 있습니다.

ssh-copy-id 명령어를 이용하여 ssh 공개 키를 해당 호스트로 복사할 수 있습니다. 

 

// ssh-keygen 명령어를 이용하여 ssh 키를 생성 

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:ljbRuQYIJajlnEelgqLDgXA4fvvd03krrL0J6a9xax0 root@wnwls648-228122
The key’s randomart image is:
+—[RSA 3072]—-+
|….ooo          |
|=oo .+ . . .     |
|=B.o. . o o      |
|=.=o.    + .     |
|o….   S o      |
| . .   o o.  E   |
|    . . .+o.o .  |
|     . ..o=*oo   |
|         +**+..  |
+—-[SHA256]—–+

 

 

// ssh-copy-id 명령어를 이용하여 관리 노드로 ssh 키를 복사 (ubuntu_1, ubuntu_2, ubuntu_3 서버에 모두 복사)

# ssh-copy-id root@115.68.xxx.xxx
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”
The authenticity of host ‘115.68.xxx.xxx (115.68.xxx.xxx)’ can’t be established.
ED25519 key fingerprint is SHA256:JXxBdzJ6fWgEBJypkDFMyN5LTFvQ8tqiWYGXDTt7x7Q.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys
root@115.68.xxx.xxx’s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   “ssh ‘root@115.68.xxx.xxx'”
and check to make sure that only the key(s) you wanted were added.

 

 

ansible 명령어를 이용하여 ping 테스트를 진행합니다.

정상적으로 통신이 이루어질 시 ‘SUCCESS’ 라는 메시지를 볼 수 있습니다. 

# ansible -m ping TEST -k
SSH password: 
115.68.xxx.xxx | SUCCESS => {
    “ansible_facts”: {
        “discovered_interpreter_python”: “/usr/bin/python3”
    },
    “changed”: false,
    “ping”: “pong”
}
115.68.xxx.xxx | SUCCESS => {
    “ansible_facts”: {
        “discovered_interpreter_python”: “/usr/bin/python3”
    },
    “changed”: false,
    “ping”: “pong”
}
115.68.xxx.xxx | SUCCESS => {
    “ansible_facts”: {
        “discovered_interpreter_python”: “/usr/bin/python3”
    },
    “changed”: false,
    “ping”: “pong”
}

 

 

 

 

앤서블 플레이북 작성하기

 

변수정의를 위해 아래의 파일을 생성하고, 변수와 변수값을 정의합니다.

# vi vars_packages.yml 

log_directory: /home/ansible/logs
packages:
  – dstat
  – sysstat 

 

 

변수 정의가 끝나면 monitoring_system.yml 파일을  생성하여 플레이북을 작성합니다. 

# vi monitoring_system.yml

– hosts: TEST
  vars_files: vars_packages.yml

  tasks:
    – name: Install packages on Ubuntu
      ansible.builtin.apt:
        name: “{{ item }}”
        state: present
      loop: “{{ packages }}”
      when: ansible_facts.os_family == “Debian”

    – 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 –syntax-check monitoring_system.yml

playbook: monitoring_system.yml

 

문법에 문제가 없다면 ansible-playbook 명령어를 이용하여 실행합니다. 

# ansible-playbook monitoring_system.yml 

PLAY [TEST] **********************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [115.68.249.254]
ok: [115.68.249.251]
ok: [115.68.249.205]

TASK [Install packages on Ubuntu] ************************************************************************************
ok: [115.68.249.254] => (item=dstat)
ok: [115.68.249.205] => (item=dstat)
ok: [115.68.249.251] => (item=dstat)
ok: [115.68.249.254] => (item=sysstat)
ok: [115.68.249.205] => (item=sysstat)
ok: [115.68.249.251] => (item=sysstat)

TASK [Monitoring dstat] **********************************************************************************************
changed: [115.68.249.254] => (item=dstat 2 10)
changed: [115.68.249.205] => (item=dstat 2 10)
changed: [115.68.249.251] => (item=dstat 2 10)
changed: [115.68.249.254] => (item=dstat -cmdlt -D vda 2 10)
changed: [115.68.249.205] => (item=dstat -cmdlt -D vda 2 10)
changed: [115.68.249.251] => (item=dstat -cmdlt -D vda 2 10)

TASK [Monitoring iostat] *********************************************************************************************
changed: [115.68.249.254] => (item=iostat)
changed: [115.68.249.205] => (item=iostat)
changed: [115.68.249.251] => (item=iostat)
changed: [115.68.249.254] => (item=echo “=====================”)
changed: [115.68.249.254] => (item=iostat -t -c -dp vda)
changed: [115.68.249.205] => (item=echo “=====================”)
changed: [115.68.249.251] => (item=echo “=====================”)
changed: [115.68.249.254] => (item=echo “=====================”)
changed: [115.68.249.251] => (item=iostat -t -c -dp vda)
changed: [115.68.249.205] => (item=iostat -t -c -dp vda)
changed: [115.68.249.205] => (item=echo “=====================”)
changed: [115.68.249.251] => (item=echo “=====================”)

TASK [Monitoring vmstat] *********************************************************************************************
changed: [115.68.249.254] => (item=vmstat)
changed: [115.68.249.251] => (item=vmstat)
changed: [115.68.249.205] => (item=vmstat)
changed: [115.68.249.254] => (item=echo “=====================”)
changed: [115.68.249.254] => (item=vmstat -dt)
changed: [115.68.249.251] => (item=echo “=====================”)
changed: [115.68.249.205] => (item=echo “=====================”)
changed: [115.68.249.254] => (item=echo “=====================”)
changed: [115.68.249.251] => (item=vmstat -dt)
changed: [115.68.249.205] => (item=vmstat -dt)
changed: [115.68.249.254] => (item=vmstat -D)
changed: [115.68.249.254] => (item=echo “=====================”)
changed: [115.68.249.251] => (item=echo “=====================”)
changed: [115.68.249.205] => (item=echo “=====================”)
changed: [115.68.249.251] => (item=vmstat -D)
changed: [115.68.249.205] => (item=vmstat -D)
changed: [115.68.249.251] => (item=echo “=====================”)
changed: [115.68.249.205] => (item=echo “=====================”)

TASK [Monitoring df] *************************************************************************************************
changed: [115.68.249.254]
changed: [115.68.249.251]
changed: [115.68.249.205]

PLAY RECAP ***********************************************************************************************************
115.68.249.205             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
115.68.249.251             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
115.68.249.254             : ok=6    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

 

플레이북이 정상적으로 실행이 완료되면 위와 같이 OK 메시지를 확인할 수 있습니다. 

플레이북이 실행될때, apt를 이용하여 패키지가 설치되는것을 확인할 수 있으며, 이어서 각각의 명령어가 실행되는 것도 확인할 수있습니다. 

 

플레이북 실행이 완료되었다면, 관리 노드에 접속하여 로그 디렉토리에 로그 파일이 생성되었는지 확인합니다. 

[ubuntu_1.exp.com 서버]

root@ubuntu1:~# cd /home/ansible/logs/
root@ubuntu1:/home/ansible/logs# ll
total 24
drwxr-xr-x 2 root root 4096 11월 17 15:08 ./
drwxr-xr-x 3 root root 4096 11월 17 15:06 ../
-rw-r–r– 1 root root  325 11월 17 15:08 df.log
-rw-r–r– 1 root root 1903 11월 17 15:07 dstat.log
-rw-r–r– 1 root root 2566 11월 17 15:07 iostat.log
-rw-r–r– 1 root root 1731 11월 17 15:07 vmstat.log

 

 

확인된 로그 파일들의 내용을 cat 명령어로 다음과 같이 확인합니다. 

root@ubuntu1:/home/ansible/logs# cat df.log 
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           393M 1000K  392M   1% /run
/dev/vda1        49G  2.6G   46G   6% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda15      105M  6.1M   99M   6% /boot/efi
tmpfs           393M  4.0K  393M   1% /run/user/0

 

 

root@ubuntu1:/home/ansible/logs# cat dstat.log 
You did not select any stats, using -cdngy by default.
–total-cpu-usage– -dsk/total- -net/total- —paging– —system–
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw 
  0   0  99   0   0| 315M 3500M|   0     0 |   0     0 |3699k 4683k
  0   0 100   0   0|   0   114k|   0     0 |   0     0 |  27    38 
  0   0 100   0   0|   0     0 |   0     0 |   0     0 |  14    27 
  0   0 100   0   0|   0    56k|   0     0 |   0     0 |  20    30 
  0   0 100   0   0|   0     0 |   0     0 |   0     0 |  12    23 
  0   0 100   0   0|   0     0 |   0     0 |   0     0 |  12    20 
  0   0 100   0   0|   0     0 |  29B   27B|   0     0 |  14    24 
  0   0 100   0   0|   0  6144B|   0     0 |   0     0 |  18    26 
  0   0 100   0   0|   0     0 |  27B   27B|   0     0 |  14    24 
  0   0 100   0   0|   0     0 |   0     0 |   0     0 |  12    20 
–total-cpu-usage– ——memory-usage—– –dsk/vda– —load-avg— —-system—-
usr sys idl wai stl| used  free  buff  cach| read  writ| 1m   5m  15m |     time     
  0   0  99   0   0| 235M 1354M 80.3M 2065M| 292M 3501M|0.06 0.02    0|17-11 15:07:37
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0    44k|0.06 0.01    0|17-11 15:07:39
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0     0 |0.06 0.01    0|17-11 15:07:41
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0  2048B|0.05 0.01    0|17-11 15:07:43
  0   0  99   1   0| 235M 1354M 80.3M 2065M|   0   252k|0.05 0.01    0|17-11 15:07:45
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0     0 |0.05 0.01    0|17-11 15:07:47
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0     0 |0.05 0.01    0|17-11 15:07:49
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0    66k|0.05 0.01    0|17-11 15:07:51
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0  2048B|0.04 0.01    0|17-11 15:07:53
  0   0 100   0   0| 235M 1354M 80.3M 2065M|   0     0 |0.04 0.01    0|17-11 15:07:55

 

 

root@ubuntu1:/home/ansible/logs# cat iostat.log 
Linux 5.15.0-25-generic (wnwls648-228123)  2023년 11월 17일  _x86_64_ (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.27    0.00    0.17    0.06    0.02   99.48

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
loop0             0.00         0.02         0.00         0.00       5381          0          0
loop1             0.00         0.00         0.00         0.00       1229          0          0
loop2             0.00         0.02         0.00         0.00       4350          0          0
loop3             0.00         0.01         0.00         0.00       1777          0          0
loop4             0.00         0.02         0.00         0.00       5695          0          0
loop5             0.00         0.10         0.00         0.00      25397          0          0
loop6             0.00         0.02         0.00         0.00       4244          0          0
vda               2.75         2.35        28.23         0.00     597512    7170013          0

=====================
Linux 5.15.0-25-generic (wnwls648-228123)  2023년 11월 17일  _x86_64_ (2 CPU)

2023년 11월 17일 15시 07분 56초
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.27    0.00    0.17    0.06    0.02   99.48

Device             tps    kB_read/s    kB_wrtn/s    kB_dscd/s    kB_read    kB_wrtn    kB_dscd
vda               2.75         2.35        28.23         0.00     597512    7170113          0
loop0             0.00         0.02         0.00         0.00       5381          0          0
loop1             0.00         0.00         0.00         0.00       1229          0          0
loop2             0.00         0.02         0.00         0.00       4350          0          0
loop3             0.00         0.01         0.00         0.00       1777          0          0
loop4             0.00         0.02         0.00         0.00       5695          0          0
loop5             0.00         0.10         0.00         0.00      25397          0          0
loop6             0.00         0.02         0.00         0.00       4244          0          0
loop7             0.00         0.00         0.00         0.00          0          0          0
vda1              2.74         2.16        28.18         0.00     548060    7157472          0
vda14             0.00         0.02         0.00         0.00       4370          0          0
vda15             0.00         0.05         0.05         0.00      12399      12589          0

 

 

root@ubuntu1:/home/ansible/logs# cat vmstat.log 
procs ———–memory———- —swap– —–io—- -system– ——cpu—–
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 1386312  82232 2312416    0    0     1    14   15   18  0  0 99  0  0
=====================
disk- ————reads———— ————writes———– —–IO—— —–timestamp—–
       total merged sectors      ms  total merged sectors      ms    cur    sec                 KST
loop0    271      0   10762      89      0      0       0       0      0      0 2023-11-17 15:07:58
loop1     70      0    2458      52      0      0       0       0      0      0 2023-11-17 15:07:58
loop2    107      0    8700     128      0      0       0       0      0      0 2023-11-17 15:07:58
loop3     84      0    3554      44      0      0       0       0      0      0 2023-11-17 15:07:58
loop4    315      0   11390      28      0      0       0       0      0      0 2023-11-17 15:07:58
loop5    653      0   50794      78      0      0       0       0      0      2 2023-11-17 15:07:58
loop6    120      0    8488       4      0      0       0       0      0      0 2023-11-17 15:07:58
loop7      0      0       0       0      0      0       0       0      0      0 2023-11-17 15:07:58
vda    19543  15304 1195265   21083 678665 251207 14340227 1484069      0    542 2023-11-17 15:07:58
=====================
            9 disks 
            3 partitions 
        21163 total reads
        15304 merged reads
      1291411 read sectors
        21506 milli reading
       678665 writes
       251207 merged writes
     14340227 written sectors
      1484069 milli writing
            0 inprogress IO
          544 milli spent IO

 

 

 

 

이번 글에서는 앤서블을 사용하여 CPU, 메모리, 디스크 사용률을 좀 더 자세하게 살펴볼 수 있는 dstat, iostat, vmstat과 같은 명령어를 이용해 관리 노드의 CPU, 메모리, 디스크 사용률을 모니터링 해보았습니다.

앤서블을 이용해보니, 자동화의 중요성을 깨닫게 되었고, 앤서블을 더 많이 공부하여 실제 업무에 적용하도록 더욱 더 많이 공부하도록 하겠습니다. 

긴 글 읽어주셔서 감사합니다. 

 

 

 

[참조 URL]

앤서블 공식 깃허브

앤서블 공식 문서

앤서블 공식 블로그

 

앤서블 관련 책정보
https://search.shopping.naver.com/book/catalog/42799514639?cat_id=50010921&frm=PBOKPRO&query=%EC%95%A4%EC%84%9C%EB%B8%94%EB%A1%9C+%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94+%EC%9D%B8%ED%94%84%EB%9D%BC+%EC%9E%90%EB%8F%99%ED%99%94&NaPm=ct%3Dloxys3pc%7Cci%3D1f44de59e2d03b99514cdf2bdfdc8b45b3a9dc39%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3Dc440fee92293fe75d808ec6937966ca13ea94d95

 

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x