Linux system monitoring

양승현·2023년 10월 28일
0

linux

목록 보기
20/20
post-thumbnail

Linux system monitoring

uname | 시스템 및 커널 정보

  • "uname"은 "Uninx Name"의 약어이다.
  • uname은 시스템의 정보를 표시하는데 사용되는 명령어로, 시스템의 이름 및 버전 정보를 출력한다.
  • uname 명령어의 기본 사용법은 아래와 같다.
# uname [OPTION]
[yang@yang ~]$ uname
Linux
  • 주요 옵션은 아래와 같다.
# 시스템의 모든 정보를 출력 | --all
$ uname -a 
Linux yang 4.18.0-373.el8.x86_64 #1 SMP Tue Mar 22 15:11:47 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
# 위 옵션(-a) 사용시 아래에 나열된 정보를 모두 포함하여 출력한다.

# 커널 이름 출력 | --kernal-name
$ umane -s
Linux

# 네트워크 노드 이름 출력(호스트 명) | --nodename
$ uname -n
yang

# 커널 릴리스 버전 출력 | --kernel-release
$ uname -r
4.18.0-373.el8.x86_64

# 커널 버전을 출력 | --kernel-version
$ uname -v
#1 SMP Tue Mar 22 15:11:47 UTC 2022

# 시스템 아키텍처를 출력 | --machine
$ uname -m
x86_64

# 프로세서(센트럴 프로세싱 유닛) 타입 출력 | --processor
$ uname -p
x86_64

# 하드웨어 플랫폼 정보 출력 | --hardware-platform
$ uname -i
x86_64

# 운영 체제 이름을 출력 | --operating-system
$ uname -o
GNU/Linux

# 위 명령어 외 도움말 혹은 버전 정보는 아래와 같다.
# 도움말을 표시하고 사용 가능한 옵션 목록 출력
$ uname --help
  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type (non-portable)
  -i, --hardware-platform  print the hardware platform (non-portable)
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit

# 버전 정보를 출력
$ uname --version
  • 위 명령어는 터미널에서 사용되며, 시스템 정보를 검색하거나 스크립트에서 특정 시스템 속성을 확인하는데 유용하다.

ifconfig | 네트워크 기본 모니터링

  • "ifconfig"는 "Interface Configuration"의 약어이다.
  • 네트워크 인터페이스를 설정하고 구성하기 위한 명령어로, 네트워크 인터페이스를 관리하는데 사용된다.
  • ifconfig 명령어를 사용했을 경우 나오는 의미는 아래와 같다.
[eth0] - 랜카드라고 불리는 유선 네트워크 인터페이스이다. 랜 카드가 2개가 있는 경우 eth0, eth1 등으로 나타난다.

[lo] - 루프 백 인터페이스로 자기 자신과 통신하는데 사용하는 가상 장치이다. IP가 127.0.0.1(localhost 주소)이며, IP주소는 서버에 하나씩 부여되는 것이 아니라 네트워크 인터페이스에 할당되기 때문에, 각 네트워크 인터페이스 마다 다른 IP주소를 가지고 있다.

[HWaddr] - 네트워크 인터페이스의 하드웨어 주소(MAC Address)를 나타낸다

[inetaddr] - 네트워크 인터페이스에서 할당한 IP 주소

[Bcast] - 브로드캐스트 주소

[Mask] - 넷마스크 주소

[MTU] - 네트워크 최대 전송 단위(Maxium Transfer Unit)

[RX packets] - 받은 패킷 정보

[TX packets] - 보낸 패킷 정보

[collision] - 충돌된 패킷 수

[Interrupt] - 네트워크 인터페이스가 사용하는 인터럽트 번호
  • ifconfig 명령어의 기본 사용법은 아래와 같다.
$ ifconfig [인터페이스] [옵션]
  • 주요 옵션은 아래와 같다.
# 네트워크 인터페이스의 이름을 지정한다. 
# 이 옵션을 사용하지 않으면, 모든 인터페이스의 정보가 출력된다.
$ ifconfig eth0 

# 네트워크 인터페이스를 활성화(up) 및 비활성화(down)한다. 아래 명령어로 eth0 인터페이스를 활성화 할 수 있다.
$ ifconfig eth0 up

