2008/07/02

솔라리스 10 서버 성능 모니터링에 관한 방안 제안



솔라리스10에서 시스템에서 발생할 성능 관련 문제를 감지하기 위한 자동화된 모니터링 환경 구축을 위해서는 다음과 같은 구조를 권고합니다.



성능 관련해서 저장해야할 정보는

1) 성능에 영향을 주는 장애가 발생하나 를 일단 봐야 합니다.

2) 컴포넌트 장애가 없다는 가정하에서 어떤 형태의 부하가 발생하고 어느 컴포넌트에 부하가 많이 몰리는 지를 축적하는 것이 중요합니다.



1)은 fmstat과 prtdiag, dmesg 를 주기적으로 보관하는 것이 중요합니다. 특히 fmstat는
cpu/memory/io component의 장애를 실시간 보고해주는 것이므로, 관리하는 것이 바람직합니다. 모니터링시에는
syslogd가 만들어주는 메세지 /var/adm/messages와 함께 일치된 시간상으로 관리하는 것이 바람직합니다.




$pfexec fmstat 1
module ev_recv ev_acpt wait svc_t %w %b open solve memsz bufsz

cpumem-retire 0 0
0.0 0.2 0 0 0 0 0 0
disk-transport 0 0 0.0 348.9 0 0 0 0 32b 0

eft 0 0 0.0 2.0 0 0 0 0 1.4M 0

fmd-self-diagnosis 1 0 0.0 0.1 0 0 0 0 0 0

io-retire 0 0 0.0 0.1 0 0 0 0 0 0

snmp-trapgen 0 0 0.0 0.1 0 0 0 0 32b 0

sysevent-transport 0 0 0.0 434.5 0 0 0 0 0 0

syslog-msgs 0 0 0.0 0.1 0 0 0 0 0 0

zfs-diagnosis 2 2 0.0 7.4 0 0 0 0 0 0

zfs-retire 0 0 0.0 0.1 0 0 0 0 0 0



2) 장애난 컴포넌트가 없는 경우에 서비스에 의해서 발생하는 부하에 의하여 서비스 응답이 장애성으로 판단되는 경우가 있는데
이러한 경우를 향후 추척하기 위해서는 3가지의 데이타를 축적하는 것이 바람직합니다. 시스템에서는 서비스를 위해서 사용되는 것은

CPU, memory, io(block io), net(streaming io)로 분류될 수 있겠습니다.

CPU와 메모리 추적을 위해서는 vmstat를 축적하시는 것이 바람직하며, 네트웍의 대역폭 조사를 위해서는 첨부되어 있는 netsum과 같은 유틸리의 값을 저장해놓는 것이 좋습니다.

동시에 io(블럭IO)를 위해서 예전에는 sar를 제안했습니다만, 솔라리스10에서는 보다 더 세련된 dtrace를 이용하여 실감나는 추적을 할 수 있습니다.


링크된 netsum은 다음과 같은 출력을 지원합니다. (플랫폼별로 실행화일이 다릅니다.)


$netsum -A -I wpi0 -i 5

Name inc/s out/s ipkts/s opkts/s ierr oerr Bi/pkt Bo/pkt Time

wpi0 20.4 B 16.0 B 0.2 0.2 0 0 102 80 14:24:18

wpi0 953.5 B 36.3 B 2.6 0.4 0 0 367 91 14:24:23

wpi0 0.0 B 0.0 B 0.0 0.0 0 0 0 0 14:24:28

이런 기록으로 네트웍 인터페이스에 대한 기록을 유지할 수가 있습니다.

그외 디스크 사용의 패턴에 관한 데이타를 저장해두고, 가장 빈번한 사용이 되는 disk가 어딘지를평소에 기록해놓는 것이 좋습니다. 솔라리스10 이전에는 이러한 기록이 매우 힘들었으나, 솔10에서는 dtrace 스크립트를 통해서 아주 훌륭한 데이타를 볼 수 가 있습니다.


다음은 hotspot.d라는 DTraceToolkit 0.99에 포함된 스크립트를 약간 수정한 스크립트입니다.
실행은 #dtrace -s hotspot.d 처럼 실행하며, 스크립트화해서 cron에 등록해서 백그라운드로
실행하시면 됩니다.



실행결과는 대략 다름과 같습니다. 이러한 데이타를 통하여 어떤 디스크가 어떻게 사용되고 있는 지를 파악할 수 있습니다.


혹은 io 패턴을 축적해놓는 것도 도움이 될 수 있는데, 역시 DTraceToolkit에 들어있는 iopattern이라는 스크립트를 이용하여 관련 정보를 기록해놓으면 크게 도움이 될 수 있습니다. (아래 링크 참조)



iopattern 이라는 스크립트는 다음과 같은 내용이 나오게 됩니다. 디스크의 패턴에 따라서, 향후 서비스 둔화 지점 파악과 스토리지 아키텍쳐를 어떤 방향으로 가져가야 할 지에 대한 기초 데이타를
제공하게 됩니다.









그외, DtraceToolkit에 내장된 여러 스크립트를 이용하게 되면, 매우 정확하고 정밀한 서버 관련 데이타를 축적할 수 있습니다.

DtraceToolkit : http://opensolaris.org/os/community/dtrace/dtracetoolkit/


댓글 없음: