열렬히.뛰기

born2beroot - 시스템 정보 출력

école 42 > born2beroot > born2beroot - 시스템 정보 출력

mandatory의 마지막 파트라고 할 수 있는 부분이다.

서버의 상태를 작성하는 쉘 스크립트를 만들고, 이를 10분에 한 번씩 띄워줘야 한다.

작업 예약 스케쥴러

cron

  • 특정한 시간에 or 특정 시간마다 어떤 작업을 자동으로 수행하게 하는 명령어
  • cron 프로세스는 /etc/crontab 파일에 설정된 것을 읽어 작업을 수행

설정하기

다음 명령어를 가지고 crontab을 편집할 수 있는 에디터를 열 수 있다.

에디터가 없다고 나온다면 그냥 1번 누르고 엔터 치자.

bash
sudo crontab -u root -e
  • -u 옵션은 해당 사용자의 crontab을 설정하도록 지정함.
  • root는 해당 사용자를 지정합니다.
  • -e 옵션은 crontab을 수정하기 위한 에디터를 열도록 지정합니다.

# m h dom mon dow command 이라고 적혀 있는 부분 밑에 다음과 같이 적는다.

bash
------------------------------------
*/10 * * * * sh /path/to/script

상태 표시기 만들기

요구사항

monitoring.sh를 만들어보자. 요구사항은 다음과 같다.

  1. 운영체제의 아키텍쳐와 커널 버전
  2. 실제 프로세서의 갯수
  3. 가상 프로세서의 갯수
  4. 서버에서 현재 사용 가능한 RAM 및 사용률(백분율)
  5. 서버에서 현재 사용 가능한 메모리 및 사용률(백분율)
  6. 현재 cpu의 사용률
  7. 마지막 재부팅 시간과 날짜
  8. LVM의 활성 여부
  9. 연결된 네트워크 수
  10. 서버를 쓰는 사용자 수
  11. ipv4와 mac 주소
  12. sudo로 실행되는 command 갯수

설계하기

bash
# 운영체제의 아키텍쳐와 커널 버전
uname -a
  • 명령어 uname : 시스템 정보 출력
  • 옵션 -a : all의 줄임말.
bash
# 실제 프로세서의 갯수
grep "physical id" /proc/cpuinfo | sort | uniq | wc -l
# 가상 프로세서의 갯수
grep "^processor" /proc/cpuinfo | wc -l
  • 프로세서에 관한 정보는 /proc/cpuinfo 에 있다.
  • physical id 뒤에 실제 프로세서의 갯수가 나온다.
    • 정렬하고, 중복된 것을 없앤 다음, 갯수를 센다.
  • processor 뒤에 가상 프로세서의 갯수가 나온다.
    • 갯수를 센다.
bash
# 서버에서 현재 사용 가능한 RAM 및 사용률(백분율)
free -m | awk '$1 == "Mem:" { print $2 }'
free -m | awk '$1 == "Mem:" { print $3 }'
free -m | awk '$1 == "Mem:" { printf("%.2f\n"), $3/$2*100 }'
  • RAM에 관한 부분은 명령어 free를 입력하면 나온다.
  • 옵션 -m을 이용하면 단위를 mb로 바꿀 수 있다
bash
# 서버에서 현재 사용 가능한 메모리 및 사용률(백분율)
df -Bg | grep '^/dev/' | grep -v '/boots$' | awk '{ft += $2} END {print ft}'
df -Bm | grep '^/dev/' | grep -v '/boots$' | awk '{ut += $3} END {print ut}'
df -Bm | grep '^/dev/' | grep -v '/boots$' | awk '{t += $2}{ut += $3} END {printf(%d), ut/ft*100}'
  • df : 리눅스 시스템 전체의 (마운트 된) 디스크 사용량을 확인.
    • 파일시스템, 디스크 크기, 사용량, 여유공간, 사용률, 마운트지점 순으로 표기
    • -B : 지정한 크기(SIZE)를 블록단위로 정하여 용량 표시하는 옵션
    • -g : 단위를 GB로
    • -m : 단위를 MB로
bash
# cpu 실행률
mpstat | grep 'all' | awk '{ print 100 - $12 }'
  • mpstat : 사용가능한 CPU와 Core 별 사용량을 출력하는 명령어
  • 미리 sysstat을 설치해야 한다.
bash
# 마지막 재부팅 시간과 날짜
who -b | awk '$1 == "system" { printf("%s %s\n", $3, $4) }'
  • who : 호스트에 로그인한 사용자 정보 출력
    • -b : 마지막 시스템 부팅 시간을 출력하는 옵션
bash
# LVM의 활성 여부
lsblk | grep "lvm" | wc -l | awk '{ if ($1 > 0) print "yes"; else print "no"}' 
  • lsblk : 리눅스 디바이스 정보를 출력하는 명령어
bash
# 활성 연결 수
ss -t | grep ESTAB | wc -l
  • ss : 소켓 상태를 조회할 수 있는 유틸리티로 netstat과 비슷한 역할을 수행한다.
bash
# 서버를 사용하는 사용자 수
users | wc -w
  • users : 사용자
bash
# 서버의 IPv4 주소와 MAC 주소
hostname -I
ip addr | sed -n '8p' | awk '{print $2}'
  • hostname: 시스템 이름을 확인하고 설정하는 명령어
    • I: 호스트의 IP 주소를 출력하는 옵션
  • ip: iproroute2 패키지의 일부로, 주소와 경로를 할당하고, ARP 캐시를 관리하는 등 다양한 용도로 제공.
bash
# sudo 프로그램으로 실행된 명령의 수
journalctl _COMM=sudo | grep COMMAND | wc -l
  • journalctlsystemd의 서비스 로그를 확인할 수 있으며, systemd-journald.service

    의해서 systemd의 정보들을 분석한다.

  • _COMM=sudo: 특정로그(sudo) 보기

명령어: wall

wall이란?

모든 터미널로 메세지를 보내는 명령어

사용법

  • 단순히 wall만 입력하면 입력모드가 됨. 입력 후 Ctrl + D 를 누르면 전송
  • wall 명령어 바로 뒤에 써서 메시지를 보낼 수도 있음.
  • wall을 통해 터미널에게 작업을 시킬 수도 있음.
bash
wall $(ls -al)

완성코드

펼쳐보기
bash
arc=$(uname -a)
physical=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)


wall "#architecture: $arc
#physical cpu : $physical
#virtual cpu : 
#
#
"