# inet은 인터페이스의 IPv4 주소를 설정하거나 표시한다. 아래 명령어로 eth0 인터페이스의 IPv4 주소를 설정할 수 있다.
# IPv4 주소 설정
$ sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
# IPv4 주소 제거
$ sudo ifconfig eth0 down
# 주의 사항 | IPv4 주소는 네트워크 환경에 따라 고유해야 하며, 중복되어서는 안된다. IPv4 주소를 설정할 때 네트워크 서브넷과 함께 설정해야 한다. IPv4 주소를 변경할 때, 네트워크 관리자 또는 시스템 관리자의 승인이 필요할 수 있다.

# inet6은 인터페이스의 IPv6 주소를 설정하거나 표시한다.
# IPv6 주소 설정
$ sudo ifconfig eth0 inet6 add 2001:0db8:0:1::1/64
# IPv6 주소 제거
$ sudo ifconfig eth0 inet6 del 2001:0db8:0:1::1/64
# 주의 사항 | IPv6 주소를 설정할 때 주의가 필요하다. 네트워크 관리자 또는 시스템 관리자의 승인이 필요할 수 있다. 설정한 IPv6 주소는 시스템이 다시 시작되거나 인터페이스가 다시 활성화될 때 유지되지 않을 수 있으므로 필요에 따라 설정을 영구적으로 저장해야 할 수 있다.

# netmask는 서버넷 마스크를 설정한다.
# 서브넷 마스크 설정
$ sudo ifconfig eth0 netmask 255.255.255.0
# 주의 사항 | 서브넷 마스크는 IP 주소와 함께 사용되어 네트워크 구조를 정의한다. 올바른 서브넷 마스크를 설정해야 하며, 이는 네트워크 환경 및 요구사항에 따라 다를 수 있다. 서브넷 마스크 설정은 일반적으로 고급 네트워크 구성에서 사용되며, 기본적인 네트워크 설정에서는 자동으로 설정될 수 있다.

# broadcast는 브로드캐스트 주소를 설정한다,
# 브로드캐스트 주소 설정
$ sudo ifconfig eth0 broadcast 192.168.1.255
# 주의 사항 | 일반적으로 브로드캐스트 주소는 자동으로 계산되므로 사용자가 수동으로 설정할 필요가 없다. 서브넷 마스크 및 IP 주소를 올바르게 설정하면 시스템이 브로드캐스트 주소를 자동으로 결정한다. 브로드캐스트 주소는 네트워크 패킷을 모든 호스트에게 전달하기 위해 사용되며, 주의해서 변경해야 한다.

# hw는 하드웨어 주소(MAC 주소)를 설정한다.
# 하드웨어 주소 확인
$ sudo ifconfig eth0 hw ether 00:11:22:33:44:55
# 주의 사항 | 하드웨어 주소는 고유하게 식별되어야 하며, 일반적으로 제조사에 의해 할당된다. 하드웨어 주소를 수동으로 변경하면 네트워크 구성에서 문제가 발생할 수 있으므로 주의가 필요하다. 하드웨어 주소를 변경할 때, 네트워크 관리자 또는 시스템 관리자의 승인이 필요할 수 있다.

# MTU는 최대 전송 단위(Maximum Transmission Unit)를 설정한다.
# MTU 값을 1500으로 변경
$ sudo ifconfig eth0 mtu 1500
# 주의 사항 | # MTU 값을 조정할 때 주의해야 한다. 일반적으로 MTU 값은 1500인데, 이 값은 이더넷 네트워크에서 표준 값이다. MTU를 변경하면 네트워크 호환성 문제가 발생할 수 있으므로 변경 시 주의가 필요하며, MTU 값을 조정하는 이유는 네트워크 환경에 따라 데이터 패킷 크기를 최적화하여 성능을 향상시키기 위함이다.

# promisc는 프로미스큐어스 모드(모든 패킷을 수신)를 활성화한다.
# 프로미스큐어스 모드 설정
$ sudo ifconfig eth0 promisc
# 프로미스큐어스 모드 해제
$ sudo ifconfig eth0 -promisc
# 주의 사항 | 프로미스큐어스 모드를 사용하면 모든 패킷을 수신하기 때문에 네트워크 트래픽이 과도하게 많아질 수 있다. 주의해서 사용해야 하며, 프로미스큐어스 모드는 보안 및 개인 정보 보호 관점에서 주의해야 한다. 이 모드를 사용하여 다른 호스트의 네트워크 패킷을 볼 수 있으므로 합법적인 사용 용도에만 사용해야 한다.
  • 네트워크 인터페이스를 구성하고 모니터링하거나, 문제 해결 및 네트워크 설정을 수행하는데 유용하다.
  • 현재는 ip 명령어가 infconfig를 대체하고 있으며, 더 다양한 기능을 제공한다.

