모니터링 쉘스크립트를 작성하고 이를 cron으로 10분마다 자동 실행되어 모니터링 할 수 있게 하는 방법이다.
아래와 같이 스크립트를 작성했다.
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 주소 정보 표시 |
| journalctl | systemd 로그를 조회하고 필터링. | -b: 특정 부팅의 로그만 표시--since/--until: 특정 시간 범위의 로그 필터링 |
먼저 Cron이란? 이곳에 접속하여 Cron에 대해 알아보고 설치를 진행해보자.
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 이 코드 앞에 #을 붙여 이 코드를 주석 처리한다.