강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
▒ Doly의 CentOS7 강좌34 14. 시스템 및 서비스 관리(systemd) (2/2)
조회 : 18,084  


▒ Doly의 CentOS7 강좌34 14. 시스템 및 서비스 관리(systemd) (2/2)






14. 시스템 및 서비스 관리(systemd)

14.5. systemd 유틸리티
14.5.1. systemd-cgtop : 서비스 그룹별 모니터링
systemd에 의해 실행된 서비스 그룹별 CPU사용률, 메모리사용량, 프로세스 개수 등을 top 유틸리티와 비슷하게 실시간 모니터링할 수 있다. 다음과 같이 입력해 보자.

~ ]# systemd-cgtop

systemd-cgtop을 입력하면 다음과 같은 결과를 얻을 수 있다.


Path                                   Tasks   %CPU   Memory  Input/s Output/s

/                                      161    0.4   638.7M        -        -
/system.slice/ModemManager.service       1      -        -        -        -
/system.slice/NetworkManager.service     1      -        -        -        -
/system.slice/abrt-oops.service          1      -        -        -        -
/system.slice/abrt-xorg.service          1      -        -        -        -
/system.slice/abrtd.service              1      -        -        -        -
/system.slice/accounts-daemon.service    1      -        -        -        -
/system.slice/alsa-state.service         1      -        -        -        -
/system.slice/atd.service                1      -        -        -        -
/system.slice/auditd.service             3      -        -        -        -
/system.slice/avahi-daemon.service       2      -        -        -        -
/system.slice/bluetooth.service          1      -        -        -        -
/system.slice/chronyd.service            1      -        -        -        -
...


각 서비스그룹별 프로세스, CPU사용률, 메모리 사용량, 디스크 입/출력에 대한 실시간 정보를 얻을 수 있다.


~]# systemd-cgtop --help
systemd-cgtop [OPTIONS...]

Show top control groups by their resource usage.

  -h --help           Show this help
  --version           Print version and exit
  -p                  Order by path
  -t                  Order by number of tasks
  -c                  Order by CPU load
  -m                  Order by memory load
  -i                  Order by IO load
     --cpu[=TYPE]     Show CPU usage as time or percentage (default)
  -d --delay=DELAY    Delay between updates
  -n --iterations=N   Run for N iterations before exiting
  -b --batch          Run in batch mode, accepting no input
     --depth=DEPTH    Maximum traversal depth (default: 3)


위 도움말 정보와 같이, -p, -t, -c, -m, -i 옵션을 사용하여 원하는 항목별로 정렬을 할 수 있고, -d 옵션을 사용하면 갱신되는 간격, -n 옵션을 이용하여 갱신할 횟수, -b옵션을 사용하여 배치모드로 실행할 수 있다.

14.5.2. systemd-cgls : Cgroup 트리 확인
systemd-cgls를 이용하면 Cgroup의 트리를 확인할 수 있다.


~]# systemd-cgls
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 23
├─user.slice
│ └─user-0.slice
│   ├─session-1.scope
│   │ ├─1986 sshd: root@pts/0
│   │ ├─1988 -bash
│   │ ├─2379 systemd-cgls
│   │ └─2380 less
│   └─session-c1.scope
│     ├─1155 /usr/bin/Xvnc :2 -desktop localhost.localdomain:2 (root) -auth /root/.Xauthority -g
│     ├─1222 /usr/bin/vncconfig -iconic
│     ├─1224 /bin/gnome-session --session=gnome-classic
│     ├─1233 dbus-launch --sh-syntax --exit-with-session
│     ├─1234 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
│     ├─1264 /usr/libexec/imsettings-daemon
│     ├─1267 /usr/libexec/gvfsd
│     ├─1272 /usr/libexec//gvfsd-fuse /run/user/0/gvfs -f -o big_writes
│     ├─1318 /usr/bin/ssh-agent /etc/X11/xinit/Xclients
│     ├─1323 /usr/libexec/at-spi-bus-launcher
...


systemd-cgls의 결과를 보면 실행되고 있는 slice유닛과 서비스 유닛의 계층구조를 확인할 수 있다. 또한 각 서비스에서 fork한 프로그램들을 파악하기 쉽게 보여준다.

14.5.3. systemd-analyze : 각 유닛의 시작 시간 분석
시스템 시작 시 아주 많은 유닛들이 실행된다. 이러한 유닛들의 시작 시간을 분석하는 것은 어려운 일이다. 시스템 시작 시 유닛의 시작 시간을 분석해 주는 유용한 명령어가 systemd-analyze이다. 