top | 운영체제 작업 내역 모니터링

  • top은 시스템 상태 및 리소스 사용량을 실시간으로 모니터링할 수 있으며, 문제 해경 및 성능 최적화에 도움이 된다.
  • CPU 및 Memory 사용량, Process 상태 등을 추적하고, 시스템의 동작을 모니터링 할 수 있다.
  • 명령어의 기본 사용법은 아래와 같다.
$ top
  • top은 일반적으로 화면 상단에는 시스템의 전반적인 정보를 표시하고, 하단에는 실행 중인 프로세스 목록을 표시한다.
  • 상단 정보는 아래와 같다.
# 시스템의 현재 상태, 업타임, 로드 평균 등의 정보가 출력된다.
$ top
top - 16:48:20 up 15 days,  6:46,  1 user,  load average: 0.09, 0.05, 0.01
Tasks: 242 total,   1 running, 241 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.9 us,  0.9 sy,  0.0 ni, 97.3 id,  0.1 wa,  0.2 hi,  0.2 si,  0.3 st ---------------- 상단 정보
MiB Mem :   7742.5 total,   3965.9 free,   1235.0 used,   2541.6 buff/cache
MiB Swap:   7168.0 total,   7168.0 free,      0.0 used.   6097.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  242516  15352   8992 S   0.7   0.2  18:13.70 systemd

## %Cpu(s)
[us] - 사용자가 사용중인 사용률

[sy] - 시스템이 사용중인 사용률

[ni] - 프로세스 우선 순위를 기반으로 사용되는 사용률(사용자 공간에서 사용된다.)

[id] - 현재 사용하지 않는 여유율

[wa] - 입출력을 기다리는 프로세스 사용률

[hi] - 하드웨어 인터럽트 사용률

[si] - 소프트웨어 인터럽트 사용률

[st] - 가상화 환경에서 손실률

- us(User)의 값이 높으면, 사용자 코드를 수행하는데 시간이 오래 걸리며, 내부적으로 계산을 많이 하고 있다는 것이다.
- sy(system)의 값이 높다면, 시스템에 의해 사용되고 았는 시간이 오래 걸리며, 프로세스들이 시스템 호출 혹은 I/O가 많다고 할 수 있다.
- id(idle)의 값이 0이라면 CPU를 100% 사용하고 았다는 의미이다.
  • 하단 정보인 프로세스 목록은 실행 중인 프로세스 목록이 표시되며, 각 열에는 아래와 같은 정보가 출력된다.
# 시스템의 현재 상태, 업타임, 로드 평균 등의 정보가 출력된다.
$ top
top - 16:48:20 up 15 days,  6:46,  1 user,  load average: 0.09, 0.05, 0.01
Tasks: 242 total,   1 running, 241 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.9 us,  0.9 sy,  0.0 ni, 97.3 id,  0.1 wa,  0.2 hi,  0.2 si,  0.3 st 
MiB Mem :   7742.5 total,   3965.9 free,   1235.0 used,   2541.6 buff/cache
MiB Swap:   7168.0 total,   7168.0 free,      0.0 used.   6097.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND ------------- 하단 정보
      1 root      20   0  242516  15352   8992 S   0.7   0.2  18:13.70 systemd

# PID(Process ID) - 각 프로세스의 고유 식별자

# USER - 프로세스를 실행하는 사용자

# PR - 프로세스의 우선순위

# NI - 프로세스의 nice 값

# VIRT - 가상 메모리 사용량

# RES - 물리 메모리 사용량

# SHR 공유 메모리 사용량

# S - 프로세스의 상태(R:실행중,S:슬립,Z:좀비 등)

# %CPU - CPU 사용률

# %MEM - Memory 사용률

# TIME+ - 누적 CPU 시간

# COMMAND - 실행 중인 명령 또는 프로세스 이름

- top 실행 화면에서 Shift키와 영문자를 누르면, 프로세스 목록을 특정 기준에 따라 정렬할 수 있다.
# 메모리 사용률로 정렬
[SHIFT + M]

# PID 기준으로 정렬
[SHIFT + N]

# CPU 사용률로 정렬
[SHIFT + P]

# 실행시간 기준으로 정렬
[SHIFT + T]

