DevOps 6일차 - 시스템 모니터링

문한성·2023년 3월 14일
0

부트캠프

목록 보기
9/123
post-thumbnail

시스템 모니터링

uname : 시스템과 커널의 정보

uname 명령어는 현재 운영체제의 정보를 출력하는 명령어입니다.

예시

uname -a

결과

Linux example.com 5.10.0-9-amd64 #1 SMP Debian 5.10.70-1 (2021-09-30) x86_64 GNU/Linux

위의 예시에서 -a 옵션은 모든 정보를 출력하도록 지정했습니다. 결과는 현재 실행 중인 시스템의 호스트 이름, 커널 버전, 빌드 날짜, 아키텍처 및 운영 체제 이름과 버전을 포함합니다.

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

리눅스나 유닉스 운영체제에서 실행되며, 현재 실행 중인 프로세스의 상태와 시스템 자원 사용률을 실시간으로 모니터링할 수 있습니다.

예시

top

결과

yamlCopy code
top - 10:29:20 up 15 days, 19:31,  2 users,  load average: 0.06, 0.08, 0.08
Tasks: 259 total,   1 running, 258 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.6 us,  0.4 sy,  0.0 ni, 97.8 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :  32109.9 total,   3039.8 free,  21608.6 used,   7441.5 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   8538.5 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
10182 user1     20   0 21.008g 0.212t  60928 S  33.3  68.3   9:14.89 java
 2045 user2     20   0 43.697g 0.090t  71068 S   1.3  29.0  48:05.44 python3
   780 root      20   0  1.286g 0.019t   9860 S   0.3   6.3  27:03.89 dockerd
   963 user3     20   0  8.014g 1.954g 192156 S   0.3   6.2 111:13.53 firefox
  1145 user1     20   0 404.5mb  8.6mb  67268 S   0.0   0.0   0:03.06 gnome-terminal-
  1166 user1     20   0  25.4mb  4.4mb   3724 S   0.0   0.0   0:00.29 bash
  2983 user1     20   0 247.2mb 30.2mb  20236 S   0.0   0.1   0:08.46 gvfsd-trash
  3242 user1     20   0  56.7mb  4.4mb   3896 S   0.0   0.0   0:00.04 ssh

위의 결과는 다음을 의미합니다.

  • 시스템 부하와 현재 시간
  • 현재 실행 중인 프로세스의 수
  • CPU 사용률(사용자, 시스템, IDLE 등)
  • 메모리와 스왑 공간 사용량

각 프로세스의 PID(Process ID), 사용자, CPU 사용률, 메모리 사용률, 실행 시간, 실행 파일 등이 표시됩니다.

위의 예시에서는 가장 CPU를 많이 사용하는 프로세스가 PID 10182인 java 프로세스이며, 가장 많은 메모리를 사용하는 프로세스는 PID 10182인 java 프로세스입니다. 또한, 현재 실행 중인 다른 프로세스들도 CPU 및 메모리 사용률이 표시되어 있습니다.

top 명령어는 시스템 자원 사용량 모니터링과 디버깅, 성능 분석 등에 유용하게 사용됩니다.

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

네트워크 인터페이스의 설정 정보를 확인하고 변경하는 유닉스 및 리눅스 명령어입니다. 이 명령어는 "ip addr"로 대체될 수 있습니다.

예를 들어, 터미널에서 "ifconfig"를 입력하면 현재 시스템에서 사용 가능한 네트워크 인터페이스와 각 인터페이스의 IP 주소, MAC 주소, 네트워크 마스크 등의 정보를 확인할 수 있습니다.

사용 예시

ifconfig

위 명령어를 실행하면, 시스템에서 사용 가능한 네트워크 인터페이스와 해당 인터페이스의 IP 주소, MAC 주소, 네트워크 마스크 등의 정보를 확인할 수 있습니다.

  • enp0s3 : 네트워크 인터페이스
  • flags : 네트워크 카드의 상태 표시
  • mtu : 네트워크 최대 전송 단위(Maximum Transfer Unit)
  • inet : 네트워크에 할당된 IP 주소
  • netmask : 네트워크에 할당된 넷마스크 주소
  • broadcast : 네트워크에 할당된 브로드캐스트 주소
  • inet6 : 네트워크에 할당된 IPv6 주소
  • prefixlen : IP 주소에서 서브 넷 마스크로 사용될 비트 수
  • scopeid : IPv6의 범위. LOOPBACK / LINKLOCAL / SITELOCAL / COMPATv4 / GLOBAL
  • ether : 네트워크 인터페이스의 하드웨어 주소
  • RX packets : 받은 패킷 정보
  • TX packets : 보낸 패킷 정보
  • collision : 충돌된 패킷 수
  • Interrupt : 네트워크 인터페이스가 사용하는 인터럽트 번호

