IT STUDY LOG

[리눅스 운영체제] 09. 시스템 모니터링 본문

devops bootcamp 4/서비스 운영 기초

[리눅스 운영체제] 09. 시스템 모니터링

roheerumi 2023. 3. 14. 15:05

# 학습 목표

  • 시스템 모니터링
    • 시스템 모니터링에 사용되는 명령어 이해

# 학습 내용

1.  uname : 시스템과 커널의 정보

  • 개념
    • 시스템과 커널 정보 확인 가능
  • 사용 문법 : uname [옵션]
    옵션 의미
    -a  커널 이름, 노드 이름, 커널 릴리즈, 커널 버전, 프로세서, 하드웨어 플랫폼, 운영 체제 
    -s
    커널명 출력
    -n 네트워크 노드 호스트네임 출력
    -r 커널 릴리즈 출력
    -v 커널 버전 출력
    -m 기기 하드웨어 이름 출력
    -p 프로세서 타입 출력
     -i 하드웨어 플랫폼 출력
     -o
    운영체제 정보 출력
  • 사용 예시
roheerumi@devops:~$ uname
Linux

# -a 옵션 사용
roheerumi@devops:~$ uname -a
Linux devops 5.15.0-67-generic #74~20.04.1-Ubuntu SMP Wed Feb 22 14:52:34 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

 

2. top : 운영체제 작업 내역 모니터링

  • 개념
    • 현재 OS의 상태를 나타내주는 명령어로 프로세스가 OS 리소스를 얼마나 차지하고 있는지 확인 가능
  • 요약 영역 항목
    항목 의미
    load average cpu가 수행하는 작업 양을 순서대로 1, 5, 15분 간격 평균값으로 표시
    task 현재 프로세스들의 상태를 나타내는 영역(=process)
    cpu 사용량 사용률을 나타내며 유저 영역, 커널 영역, 우선순위 설정 등 각 영역 값의 총 합은 100%
    메모리 사용량 Mem: RAM의 메모리 영역, Swap: 가상 메모리로 Mem 사용량이 가득 차면 Swap 영역 사용
  • 사용 예시
top - 13:23:35 up 5 min,  1 user,  load average: 0.14, 0.18, 0.09
Tasks: 199 total,   1 running, 198 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.8 us,  0.4 sy,  0.0 ni, 98.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3923.8 total,   2547.1 free,    714.7 used,    662.0 buff/cache
MiB Swap:   1162.4 total,   1162.4 free,      0.0 used.   2990.2 avail Mem

 