# 정렬 기준 변경 (오름차순 -> 내림차순, 내림차순 -> 오름차순)
[SHIFT + R]
  • 주요 옵션은 아래와 같다.
# Batch 모드 | -b
$ top -b -n 1 > top_output.txt
# 위 명령어는 top을 배치 모드로 실행하여, 출력을 터미널이 아닌 파일로 보내 실행 결과를 파일에 저장한다.

# 반복 실행 | -n <횟수>
$ top -n 5
# 위 명령어는 "-n 5"와 같이 지정된 횟수만큼 top을 반복(5번) 실행한다.

# 업데이트 간격 | -d <>
$ top -d 5
# 화면 갱신 간격을 설정하며, 각 업데이트 간격마다 시스템 상태가 갱신된다. "-d 5"와 같이 지정된 횟수 간격으로 업데이트를 한다.

# 특정 프로세스 모니터링 | -p <PID>
$ top -p 1234
# 지정한 PID(Process ID)에 해당하는 프로세스만 모니터링한다. top -p 1234는 PID 1234에 해당하는 프로세스를 모니터링한다.

# 특정 사용자의 프로세스만 보기 | -U <사용자>
$ top -U yang
# 지정한 사용자의 프로세스만 보여준다. -U yang은 yang이라는 사용자의 프로세스만 표시한다.

# 정렬 피드 지정 | -o <필드>
$ top -o %CPU
# 표시할 프로세스 목록을 지정한 필드(Ex: %CPU, %MEM)로 정렬한다. -o %CPU은 CPU 사용률에 따라 프로세스를 정렬한다.

# 기본 정렬 필드 지정 | -O <필드> 
$ top -O %MEM
# top 실행시 기본적으로 사용할 정렬 필드를 설정한다. -O %MEM은 메모리 사용률에 따라 프로세스를 정렬한다.

# 명령어 표시 | -c
$ top -c

# 도움말 표시 | -h
$ top -h
Usage:
  top -hv | -bcEHiOSs1 -d secs -n max -u|U user -p pid(s) -o field -w [cols]

free | 메모리 모니터링

  • 시스템의 메모리 사용 및 가용 리소스에 대한 정보를 제공하는 명령어로, 몇가지 옵션을 사용하여 출력 형식이나 특정 정보를 표시할 수 있다.
  • 명령어의 기본 사용법은 아래와 같다.
$ free
              total        used        free      shared  buff/cache   available
Mem:        7928360     1263784     4061656      117532     2602920     6244772
Swap:       7340028           0     7340028
  • 주요 옵션은 아래와 같다.
# byte 단위로 메모리를 표시 | --bytes
$ free -b

# KB(킬로바이트) 단위로 메모리를 표시 | --kilo
$ free -k

# MG(메가바이트) 단위로 메모리를 표시 | --mega
$ free -m

# GB(기가바이트) 단위로 메모리를 표시 | --giga
$ free -g

# 총 메모리 사용량을 표시 | --total
$ free -t

# 사용자 친화적인 형식으로 출력 | --human
$ free -h

$ free --help
Options:
 -b, --bytes         show output in bytes
     --kilo          show output in kilobytes
     --mega          show output in megabytes
     --giga          show output in gigabytes
     --tera          show output in terabytes
     --peta          show output in petabytes
 -k, --kibi          show output in kibibytes
 -m, --mebi          show output in mebibytes
 -g, --gibi          show output in gibibytes
     --tebi          show output in tebibytes
     --pebi          show output in pebibytes
 -h, --human         show human-readable output
     --si            use powers of 1000 not 1024
 -l, --lohi          show detailed low and high memory statistics
 -t, --total         show total for RAM + swap
 -s N, --seconds N   repeat printing every N seconds
 -c N, --count N     repeat printing N times, then exit
 -w, --wide          wide output

     --help     display this help and exit
 -V, --version  output version information and exi

vmstat | 시스템 정보 모니터링

  • 시스템 상태와 가상 메모리 사용에 대한 시스템의 전반적인 통계를 제공하는 명령어이며, 시스템 모니터링, 디스크 I/O 성능 분석, 메모리 사용량 및 슬립 캐시 정보를 얻을 수 있다.
  • 명령어의 기본 사용법은 아래와 같다.
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
  • 주요 옵션은 아래와 같다.
# 할성한 프로세스의 통계를 표시 | --active
$ vmstat -a

# 디스크 I/O 통계를 표시 | --disk
$ vmstat -d