lsof : 열린 파일 목록 출력

lsof는 "list open files"의 약자로, 현재 시스템에서 열려있는 파일과 해당 파일을 열고 있는 프로세스를 보여주는 유틸리티 명령어입니다. lsof는 다음과 같이 사용할 수 있습니다:

lsof [옵션] [파일명 또는 프로세스 ID]

옵션:

  • c: 지정한 프로세스명과 관련된 파일을 보여줍니다.
  • i: 지정한 IP 주소나 포트를 사용하는 프로세스를 보여줍니다.
  • p: 지정한 프로세스 ID에 해당하는 파일을 보여줍니다.
  • u: 지정한 사용자가 열고 있는 파일을 보여줍니다.
  • g: 지정한 그룹 ID를 가진 사용자가 열고 있는 파일을 보여줍니다.
  • d: 지정한 파일 디스크립터를 사용하는 파일을 보여줍니다.
  • n: DNS 역변환을 하지 않습니다.
  • P: 포트 번호 대신 포트 이름을 표시합니다.
  • t: 지정한 터미널과 관련된 파일을 보여줍니다.

예시:

  • lsof: 열려있는 모든 파일을 보여줍니다.
  • lsof /etc/passwd: /etc/passwd 파일을 열고 있는 프로세스를 보여줍니다.
  • lsof -i :80: 80번 포트를 사용하는 프로세스를 보여줍니다.
  • lsof -c ssh: ssh 프로세스가 열고 있는 파일을 보여줍니다.
  • lsof -p 1234: 1234번 프로세스가 열고 있는 파일을 보여줍니다.
  • lsof -u user1: user1이 열고 있는 파일을 보여줍니다.

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

"netstat" 명령어는 네트워크 연결 상태를 확인하는 명령어로, 현재 시스템에서 열려있는 네트워크 포트와 연결된 프로세스, TCP/UDP 연결 상태 등을 확인할 수 있습니다.

다음은 netstat 명령어의 사용법과 옵션입니다.

netstat [옵션]

주요 옵션:

  • a : 모든 연결 및 수신 대기 포트를 표시합니다.
  • n : 주소 및 포트 번호를 숫자로 표시합니다.
  • p : 연결된 프로세스의 이름과 ID를 표시합니다.
  • r : 라우팅 테이블 정보를 표시합니다.
  • t : TCP 연결 정보를 표시합니다.
  • u : UDP 연결 정보를 표시합니다.
  • l : 수신 대기 중인 포트만 표시합니다.
  • c : 1초마다 명령어를 실행하여 연결 상태를 지속적으로 표시합니다.
  • s : 프로토콜별 통계 정보를 표시합니다.

sar

시스템 성능 모니터링에 사용되는 리눅스 명령어입니다. 'System Activity Reporter'의 약어로, 일정한 시간 간격으로 CPU, 메모리, 디스크 I/O, 네트워크 I/O 등의 시스템 성능 정보를 수집하고 보고합니다.

'sar' 명령어는 다음과 같이 사용할 수 있습니다.

  1. CPU 사용량 모니터링: 'sar -u' 명령어를 사용하여 CPU 사용량을 모니터링할 수 있습니다.
  2. 메모리 사용량 모니터링: 'sar -r' 명령어를 사용하여 메모리 사용량을 모니터링할 수 있습니다.
  3. 디스크 I/O 모니터링: 'sar -b' 명령어를 사용하여 디스크 I/O를 모니터링할 수 있습니다.
  4. 네트워크 I/O 모니터링: 'sar -n' 명령어를 사용하여 네트워크 I/O를 모니터링할 수 있습니다.

또한, 'sar' 명령어는 다양한 옵션을 사용하여 보고서를 생성하고 저장할 수 있습니다. 예를 들어, 'sar -o report.out' 명령어를 사용하여 보고서를 report.out 파일로 저장할 수 있습니다.

vmstat

Virtual Memory Statistics의 약자로, Linux/Unix 운영체제에서 시스템의 가상 메모리, 프로세스, CPU, I/O 등의 성능을 모니터링하는 명령어입니다.

vmstat 명령어의 일반적인 사용법은 다음과 같습니다.