3. ifconfig : 네트워크 기본 모니터링

  • 개념
    • 활성화된 네트워크 세부사항 표시 (비활성화된 영역은 표시되지 않음)
  • 출력 결과 항목
    항목 의미
    enp0s3 네트워크 인터페이스
    flags 네트워크 카드의 상태 표시
    mtu 네트워크 최대 전송 단위(Maximum Transfer Unit)
    inet 네트워크에 할당된 IP 주소
    netmask 네트워크에 할당된 넷마스크 주소
    broadcast 네트워크에 할당된 브로드캐스트 주소
    inet6 네트워크에 할당된 IPv6 주소
    prefixlen IP 주소에서 서브 넷 마스크로 사용될 비트 수
    scopeid IPv6의 범위. LOOPBACK / LINKLOCAL / SITELOCAL / COMPATv4 / GLOBAL
    ether 네트워크 인터페이스의 하드웨어 주소
    RX packets 받은 패킷 정보(Recieve)
    TX packets 보낸 패킷 정보(Transfer)
    collision 충돌된 패킷 수
    Interrupt
    네트워크 인터페이스가 사용하는 인터럽트 번호
  • 사용 예시
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 ****:****:****:****:****:****  prefixlen 64  scopeid 0x20<link>
        ether **:**:**:**:**:**  txqueuelen 1000  (Ethernet)
        RX packets 239  bytes 252221 (252.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 167  bytes 17037 (17.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

4. lsof : 열린 파일 목록 출력

  • 개념
    • list open files, 시스템에 열려있는 모든 파일에 대하나 정보 출력
  • 출력 결과 항목
    항목 의미
    COMMAND 실행 명령어
    PID 프로세스 ID
    USER 실행한 사용자
    FD 파일 디스크럽터
    - cwd : 현재 작업중인 디렉토리
    - rtd : 루트 디렉토리
    - mem : 메모리 사상 파일
    - txt : 프로그램 텍스트(데이터, 코드)
    TYPE 파일의 종류
    - DIR : 디렉토리
    - REG : 정규 파일
    - CHR : 캐릭터 특수 파일(문자 단위 입출력을 처리할 수 있는 장치를 파일 형태로 나타낸 것)
    - unix : 유닉스 도메인 소켓(유닉스 계열 운영체제에서 프로세스 간 통신을 위한 메커니즘 중 하나로 일반적인 소켓과 달리 네트워크를 통해 연결되는 것이 아니라, 로컬 머신에서만 사용)
    DEVICE 장치 번호
    SIZE/OFF 파일 크기나 오프셋
    NODE 노드 번호
    NAME 파일 경로 및 파일 이름
  • 사용 예시
root@devops:/home/roheerumi# lsof | more
COMMAND    PID  TID TASKCMD               USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
systemd      1                            root  cwd       DIR                8,5     4096          2 /
systemd      1                            root  rtd       DIR                8,5     4096          2 /
systemd      1                            root  txt       REG                8,5  1620224     924915 /usr/lib/syst
emd/systemd
systemd      1                            root  mem       REG                8,5  1369384     926149 /usr/lib/x86_
64-linux-gnu/libm-2.31.so
systemd      1                            root  mem       REG                8,5   178528     918662 /usr/lib/x86_
64-linux-gnu/libudev.so.1.6.17
systemd      1                            root  mem       REG                8,5  1575112     926678 /usr/lib/x86_
64-linux-gnu/libunistring.so.2.1.0
systemd      1                            root  mem       REG                8,5   137584     925879 /usr/lib/x86_
64-linux-gnu/libgpg-error.so.0.28.0
systemd      1                            root  mem       REG                8,5    67912     926098 /usr/lib/x86_
64-linux-gnu/libjson-c.so.4.0.0
systemd      1                            root  mem       REG                8,5    34872     925396 /usr/lib/x86_
64-linux-gnu/libargon2.so.1
systemd      1                            root  mem       REG                8,5   431472     925629 /usr/lib/x86_
64-linux-gnu/libdevmapper.so.1.02.1
systemd      1                            root  mem       REG                8,5    30936     926705 /usr/lib/x86_
64-linux-gnu/libuuid.so.1.3.0
--More--

 

5. netstat : 네트워크 상태 모니터링

  • 개념
    • network statistics, 현재 시스템에 연결된 네트워크 상태, 라우팅 테이블, 인터페이스 상태등 조회
  • 사용 문법 : netstat [옵션]
    옵션 의미
    -n 도메인 기반이 아닌 numeric, 즉 IP주소와 Port 번호로 출력
    -a 모든 네트워크 상태 출력(생략시 LISTEN 상태는 출력하지 않음)
    -t tcp 프로토콜만 출력
    -u upd 프로토콜만 출력
    -r 라우팅 테이블 출력
    -s 프로토콜별 통계 출력
    -l 리스닝 소켓 목록 출력
    -p 프로세스 id, 프로그램명 출력
    -i 네트워크 인터페이스 출력
  • 사용 예시
# 모든 tcp 프로토콜 프로세스를 PID, 프로그램명과 함께 IP/Port 번호로 출력 
roheerumi@devops:~$ netstat -antp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -


# tcp 프로토콜 프로세스 중 리슨 상태인 것만 출력
roheerumi@devops:~$ netstat -lt
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN     
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN
  • Netstat 명령어 관련 참고할 내용
    • 출력 결과 항목
      항목 의미
      Proto 사용한 프로토콜 종류
      Recv-Q 원격 호스트로부터 수신 버퍼에 저장한 데이터 크기
      Send-Q 원격 호스트로 전송하기 위해 송신 버퍼에 저장한 데이터의 크기
      Local address 로컬 호스트의 소켓 주소(IP : Port)
      Foreign address 원격에서 해당 서버로 접속한 소켓 주소(IP : Port)
      state 소켓의 상태
    • TCP 상태
      • 3-Way handshake (연결 확립 과정)
        • LISTEN : (서버) 서버가 포트를 열어두고 연결 요청을 대기하는 상태
        • SYN-SENT : (클라이언트) 클라이언트가 SYN TCP 패킷을 보낸 상태
        • SYN-RECEIVED : (서버) SYN 요청을 받은 상태로 서버는 클라이언트에게 SYN, ACK TCP 패킷 송신한 상태
        • ESTABLISHED : (서버, 클라이언트) 클라이언트가 ACK TCP 패킷을 전송해 연결이 확립된 상태

출처 :&nbsp;https://commons.wikimedia.org/wiki/File:3-way-handshake.JPG

    1. 4-Way handshake 
      1. FIN-WAIT-1 : (서버, 클라이언트) FIN, ACK 연결 종료 패킷을 전송한 상태
      2. CLOSE-WAIT : (서버, 클라이언트) FIN, ACK 패킷을 받아 ACK 패킷을 전송하고 내부적인 종료 처리를 수행하는 상태
      3. FIN-WAIT-2 : (서버, 클라이언트) ACK 패킷을 받아 LAST-ACK 패킷을 기다리는 상태
      4. LAST-ACK: (서버, 클라이언트) 내부적인 처리를 마치고 FIN, ACK 패킷을 전송한 상태
      5. TIME-WAIT : (서버, 클라이언트) 상대방에게 FIN, ACK 패킷을 받고 ACK 패킷을 전송한 뒤 2MSL 타이머동안 기다리는 상태 (상대편이 마지막 ACK 패킷을 수신하지 못한다면 재전송이 발생할 것이므로)
      6. CLOSED : (서버, 클라이언트) 연결이 종료된 상태
출처: 탑스팟 정보보안기사 실기(정일영, 강재순, 조현준 공저), https://www.howtogeek.com/513003/how-to-use-netstat-on-linux/

 

6. 기타

명령어 내용
vmstat  - sysstat 패키지 설치 필요
- 리눅스 운영체제에서 메모리, 프로세스, I/O, 스왑 사용 등의 시스템 상태를 모니터링하는 명령어
tcpdump - 리눅스에서 사용되는 패킷 분석 도구 중 하나
htop - htop 패키지 설치 필요
- top과 유사하나 더욱 사용자 친화적이며 상세한 정보 제공
iotop  - iotop 패키지 설치 필요
- 디스크 활동을 모니터링하는 명령어
- 디스크 I/O 작업을 수행하는 프로세스와 프로세스가 소비하는 I/O 대역폭을 실시간으로 모니터링 가능
iostat  - sysstat 패키지 설치 필요
- 디스크 I/O와 관련된 정보 확인 가능 이를 통해 디스크 성능 문제를 식별하고 최적화 가능
IPTraf  - 네트워크 모니터링을 위한 명령 줄 기반의 유틸리티로 인터페이스, IP, TCP, UDP, ICMP 및 기타 프로토콜 수준에서 네트워크 트래픽을 캡처하고 분석
psacct/acct  - 리눅스 시스템에서 프로세스 활동을 모니터링하고 기록하는 유틸리티
- 사용자가 시스템 내에서 실행한 프로세스의 사용량, 시간, CPU 사용량 등을 추적
monit  - 리눅스 시스템에서 프로세스 모니터링 및 자동 복구를 수행하는 데 사용
- 서버 문제점을 식별하고, 데몬, 서비스, 소켓 등의 프로세스를 지속적으로 모니터링하여, 문제가 발생하면 자동으로 프로세스를 재시작하거나 시스템 운영자에게 경고 메시지를 보내도록 구성
nethogs  - 네트워크 대역폭을 모니터링
- 프로세스별로 네트워크 사용량을 표시하여 네트워크 활동을 실시간으로 모니터링 
iftop - 네트워크 트래픽을 모니터링
- 네트워크 인터페이스에서 수신 및 송신되는 데이터의 양, 대역폭 사용량, 송신 및 수신 호스트의 IP 주소, 연결된 포트 등을 실시간으로 확인
monitorix - 시스템의 CPU 사용률, 메모리 사용률, 디스크 사용률, 네트워크 트래픽 및 기타 리소스 사용을 추적하고 시각적으로 표현
arpwatch - 네트워크 상에서 ARP 프로토콜을 사용하는 모든 장치들의 ARP 패킷을 수집하고 분석하여, MAC 주소와 IP 주소의 매핑 정보를 모니터링하고 기록하는 도구
suricata - NIDS
- 네트워크 감시,  공격 유형 탐지 및 차단, 로그 수집 및 로그 분석 도구를 통해 보안 정보 추출
vnstat - 네트워크 트래픽 모니터링 도구
- 송수신 트래픽 양, 전송 속도, 전송량, 패킷 수 등 측정 가능
- 일, 주, 월, 연간 보고서를 텍스트 HTML, 시각화 가능
nagios - 네트워크 상의 다른 장비들에 접근하여 상태를 수집
- 여러 가지 서비스를 모니터링할 수 있으며, 이를 위해 플러그인을 사용
- 모니터링 결과를 웹 인터페이스를 통해 제공
nmon
- nmon 패키지 설치 필요
- CPU, 메모리, 디스크, 네트워크 등 시스템 성능을 모니터링하고, 리소스 사용량, 부하, 병목 현상 등을 파악 가능
- 텍스트 기반의 인터페이스를 제공하며, CSV 형식으로 데이터를 저장 가능
collectl - 리눅스 성능 모니터링 도구
- 시스템 전반적인 성능 지표를 수집하고 이를 시각적으로 나타내어 시스템 성능을 분석 가능

- CPU, 메모리, 디스크, 네트워크 등 다양한 성능 지표를 제공
- 각 성능 지표마다 세부적인 정보도 확인 가능
출처 : https://www.tecmint.com/command-line-tools-to-monitor-linux-performance/, 챗GPT
Comments