시스템 모니터링 – Accounting 사용
시스템을 관리할려면 먼저 시스템에서 일어나는 여러가지 변화들을 문제가
생기기 전에 파악하고 대처 해야 합니다. 그렇기 때문에 시스템 모니터링은
시스템 관리자의 주요 업무라 할수 있습니다. 이런 시스템 모니터링을
보다 효율적으로 할수 있는 방법이 있습니다.
그럼…유용하게 사용하시길 바랍니다.
리눅스에 psacct 라는 관리 프로그램이 있습니다.
먼저 설치 되어있는지 확인하시고 없으시면 다운 받으셔서 설치하시길..
그런후 실행하죠..실행전에 /var/log/pacct 라는 파일이 생성되어져 있는지
확인 하도록 하죠. 만일 없다면 touch 를 이용하여 하나 생성하도록 하죠.
[root@zzang911 /root]# /sbin/accton /var/log/pacct
이러므로 해서 시스템에 일어나는 여러가지 변화들을 pacct 파일안에 저장이
되어집니다. 그럼 저장 되어진 파일을 보기 쉽게 뿌려주는 유틸인
sa 를 이용하여 내용을 출력 해 보도록 하죠..
[root@zzang911 /root]# sa
175 4.91re 0.12cp 0avio 530k
7 0.18re 0.08cp 0avio 1487k mrtg
2 0.00re 0.00cp 0avio 341k tput
11 0.19re 0.00cp 0avio 331k crond*
7 0.00re 0.00cp 0avio 273k qmail-queue
4 0.02re 0.00cp 0avio 4254k netscape-commun*
4 0.00re 0.00cp 0avio 563k date
3 0.00re 0.00cp 0avio 286k rmmod
2 0.00re 0.00cp 0avio 270k accton
출력내용의 접미사로 통계내용을 구분을 합니다.
none : 실행된 횟수. 가장 첫컬럼
re : 명령을 실행하는데 사용된 실제시간(분단위). 총경과시간.
cp : 명령을 실행하는데 사용된 총 CPU시간(분단위), system + user time
기본적으로 CPU 시간을 기준으로 정렬합니다.
avio : 실행시 평균 I/O 연산 횟수.
k : 평균 물리적 메모리 사용량. (kilobytes 단위). 여기서 평균이란 프로그램의
CPU시간에 근거함.
none : 프로그램이름. 가장 마지막 컬럼.
이로써 각 프로그램 별로 사용되는 CPU 용량과 메모리 용량 과 I/O 연산
을 알수가 있겠죠..
이런 식으로 CPU 시간, 메모리, I/O를 많이 사용하는 대표적인 프로그램이
어떤 것인지 알아낼 수 있습니다. 이걸 가지고 파일시스템 설계를 다시
할 수도 있고 I/O를 많이 사용하는 프로그램에 I/O 자원을 더 줄 수도
있을 것입니다. 큐잉 시스템을 사용하는 경우 CPU 집약적인 작업과
I/O 집약적인 작업의 큐를 부리할 수 있을 것입니다. CPU와 메모리를
한번에 많이 사용하는 프로그램을 여러개 띄우지 않을 것입니다.
I/O를 많이 사용하는 프로그램을 여러개 띄우지않도록 조심하게 될
것입니다. 그런데 CPU를 많이 사용하는 프로그램과 I/O를 많이 사용하는
프로그램을 동시에 띄우는것은 시스템에 미치는 영향이 다르기때문에
괜찮겠지요?
이런식으로 pacct 파일에 로그를 남기므로 해서 쉽게 모니터링할수
있는 반면에 무작위로 쌓이는 로그파일을 잘 관리 해야 되겠죠..
금방 디스크가 차는 사태가 일어날지도 모릅니다.
sa 명령어에 대해 조금더 알아보죠..
-a : 모든 명령
-b : 평균 CPU 시간에 따라 정열 -> CPU많이 쓰는 놈을 잡아라(cp)
-d : 평균 I/O 연산따라 정열 -> I/O많이 쓰는 놈(avio)
-i : savacct 요약 파일을 생략. 이건 sa -s 한 이후의 통계를 보여줌.
-k : 평균 메모리 사용량에 따라 정열 -> 메모리 많이 쓰는 놈(k)
-l : 시스템 cpu 시간과 사용자 cpu 시간을 분리해서 보여줌.
-m : 각 사용자에 따른 통계
-n : 실행숫자. 자주 실행된 놈 찾기
-s : 현재의 통계 기록을 savacct 파일에 병합하기
-t : CPU 시간 총경과시간(re)
위 옵션을 사용하여 통계관리 스크립트를 만들도록 하죠..
[root@zzang911 /bin]# vi account.sh
———————————————————
#!/bin/sh
# 기록할 파일명
file_name=`date +%Y%m%d`
#file_name=`date +%Y%m%d-%H%M%S` # 시분초까지 기록할 경우
# sa 프로그램 경로
sa=”/usr/sbin/sa”
# 기록할 디릭토리명
recorddir=/var/log/acct
# 기록할 디렉토리가 없을 경우 디렉토리 생성
if [ ! -d $recorddir ] ; then
mkdir $recorddir
fi
# 디렉토리/파일명 지정
pathname=$recorddir/$file_name
############# 파일 기록 ########################
# 날짜 기록 년월일
date +%Y/%m/%d > $pathname
# 하루간 기록(cron을 매일 돌릴 경우)
echo “=============================================== ” >> $pathname
echo ” Day’s Activity” >> $pathname
echo “=============================================== ” >> $pathname
$sa -i >> $pathname
# 전체 기록
echo “=============================================== ” >> $pathname
echo ” Total’s Activity” >> $pathname
echo “=============================================== ” >> $pathname
$sa >> $pathname
# 사용자 기록
echo “=============================================== ” >> $pathname
echo ” User Activity” >> $pathname
echo “=============================================== ” >> $pathname
$sa -m >> $pathname
# 현재의 통계 기록을 savacct 파일에 병합하기
$sa -s
이 스크립트를 돌리므로 해서 /var/log/acct 파일에 통계보고서가 생성이 된다.
cron 데몬에 이 스크립트를 등록 하면 매일 보고서가 생성이 되죠..
[root@zzang911 /root]# crontab -e
————————————————————
0 3 * * * /root/bin/account.sh
이제 ac 명령어에 대해 알아보도록 하죠..
ac 프로그램은 /var/log/wtmp 파일에서 사용자의 로그인, 로그아웃
에 관련된 데이타를 이용해 연결 시간을 출력합니다.
[root@zzang911 acct]# ac
total 3902.77
주요한 옵션으로 -p와 -d가 있습니다.
-p는 사용자별로 -d는 날짜별로 출력합니다.
두가지를 동시에 쓰면 날짜별, 사용자별로 분류해서 출력합니다.
이걸 이용하면 누가 가장 많이 시스템을 쓰는지 알 수 있겠지요?
참고로 사용자의 활동 상황을 추적할 수 있는 또 다른 프로그램으로는
last 와 lastcomm 등이 있습니다.
last는 사용자가 로그인한 정보를 보여줍니다.
이또한 /var/log/wtmp 파일을 이용하지요.
lastcomm은 위에서 설명한 패키지에 같이 포함이 되어있습니다.
이는 이전에 실행된 명령들에 관한 정보를 보여줍니다.
요 두가지 프로그램은 특정한 시기에 누가 로그인했는지 그리고
누가 프로그램을 실행했는지 알아내는데 도움을 줄 수 있습니다.
그렇지만 아주 정확히 찾아내기는 힘들겠죠?
이로써 시스템 모니터링에 대해 알아보았습니다. 재밌죠..^^;