vmstat [옵션] [시간 간격] [반복 횟수]
  • 옵션: vmstat 명령에 대한 다양한 옵션을 제공합니다.
  • 시간 간격: 두 번째 인자로는 vmstat 명령을 실행한 후 출력을 보여주는 시간 간격을 초 단위로 입력합니다.
  • 반복 횟수: 마지막 인자로는 vmstat 명령을 실행하는 반복 횟수를 입력합니다.

다음은 간단한 예시입니다.

vmstat 1 

위의 예시는 1초마다 5번의 출력을 보여줍니다. 각 출력은 시스템의 CPU 사용률, 메모리 사용률, 가상 메모리, 디스크 I/O, 스왑, 프로세스 수 등의 정보를 제공합니다.

df

리눅스나 유닉스 운영체제에서 파일 시스템의 디스크 사용 현황을 보여주는 명령어입니다.

df 명령어의 일반적인 사용 방법은 다음과 같습니다:

df [옵션] [경로]

여기서 [옵션]은 df 명령어의 기능을 추가하거나 변경하는데 사용되는 것으로, -h 옵션은 사용 용량을 쉽게 이해할 수 있는 단위로 표시하고 -T 옵션은 파일 시스템의 유형을 함께 출력합니다.

예를 들어, /dev/sda1 파일 시스템의 디스크 사용 현황을 보려면 다음과 같이 입력합니다:

df -h /dev/sda1

이 명령어는 /dev/sda1 파일 시스템의 사용 용량, 남은 용량, 전체 용량 등을 보여줍니다.

또 다른 예로는 모든 파일 시스템의 디스크 사용 현황을 보여주는 df -h 명령어입니다. 이 명령어는 모든 파일 시스템의 사용 용량, 남은 용량, 전체 용량 등을 쉽게 확인할 수 있습니다.

iostat

디스크 I/O와 CPU 사용률 등의 시스템 활동에 대한 보고서를 생성하는 명령어입니다. 이를 통해 시스템의 성능을 분석하고 병목 현상을 파악할 수 있습니다.

다음은 iostat 명령어의 예시입니다.

$ iostat -x 5 3

위 명령어는 5초마다 3번의 보고서를 생성하며, 각 보고서는 디스크 I/O 활동과 CPU 사용률 등의 정보를 보여줍니다.

보고서에는 다음과 같은 정보가 포함됩니다.

  • CPU 사용률
  • 디스크 I/O 정보
  • 디스크 사용률
  • 총 I/O 요청 수, 블록 당 평균 I/O 크기 및 I/O 대기 시간 등

이를 통해 시스템의 성능을 실시간으로 모니터링하고, 문제가 있는 부분을 파악하여 개선할 수 있습니다.

free

리눅스나 유닉스 운영체제에서 시스템 자원의 사용 정보를 제공하는 명령어입니다. 주로 시스템의 메모리 사용 정보를 확인하는 데 사용됩니다.

예를 들어, 다음과 같이 터미널에 입력하여 시스템의 메모리 사용 정보를 확인할 수 있습니다:

free -h

위 명령어는 시스템의 메모리 사용 정보를 "human-readable"한 형태로 출력합니다. 예를 들어, 메모리의 총 용량, 사용 중인 용량, 여유 용량 등을 "GB" 단위로 출력합니다.

awk

awk는 텍스트 처리 도구로, 텍스트 파일에서 데이터 추출, 변환, 요약 등 다양한 작업을 수행할 수 있는 명령어입니다. awk는 행 단위로 데이터를 처리하며, 행 내에서 필드를 구분하여 작업을 수행합니다.

아래는 awk 명령어의 예시입니다.

  • 텍스트 파일에서 필드 추출하기

예시 파일: data.txt

John    25    Male
Jane    30    Female
Tom     40    Male

커맨드

awk '{print $1}' data.txt

출력

John
Jane
Tom
  • 조건에 맞는 데이터 추출하기

예시 파일: data.txt

John    25    Male
Jane    30    Female
Tom     40    Male

커맨드

awk '$3 == "Male" {print $1}' data.txt

출력

John
Tom
  • 텍스트 파일에서 데이터 요약하기

예시 파일: data.txt

John    25    Male
Jane    30    Female
Tom     40    Male

커맨드

awk '{sum += $2} END {print sum/NR}' data.txt

출력

31.6667

위 커맨드는 나이 필드의 평균을 구합니다. awk에서 변수는 $로 시작하며, NR은 awk가 처리한 전체 라인 수를 나타냅니다. END는 awk가 파일의 끝까지 데이터를 처리한 후에 실행되는 명령어를 나타냅니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글