# 파티션별 디스크 I/O 통계를 표시 | --partition
$ vmstat -p 

# 커널 슬랩 캐시 메모리의 사용량과 통계를 표시 | --slabs
$ vmstat -s

# 머신 코드, 데이터, 스택 및 사용 가능한 메모리 크기에 대한 정보를 표시 | --machine
$ vmstat -m

# 출력 행에 타임스탬프를 추가 | --timestamp
$ vmstat -t

# 출력되는 줄의 개수를 설정 | --num
$ vmstat -n 5
# "-n 5"와 같이 지정된 횟수의 샘플을 출력한다.

# vmstat 버전 정보를 표시 | --version
$ vmstat -V

$ vmstat -h
Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output
 -t, --timestamp        show timestamp
 -y, --no-first         skips first line of output
 -h, --help     display this help and exit
 -V, --version  output version information and exit

iostat | CPU, DISK 입출력 상태 모니터링

  • 디스크 및 CPU 활동을 모니터링하고 보고하는 명령어이며, 시스템 성능 및 리소스 사용률을 파악하는데 유용하다.
  • 명령어의 기본 사용법은 아래와 같다.
$ iostat
  • 주요 옵션은 아래와 같다.
# CPU 및 디스크 사용률에 대한 기본 통계를 표시 
$ iostat

# 특정 디스크 관련 정보 보기
$ iostat -dx /dev/sda

# 특정 시간 간격 설정 | -t
$ iostat -t 2
## 2초마다 업데이트를 표시

# 특정 횟수만큼 출력 표시 | -c
$ iostat -c 5
## 특정 횟수만큼 출력을 표시

netstat | 네트워크 상태 모니터링

  • 네트워크 연결 및 네트워크 인터페이스 정보를 표시하고 관리하는 Unix 및 Unix 계열 운영 체제에서 사용되는 명령어로, 네트워크 연결의 상태, 라우팅 테이블, 네트워크 인터페이스 통계 및 기타 네트워크 곤련 정보를 출력한다.
  • 명령어의 기본 사용법은 아래와 같다.
$ netstat
  • 주요 옵션은 아래와 같다.
# 전반적인 네트워크 연결 정보 확인, 현재 활성화된 네트워크 연경 정보 표시
$ netstat

## 특정 종류의 연결 정보 표시 | -t (TCP 연결), -u (UDP 연결) 및 -n (주소 및 포트 번호를 숫자로 표시)
# TCP 연결 정보 표시
netstat -t
# UDP 연결 정보 표시
netstat -u
# 주소 및 포트 번호를 숫자로 표시하여 모든 연결 정보 표시
netstat -n

# 라우팅 테이블 정보 표시 | -r
$ netstat -r

# 네트워크 인터페이스 통계 확인 | -i
$ netstat -i

# netstat의 출력에는 다음과 같은 정보가 포함될 수 있다
로컬 및 원격 주소 및 포트 번호
프로토콜 종류 (TCP 또는 UDP)
상태 (예: LISTEN, ESTABLISHED, CLOSE_WAIT 등)
데이터 전송 및 수신 통계
라우팅 테이블 항목 (라우팅 정보를 표시할 때)

df | 디스크 모니터링

  • 디스크 용량 및 사용량을 확인하는데 사용되는 명령어이며, 디스크 사용 정보를 표시하거나 특정 파일 시스템을 대상으로 조회할 수 있다.
  • 명령어의 기본 사용법은 아래와 같다.
$ df
Filesystem          1K-blocks     Used Available Use% Mounted on
  • 주요 옵션은 아래와 같다.
# 사람이 읽기 쉬운 형식으로 출력, 파일 시스템 크기 및 사용량을 KB, MB, GM 등으로 표시
$ df -h

# 파일 시스템 유형을 출력, 각 파일 시스템에 대한 유형 (ext4, nfs, tmpfs 등)을 표시
$ df -T

# 모든 파일 시스템의 총 용량과 사용량을 표시
$ df --total

# 특정 파일 시스템 유형만 표시, '-t ext4'는 ext4 파일 시스템만 출력한다. | --type=<파일시스템 유형>
$ df -t <파일시스템 유형>

# 특정 파일 시스템 유형을 제외하고 표시, -x ext4'는 ext4 파일 시스템을 제외하고 출력한다. | --exclude-type=<파일시스템 유형> 
$ df -x <파일시스템 유형>

0개의 댓글