~]# systemd-analyze
Startup finished in 339ms (kernel) + 2.504s (initrd) + 17.533s (userspace) = 20.376s


위 결과를 보면 시스템 시작에 소요된 시간을 분석해 준다. 커널과 initrd, 그리고 사용자 영역까지 각 영역별로 소요된 시간이 분석된다.


~]# systemd-analyze blame
          5.948s vncserver@:2.service
          5.918s tuned.service
          4.216s NetworkManager.service
          3.808s ModemManager.service
          3.634s avahi-daemon.service
          3.350s systemd-logind.service
          2.984s libvirtd.service
          2.650s iptables.service
          2.279s postfix.service
          2.028s rsyslog.service
          1.769s systemd-udev-settle.service
          1.663s chronyd.service
          1.276s iprupdate.service
          1.275s lvm2-monitor.service
          1.204s proc-fs-nfsd.mount
          1.123s sysstat.service
          1.048s var-lib-nfs-rpc_pipefs.mount
...

systemd-analyze에 blame옵션을 주면 위와 같이 각 유닛별 소요된 시간이 분석되며, 오랜 시간이 소요된 서비스 시간 기준으로 정렬되어 보여준다.

~]# systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

multi-user.target @17.529s
└─vncserver@:2.service @11.580s +5.948s
  └─network.target @11.516s
    └─network.service @10.665s +850ms
      └─NetworkManager.service @6.448s +4.216s
        └─basic.target @6.248s
          └─sockets.target @6.247s
            └─dbus.socket @6.247s
              └─sysinit.target @6.225s
                └─systemd-update-utmp.service @6.201s +23ms
                  └─auditd.service @5.551s +648ms
                    └─local-fs.target @5.549s
...

systemd-analyze에 critical-chain 옵션을 주면 위와 최악의 시간이 소요된 유닛들의 실행내역을 분석해서 보여준다. 위 결과를 보면 각 유닛의 의존관계와 소요시간 등을 파악할 수 있어 서비스 시작에 문제가 발생된다면 아주 쉽게 파악할 수 있다.


~]# systemd-analyze plot > analyze.svg

systemd-analyze에 plot옵션은 각 유닛의 시작 시간을 SVG를 이용하여 그래프로 보여준다. 다음 그림은 위에서 저장한 파일을 웹브라우저인 firefox에서 읽은 결과이다.

그래프로 쉽게 유닛 시작시간을 분석할 수 있다.

