[Linux] 모니터링 스크립트 작성

Austin·2024년 12월 10일

Linux

목록 보기
9/10

모니터링 쉘스크립트를 작성하고 이를 cron으로 10분마다 자동 실행되어 모니터링 할 수 있게 하는 방법이다.

monitoring.sh 스크립트 작성

아래와 같이 스크립트를 작성했다.

echo "#Architecture: $(uname -a)"
# 아키텍처와 커널 버전
echo "#CPU physical: $(grep -c '^physical id' /proc/cpuinfo)"
# 물리 프로세서 수
echo "#vCPU: $(grep -c '^processor' /proc/cpuinfo)"
# 가상 프로세서 수
free -m | awk '/Mem:/ {printf("#Memory Usage: %d/%dMB (%.2f%%)\n", $3, $2, $3/$2*100)}'
# 메모리 사용량
df -h --total | awk '/^total/ {printf("#Disk Usage: %s/%s (%s)\n", $3, $2, $5)}'
# 디스크 사용량
top -bn1 | grep '%Cpu' | awk '{printf("#CPU load: %.1f%%\n", $8)}'
# CPU 사용률
echo "#Last boot: $(who -b | awk '{print $3, $4}')"
# 마지막 부팅 시간
if lsblk | grep -q 'lvm'; then
    echo "#LVM use: yes"
else
    echo "#LVM use: no"
fi
# LVM 사용 여부
echo "#Connections TCP: $(ss -t | grep -c ESTAB) ESTABLISHED"
# 활성 TCP 연결 수
echo "#User log: $(who | wc -l)"
# 로그인한 사용자 수
ip=$(hostname -I | awk '{print $1}')
mac=$(ip link show | awk '/ether/ {print $2}' | head -n1)
echo "#Network: IP $ip ($mac)"
# 네트워크 정보
echo "#Sudo: $(journalctl _COMM=sudo | grep -c COMMAND) cmd"
# sudo 명령어 실행 횟수

스크립트 명령어 설명

명령어설명주요 옵션
uname시스템 정보 출력. 운영 체제 이름, 커널 버전, 아키텍처 등을 확인 가능.-a: 모든 시스템 정보 출력
-s: 커널 이름 출력
-r: 커널 릴리스 출력
grep파일이나 입력에서 특정 패턴 검색.-c: 일치하는 라인 수 출력
-i: 대소문자 구분 없이 검색
-w: 정확한 단어 검색
free메모리 사용량 정보를 표시. 총 메모리, 사용 중인 메모리, 여유 메모리 등을 확인 가능.-m: 메가바이트 단위로 출력
-h: 사람이 읽기 쉬운 형식으로 출력
df파일 시스템의 디스크 공간 사용량을 표시.-h: 사람이 읽기 쉬운 형식으로 출력
--total: 전체 디스크 사용량 합계 표시
top실시간으로 시스템 프로세스와 리소스 사용량을 모니터링.-b: 배치 모드로 실행
-n: 업데이트 횟수 설정
who현재 로그인한 사용자 정보 및 시스템 부팅 시간 확인.-b: 마지막 부팅 시간 표시
-q: 로그인된 사용자 수 표시
lsblk블록 장치 정보를 계층 구조로 표시.-a: 모든 장치 표시
-b: 크기를 바이트 단위로 표시
-o: 출력 컬럼 지정
ss소켓 통계 정보를 확인. TCP 연결 상태나 포트를 모니터링할 때 유용.-t: TCP 소켓만 표시
-a: 모든 소켓(리스닝 포함) 표시
hostname시스템의 호스트 이름 또는 IP 주소를 표시하거나 설정.-I: 모든 IP 주소 출력
-i: 호스트의 IP 주소 출력
ip네트워크 인터페이스 및 라우팅 테이블 관리.link show: 네트워크 인터페이스 정보 표시
addr show: IP 주소 정보 표시
journalctlsystemd 로그를 조회하고 필터링.-b: 특정 부팅의 로그만 표시
--since/--until: 특정 시간 범위의 로그 필터링

Cron으로 자동실행 설정하기

먼저 Cron이란? 이곳에 접속하여 Cron에 대해 알아보고 설치를 진행해보자.

Crontab 설정

chmod +x monitoring.sh 
crontab -e
*/10 * * * * /root/monitoring.sh | wall
  • chmod +x를 이용하여 monitoring.sh스크립트에 실행 권한을 부여한다.
    chmod로 권한 변경, +로 권한 추가, x는 실행권한을 말한다.
  • crontab -e로 편집한다.
    -e옵션은 등록, 편집 등을 하는 옵션이다.
  • */10 * * * * /root/monitoring.sh | wall 이 코드는 10분간격으로 root 폴더 안에있는 monitoring.sh를 실행하여 |를 통해 wall로 출력을 전달한다.

이렇게 실행 될 경우 wall로 인해 현재 로그인 되어 있는 모든 계정 터미널에 monitoring.sh 출력 결과가 전송되어 보여지게 된다.

스크립트 실행 중단 방법

crontab -e
#*/10 * * * * /root/monitoring.sh | wall
  • crontab -e로 편집한다.
  • */10 * * * * /root/monitoring.sh | wall 이 코드 앞에 #을 붙여 이 코드를 주석 처리한다.

0개의 댓글