본문 바로가기

리눅스

라즈베리파이에 쿠버네티스 설치 후 CPU 온도, 메모리 사용량, 디스크 사용량, 파드(Pod) 및 주요 서비스 상태 출력 하기

라즈베리파이를 사용하시는 분들중에 소규모 서버로 운영하시는 분들이 꽤 있으실텐데요.

 

이번에는 관리를 위해 내 라즈베리파이 서버의 CPU 온도, 메모리 사용량, 디스크 사용량, 주요 서비스 등 을 정리해서 보여주는 스크립트를 만들어보았습니다.

 

필요하신분들은 유용하게 사용하시면 될 것 같습니다.

 

쉘을 텔레그램 봇 또는 다른 API 와 연동하여 휴대폰이나 메일로 정보를 받아볼 수 있도록 구현하는 것도 좋은 방법입니다!

(전 텔레그램 봇으로 연동해서 때때로 정보를 받게 해 두었습니다)

 

 

일단 아래 두 쉘 스크립트가 필요합니다.

 

 

server_status.sh

#!/bin/sh

(echo -n "CPU: " && \
expr $(cat /sys/class/thermal/thermal_zone0/temp) / 1000 && \
free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }' && \
df -h | grep -i /dev/root | awk {'print "Disk root  Avail: "$4"/"$2" ("$5" used)"'} && \
df -h | grep -i sda1 | awk {'print "Disk SSD Avail: "$4"/"$2" ("$5" used)"'} && \
echo -n "Kubelet Service: " && systemctl status kubelet $1 | awk 'NR==5' | awk '{print $2}' && \
kubectl get pod -n prd | grep "deployment" | awk '{print "APP: " $3 "  RDY: " $2 "  RST: " $4}' && \
kubectl get pod -n prd | grep "postgres" | awk '{print "DB:   " $3 "  RDY: " $2 "  RST: " $4}' && \
echo -n "Fail2ban FAILED: " && sudo fail2ban-client status sshd | grep Currently\ failed | awk {'print ""$5""'} && \
echo -n "Fail2ban BANNED: " && sudo fail2ban-client status sshd | grep Currently\ banned | awk {'print ""$4""'} && \
echo -n "Running Process: " && sh /usr/script/ps_running_check.sh && \
echo "" && \
uptime -p && date)

 

ps_running_check.sh

RESULT1=`ps cax | grep -w ffmpeg`
RESULT1_1=`ps cax | grep -w ffmpeg | wc -l`
RESULT2=`ps cax | grep -w badblocks`
RESULT3=`ps cax | grep -w cp`
RESULT4=`ps cax | grep -w avconv`
RESULT5=`ps cax | grep -w scp`
RESULT6=`ps cax | grep -w php`  # Nextcloud preview generator for photos
RESULT7=`ps cax | grep -w rsync`

if [ "${RESULT1:-null}" = null ]; then
    echo -n ""
else
    if [ `expr $RESULT1_1 / 1` -eq 1 ]; then
        echo -n "ffmpeg"
    elif [ `expr $RESULT1_1 / 1` -eq 2 ]; then
        echo -n "ffmpeg x2"
    else
        echo -n "ffmpeg x3 or higher"
    fi
fi

if [ "${RESULT2:-null}" = null ]; then
    echo -n ""
else
    echo -n "badblocks "
fi

if [ "${RESULT3:-null}" = null ]; then
    echo -n ""
else
    echo -n "cp "
fi

if [ "${RESULT4:-null}" = null ]; then
    echo -n ""
else
    echo -n "avconv "
fi

if [ "${RESULT5:-null}" = null ]; then
    echo -n ""
else
    echo -n "scp "
fi

if [ "${RESULT6:-null}" = null ]; then
    echo -n ""
else
    echo -n "php "
fi

if [ "${RESULT7:-null}" = null ]; then
    echo -n ""
else
    echo -n "rsync "
fi

 

server_status.sh 스크립트를 실행하면 현재 돌고 있는 프로세스 확인을 위해 ps_running_check.sh 이 돌면서 주요 프로세스를 체크 합니다.

(실행은 server_status.sh 만 하시면 됩니다)

 

결과는 아래 처럼 나옵니다.

 

CPU: 44 
Memory Usage: 866/7875MB (11.00%) 
Disk root  Avail: 34G/59G (40% used) 
Disk SSD Avail: 731G/916G (16% used) 
Kubelet Service: active 
APP: Running  RDY: 1/1  RST: 0 
DB:   Running  RDY: 1/1  RST: 1 
Fail2ban FAILED: 0 
Fail2ban BANNED: 0 
Running Process: scp
up 3 weeks, 6 days, 6 hours, 12 minutes 
Mon 18 Jan 20:29:31 KST 2021 

 

 

사용하시는 프로세스가 다 다를테니 수정해서 사용하시면 되겠습니다!

 

ps_running_check.sh 에는 변수에 넣어둔 프로세스만 확인을 하여 실행중이면 Running Process: 에 표기를 해 주므로 주로 사용하시는 프로세스들만 변수에 넣어 주시고 if 문 echo 에 출력 문구를 정해 주시면 됩니다.

 

본인이 원하는 출력으로 맞추기 위해선 커스터마이징이 좀 필요하겠지만 도움이 될 까 싶어서 올려두었습니다.

 

 

끝.