14.5.4. journalctl : systemd 로그 검색
CentOS7은 syslog에 의해 기록되는 부분을 변경하였다.
CentOS7이전의 syslog는 각 프로세스가 /dev/log 소켓파일에 로그를 기록하면, syslogd또는 rsyslogd데몬은 /dev/log 소켓파일을 리스닝하고 있어 로그를 처리하였다. 하지만, CentOS7은 /dev/log 소켓파일을 systemd에서 리스닝하고 몇몇 정보를 /run/log/journal/*/system.journal파일에 저장하고  /run/systemd/journal/syslog 소켓파일로 보낸다. rsyslogd는 /run/systemd/journal/syslog 소켓파일을 리스닝하고 있어 로그를 처리한다.
systemd로부터 가공된 로그는 journalctl을 사용하여 로그를 다양한 기준으로 검색할 수 있다. 하지만 저장되는 정보는 리부팅 후 초기화되는 단점이 있다.

1. 각 서비스 유닛별로 로그 검색
다음과 같은 방법으로 서비스 유닛에 대한 로그를 검색할 수 있다.


~]# journalctl -u rsyncd -a
-- Logs begin at 일 2015-04-12 14:51:21 KST, end at 일 2015-04-12 16:26:35 KST. --
 4월 12 15:02:29 localhost.localdomain systemd[1]: Starting fast remote file copy program daemon
 ...


journalctl의 -u옵션을 사용하여 rsyncd 서비스유닛에 대한 로그를 검색하였다. 

2. 중요도에 따른 로그 검색
syslog에 의해 남겨지는 로그파일은 TEXT형태로 저장되기 때문에, 중요도에 따라 검색할 수 없었다. 하지만, journalctl을 이용하면 중요도에 따라 검색이 가능하다. 


 ~]# journalctl -p 3
-- Logs begin at 일 2015-04-12 14:51:21 KST, end at 일 2015-04-12 16:30:01 KST. --
 4월 12 14:51:21 localhost.localdomain kernel: ioremap error for 0x7ffff000-0x80000000, requeste
...


journalctl의 -p옵션을 사용하여 중요도에 따른 설정을 하였다. 위에서 설정한 3은 ERROR이며 중요도에 대한 내용은 다음 표와 같다.
중요도 설정을 3(ERROR)으로 하면 EMERGENCY, ALERT, CRTICAL, ERROR로그를 모두 보여준다. 꼭 필요한 로그를 확인하기 위한 아주 유용한 기능이다.

3. 기간 설정 로그 검색
로그 파일의 기간을 설정하여 검색할 수 있다.

~]# journalctl --since="2015-04-12 16:00:00" --until="- 60 minutes"
-- Logs begin at 일 2015-04-12 14:51:21 KST, end at 일 2015-04-12 17:20:01 KST. --
 4월 12 16:00:01 localhost.localdomain systemd[1]: Starting Session 11 of user root.
 4월 12 16:00:01 localhost.localdomain systemd[1]: Started Session 11 of user root.
 4월 12 16:00:01 localhost.localdomain CROND[2918]: (root) CMD (/usr/lib64/sa/sa1 1 1)
...


위 예는 --since옵션을 사용하여 2015-04-12 16:00:00 이후 로그를 검색하는 것이며, --until옵션을 사용하여 현재 시간에서 60분 이전까지의 로그를 검색하는 것이다. 지금 시간이 17:20:00이라고 가정하면, 위 옵션으로 검색할 수 있는 로그 시간은 2015-04-12 16:00:00~16:20:00에 기록된 로그를 검색할 수 있다.

14.6. systemadm : systemd GUI 관리자
CentOS7 서적을 집필하면서 가능한 Xwindow환경에서 제공되는 GUI툴을 소개하고 TUI, CUI 프로그램들을 소개하였다. 하지만, CentOS7에서는 systemd에 대한 GUI도구를 제공하지 않았다. 그래서 systemd 사이트를 방문하여 systemd-ui프로그램 소스를 다운로드 하여 컴파일하고 설치하였다. 
systemd 사이트 : http://www.freedesktop.org/wiki/Software/systemd/
다운로드 : http://www.freedesktop.org/software/systemd/systemd-ui-3.tar.xz
systemd-ui소스를 빌드하여 설치하면, systemadm프로그램이 설치된다.


systemadm은 위 그림과 같이 각 유닛에 대해 쉽게 관리할 수 있는 GUI인터페이스를 제공한다. 다음과 같은 장단점이 있었다.
장점: 
  - 각 유닛에 대한 쉬운 확인
  - 각 서비스 시작, 종료, 재시작, Reload
  - 유닛 타입별 쉬운 상태 확인
단점 :
  - CentOS7의 기본 제공되는 패키지가 아님, 직접 소스 컴파일 해야 함.
  - 서비스 enable / disable 기능 없음
  - 잦은 프로그램 다운
위에서 소개한 단점이 너무 크기 때문에 systemadm에 대해서는 소개로 끝내도록 한다.


이상으로 34번째 강좌를 마무리 합니다. CentOS7 부터는 systemd가 도입되어 많은 부분이 바뀌었고 여러 유틸리티를 제공하여 편리하면서도 부팅시 문제되는 부분을 쉽게 분석할 수 있다. 열심히 뛰는 도리(Doly)였습니다.^^ 
 
#################################################
* 본 강좌는 언제든 갱신될 수 있으며, 원글은 www.linux.co.kr 강좌>리눅스>Doly의 연재강좌 에서 수정됩니다. 
* 본 강좌의 일부 또는 전체를 인용하실 경우, 반드시 출처를 밝혀 주시기 바랍니다.

* 수정이력 :
 2016.04.15(금): 최초 작성

[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1870


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
도리
도리(Doly)
(주)수퍼유저 기술이사 (CTO)
리눅스마스터 1급,2급 추천교재(2014년) 집필
리눅스마스터 1급,2급 전문위원(출제)(한국정보통신진흥협회, 2005년~)
SULinux 1.0, 1.5, 2.0, 2014 개발 총괄(sulinux.net, 1998년~)
SSU,LSCP,LSMP,CCMT외 다수 오픈소스 프로젝트 개발 및 운용 (lscp.sf.net외,2009년~)
리눅스 대량 시스템 구축 및 관리(5,000대리눅스 서버 구축 및 관리 경험, 2000년~)

E-Mail : doly골뺑이superuser.co.kr
소개 : 하루 하루 최선을 다합시다!!