ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LINUX] CPU, 메모리 모니터링 Logger 스크립트
    LINUX 2022. 11. 28. 16:31

    * 개요

    자원 모니터링 중 임계치를 초과 했을때, 어떤 프로세스가 자원을 많이 차지 했는지 확인 할 필요가 있다. 물론 여러가지 툴을 통해서 가능하나 본 포스팅에서는 스크립트로 간단하게 로깅 하는 방법을 설명 한다.

     

    * 쉘스크립트

    : 1번 파라미터 --> CPU가 얼만큼 사용 됫을때 로깅 할 것인지

    : 2번 파라미터 --> 메모리가 얼만큼 사용 됫을때 로깅 할 것인지

    : 3번 파라미터 --> 보존할 파일 개수 (로그파일이 터져나는것을 방지 하기 위해 보존할 파일 개수 지정)

    #!/bin/bash
    # sh PROCESS_CAPTURE.sh [cpu limits by percent] [rolling log file count] [log path]
    
    #CPU 사용율
    CPU_PERCENT=`top -b -n 1 | grep -i cpu\(s\)| awk -F, '{print $4}' | tr -d "%id," | awk '{print int(100-$1)}'`
    
    #MEMORY 사용율
    MEMORY_TOTAL=`free | grep ^Mem | awk '{print $2}'`
    MEMORY_NOMINAL_USED=`free | grep ^Mem | awk '{print $4}'`
    MEMORY_ACTUAL_USED=`free | grep ^Mem | awk '{print $7}'`
    
    MEMORY_NOMINAL_PERCENT=$((100*(MEMORY_TOTAL-MEMORY_NOMINAL_USED)/MEMORY_TOTAL))
    MEMORY_ACTUAL_PERCENT=$((100* (MEMORY_TOTAL-MEMORY_ACTUAL_USED)/MEMORY_TOTAL))
    
    TIME_COUNTER=0
    
    SHELL_PATH=$4
    cd $SHELL_PATH
    
    while [ $( echo "$TIME_COUNTER < 60" | bc -l) -eq 1 ]
    do
        START_TIME=`date +%s.%N`
    
        if [ $CPU_PERCENT -gt $1 ] || [ $MEMORY_ACTUAL_PERCENT -gt $2 ]; then
    
            # 생성할 파일은 YYYYMMDD_hhmmss.log로 생성 한다.
                YMDTMS=$(date +%G%m%d_%H%M%S)
                LOGFILE=$YMDTMS'.log'
    
                `top -b -n 1 >> "$LOGFILE"`
        fi
    
        # 현재 폴더에 파일이 00개 보다 많을때 생성 전에 정리 해 준다.
        FILE_CNT=`ls -la . | grep '.*[.]log' | wc -l`
    
        if [ $FILE_CNT -gt $3 ]; then
            `ls -t . | grep '.*[.]log' | tail -n "+$3" | xargs rm -f`
        fi
    
        sleep 10s
    
        END_TIME=`date +%s.%N`
        DURATION=$( echo "$END_TIME - $START_TIME" | bc -l )
    
        TIME_COUNTER=$( echo "$TIME_COUNTER + $DURATION" | bc -l)
    done

    * Cron JOB 등록

    > crontab -e
    
    # 예제 > 매 1분마다 실행
    * * * * * /etc/cron_script/스크립트파일명.sh
    단위  내용
     분  분(0~59)을 설정. *을 설정한 경우 1분 단위로 실행.
     시  시간(0~23)을 설정. *을 설정한 경우 매시간 실행.
     일  일(1~31)을 설정. *을 설정한 경우 매일 실행.
     월  월(1~12)을 설정. *을 설정한 경우 매달 실행.
     요일  요일(0~7)을 설정. *을 설정한 경우 월요일 부터 일요일까지 매일 실행.
     명령어또는 스크립트  실행할 명령어 또는 프로그램등을 설정.

     

    : Cron 서비스 재실행

    > systemctl restart crond.service

    : Cron 실행 로그 확인

    > cat /var/log/cron

     

    * 참고자료

    https://ponyozzang.tistory.com/402

     

    리눅스 crontab 시간 설정 방법 예제 샘플

    crontab 파일에 시간을 설정하는 방법을 알아보겠습니다. crontab 서식분 시 일 월 요일 명령어또는 스크립트 단위 내용 분 분(0~59)을 설정. *을 설정한 경우 1분 단위로 실행. 시 시간(0~23)을 설정. *을

    ponyozzang.tistory.com

     

    'LINUX' 카테고리의 다른 글

    [SSL] SSL 만료일 체커 (feat. Github)  (0) 2023.06.07
    [보안] CentOS7의 OS 보안조치  (0) 2023.01.09
    [REDHAT] 리눅스(RHEL8) NFS 구축 및 마운트  (0) 2022.12.27
Designed by Tistory.