'tail' 명령어로 Linux 로그 파일의 실시간 변경 사항 모니터링 방법

LinuxBeginner
지금 연습하기

소개

리눅스 로그는 시스템 모니터링 및 문제 해결의 초석이며, 시스템 내부 작동에 대한 귀중한 통찰력을 제공합니다. 이 튜토리얼에서는 리눅스 로그의 기본 개념과 다재다능한 'tail' 명령어를 사용하여 이를 효과적으로 모니터링하는 방법을 살펴봅니다.

로그 파일이 어디에 저장되는지, 내용을 보는 방법, 실시간 변경 사항을 추적하는 방법, 특정 정보를 추출하는 방법을 배우게 됩니다. 이러한 기술은 리눅스 시스템을 사용하는 모든 사람에게 필수적이며, 문제를 진단하고, 시스템 상태를 모니터링하며, 시스템이 백그라운드에서 무엇을 하고 있는지 이해할 수 있게 해줍니다.

리눅스 로그 파일과 위치 이해

리눅스 시스템은 로그 파일이라고 하는 특수 텍스트 파일에 다양한 활동, 오류 및 이벤트를 자세히 기록합니다. 이러한 로그는 문제를 해결하거나 시스템 상태를 모니터링할 때 주요 정보 소스로 사용됩니다.

리눅스 로그는 어디에 저장됩니까?

Ubuntu 22.04 를 포함한 대부분의 리눅스 배포판은 /var/log 디렉토리에 로그 파일을 저장합니다. 이 디렉토리를 탐색하여 시스템에서 사용할 수 있는 로그 파일을 확인해 보겠습니다.

터미널을 열고 다음 명령을 입력합니다.

ls -l /var/log

다음과 유사한 출력이 표시됩니다.

total 1048
drwxr-x---  2 root   adm      4096 May  2 09:52 apache2
drwxr-xr-x  2 root   root     4096 Apr 30 15:27 apt
-rw-r-----  1 syslog adm    183867 May  2 10:18 auth.log
-rw-r--r--  1 root   root     1112 Nov 17  2022 alternatives.log
drwxr-xr-x  2 root   root     4096 Apr 20  2022 cups
-rw-r-----  1 syslog adm    308342 May  2 10:18 kern.log
-rw-rw-r--  1 root   utmp        0 Apr 20  2022 lastlog
drwxr-xr-x  2 root   root     4096 Nov  8  2022 nginx
-rw-r-----  1 syslog adm    473079 May  2 10:18 syslog

정확한 파일 및 디렉토리는 시스템에 설치된 소프트웨어에 따라 다릅니다.

일반적인 로그 파일과 내용

다음은 가장 중요한 로그 파일 중 일부입니다.

  • /var/log/syslog: 일반 시스템 메시지를 포함합니다.
  • /var/log/auth.log: 인증 시도 및 사용자 관리를 기록합니다.
  • /var/log/kern.log: 커널 메시지 및 오류를 포함합니다.
  • /var/log/apt: 패키지 관리 로그를 포함하는 디렉토리입니다.

이러한 파일 중 하나의 내용을 살펴보겠습니다. 로그 모니터링에 대해 배우고 있으므로 시스템 로그의 기본 보기를 시작합니다.

sudo head -n 20 /var/log/syslog

head 명령어는 파일의 처음 몇 줄 (이 경우 20 줄) 을 표시합니다. 일부 로그 파일은 관리자 권한이 있는 사용자만 읽을 수 있으므로 sudo를 사용합니다.

다음과 유사한 출력이 표시됩니다.

May  2 08:23:15 ubuntu systemd[1]: Started Daily apt download activities.
May  2 08:23:15 ubuntu systemd[1]: Starting Daily apt upgrade and clean activities...
May  2 08:23:15 ubuntu systemd[1]: apt-daily-upgrade.service: Deactivated successfully.
May  2 08:23:15 ubuntu systemd[1]: Finished Daily apt upgrade and clean activities.
May  2 08:37:16 ubuntu systemd[1]: Starting Message of the Day...
May  2 08:37:16 ubuntu systemd[1]: motd-news.service: Deactivated successfully.
May  2 08:37:16 ubuntu systemd[1]: Finished Message of the Day.
...

각 로그 항목의 형식을 확인하십시오.

  • 날짜 및 시간
  • 호스트 이름 (이 예에서는 ubuntu)
  • 로그를 생성하는 프로그램 또는 서비스
  • 실제 로그 메시지

로그 항목 구조 이해

대부분의 로그 항목은 표준 형식을 따르므로 읽고 처리하기가 더 쉽습니다. 일반적인 형식은 다음과 같습니다.

  1. Timestamp (타임스탬프): 이벤트가 발생한 시점
  2. Hostname (호스트 이름): 머신의 이름
  3. Service/Application (서비스/애플리케이션): 로그를 생성한 항목
  4. Message (메시지): 발생한 일에 대한 실제 정보

이제 로그가 어디에 있는지와 구조를 이해했으므로 tail 명령어를 사용하여 로그 파일의 최신 항목을 보는 방법을 알아보겠습니다.

로그 파일을 보기 위한 기본 'tail' 명령어 사용

head 명령어가 파일의 시작 부분을 표시하는 반면, tail 명령어는 파일의 끝 부분을 표시합니다. 이는 가장 최근 항목이 일반적으로 끝에 있는 로그 파일에 특히 유용합니다.

'tail' 명령어의 기본 사용법

tail 명령의 기본 구문은 다음과 같습니다.

tail [options] [file]

기본적으로 tail은 파일의 마지막 10 줄을 표시합니다. 시스템 로그로 시도해 보겠습니다.

sudo tail /var/log/syslog

가장 최근 10 개의 로그 항목이 표시됩니다.

May  2 10:15:32 ubuntu systemd[1]: Starting Clean php session files...
May  2 10:15:32 ubuntu systemd[1]: phpsessionclean.service: Deactivated successfully.
May  2 10:15:32 ubuntu systemd[1]: Finished Clean php session files.
May  2 10:17:01 ubuntu CRON[8752]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

사용자 지정 줄 수 보기

때로는 10 줄로는 필요한 컨텍스트를 얻기에 충분하지 않습니다. -n 옵션을 사용하여 표시할 줄 수를 지정할 수 있습니다.

sudo tail -n 5 /var/log/syslog

그러면 파일의 마지막 5 줄만 표시됩니다.

May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:14 ubuntu systemd[1]: Started Session 4 of User labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413

인증 로그 보기

/var/log/auth.log 파일에는 사용자 인증 및 보안 관련 이벤트에 대한 정보가 포함되어 있습니다. 가장 최근 항목을 살펴보겠습니다.

sudo tail -n 15 /var/log/auth.log

다음과 유사한 출력이 표시될 수 있습니다.

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:14 ubuntu systemd-logind[698]: New session 4 of user labex.
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex
May  2 10:18:15 ubuntu systemd-logind[698]: Session 4 logged out. Waiting for processes to exit.
May  2 10:18:15 ubuntu systemd-logind[698]: Removed session 4.
May  2 10:20:01 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail /var/log/syslog
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:20:01 ubuntu sudo: pam_unix(sudo:session): session closed for user root
May  2 10:21:15 ubuntu sudo:    labex : TTY=pts/0 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/syslog
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:21:15 ubuntu sudo: pam_unix(sudo:session): session closed for user root

이 로그는 사용자 로그인 시도, 세션 열기 및 닫기, sudo 명령 사용을 보여줍니다. 보안 모니터링 및 사용자 액세스 문제 해결에 필수적인 로그입니다.

커널 로그 보기

커널은 리눅스 운영 체제의 핵심입니다. /var/log/kern.log 파일에는 커널에서 생성된 메시지가 포함되어 있으며, 이는 하드웨어 및 드라이버 문제를 진단하는 데 유용합니다.

sudo tail -n 10 /var/log/kern.log

출력은 다음과 같이 표시될 수 있습니다.

May  2 09:15:02 ubuntu kernel: [16789.456123] USB 1-1: new high-speed USB device number 3 using xhci_hcd
May  2 09:15:02 ubuntu kernel: [16789.605432] usb 1-1: New USB device found, idVendor=0781, idProduct=5571, bcdDevice= 1.00
May  2 09:15:02 ubuntu kernel: [16789.605436] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
May  2 09:15:02 ubuntu kernel: [16789.605438] usb 1-1: Product: Ultra
May  2 09:15:02 ubuntu kernel: [16789.605440] usb 1-1: Manufacturer: SanDisk
May  2 09:15:02 ubuntu kernel: [16789.605442] usb 1-1: SerialNumber: 4C530001211124120222
May  2 09:15:02 ubuntu kernel: [16789.606521] usb-storage 1-1:1.0: USB Mass Storage device detected
May  2 09:15:02 ubuntu kernel: [16789.606705] scsi host3: usb-storage 1-1:1.0
May  2 09:15:03 ubuntu kernel: [16790.624553] scsi 3:0:0:0: Direct-Access     SanDisk  Ultra            1.00 PQ: 0 ANSI: 6
May  2 09:15:03 ubuntu kernel: [16790.625045] sd 3:0:0:0: Attached scsi generic sg1 type 0

이제 로그 파일의 최신 항목을 보는 방법을 이해했으므로 tail 명령의 가장 강력한 기능 중 하나인 실시간으로 로그를 모니터링하는 방법을 알아보겠습니다.

'tail -f'를 사용한 실시간 로그 모니터링

tail 명령어의 가장 강력한 기능 중 하나는 -f 옵션 ( "follow"의 약자) 을 사용하여 실시간으로 파일을 모니터링하는 기능입니다. 이는 새로운 항목이 추가될 때 로그 파일을 관찰하는 데 특히 유용하며, 문제 해결 및 모니터링에 도움이 됩니다.

'tail -f' 이해

-f 옵션은 tail에게 파일을 열어두고 파일에 새로운 줄이 추가될 때마다 지속적으로 표시하도록 지시합니다. 이렇게 하면 로그 파일의 실시간 보기가 생성되어 이벤트가 발생하는 대로 확인할 수 있습니다.

실시간으로 시스템 로그 모니터링

-f 옵션을 사용하여 시스템 로그를 실시간으로 모니터링해 보겠습니다.

sudo tail -f /var/log/syslog

이 명령을 실행하면 로그 파일의 가장 최근 항목이 표시되고 터미널은 열린 상태로 유지되어 새로운 항목이 나타나는 대로 표시됩니다.

일부 로그 항목을 생성하기 위해 새 터미널 창을 열고 (Ctrl+Alt+T를 눌러 새 터미널을 엽니다) 몇 가지 기본 명령을 실행해 보겠습니다.

logger "This is a test message from user $(whoami)"

logger 명령어는 시스템 로그로 메시지를 보냅니다. 이제 tail -f를 실행하고 있는 첫 번째 터미널 창으로 돌아가면 테스트 메시지가 로그에 나타나는 것을 볼 수 있습니다.

May  2 10:34:45 ubuntu labex: This is a test message from user labex

logger 명령을 몇 번 더 다른 메시지로 실행하여 실시간으로 나타나는지 확인해 보십시오.

logger "System test number 2"
logger "Monitoring logs is fun!"

이러한 각 메시지는 로깅되는 대로 tail -f 출력 창에 나타납니다.

로그 보기를 마치면 Ctrl+C를 눌러 tail -f 명령을 중지하고 명령 프롬프트로 돌아갑니다.

인증 활동 모니터링

로그인 및 인증 관련 이벤트를 관찰하기 위해 인증 로그를 모니터링해 보겠습니다.

sudo tail -f /var/log/auth.log

이렇게 하면 사용자 로그인, sudo 명령 사용 및 인증 실패와 같은 실시간 인증 활동이 표시됩니다.

일부 인증 로그 항목을 생성하려면 새 터미널을 열고 sudo 명령을 실행합니다.

sudo ls /root

tail -f 창에 sudo 활동을 보여주는 새로운 항목이 나타나는 것을 볼 수 있습니다.

May  2 10:38:23 ubuntu sudo:    labex : TTY=pts/1 ; PWD=/home/labex ; USER=root ; COMMAND=/usr/bin/ls /root
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session opened for user root(uid=0) by labex(uid=1000)
May  2 10:38:23 ubuntu sudo: pam_unix(sudo:session): session closed for user root

다시, 관찰을 마치면 Ctrl+C를 눌러 tail -f 명령을 중지합니다.

실시간 로그 모니터링의 실제 사용 사례

실시간 로그 모니터링은 다음과 같은 여러 시나리오에서 매우 유용합니다.

  1. 문제 해결: 작동하지 않는 문제가 있는 경우 실시간으로 로그를 보면 문제를 식별하는 데 도움이 될 수 있습니다.
  2. 보안 모니터링: 인증 로그를 관찰하면 무단 액세스 시도를 감지하는 데 도움이 될 수 있습니다.
  3. 애플리케이션 디버깅: 개발자는 테스트 중에 발생하는 상황을 이해하기 위해 애플리케이션 로그를 볼 수 있습니다.
  4. 시스템 관리: 관리자는 유지 관리 또는 구성 변경 중에 시스템 로그를 모니터링할 수 있습니다.

예를 들어, 네트워크 문제를 해결하는 경우 연결을 시도하는 동안 시스템 로그를 모니터링하여 나타나는 오류 메시지를 확인할 수 있습니다.

tail -f를 사용한 실시간 로그 모니터링을 마스터하면 시스템의 동작을 실시간으로 이해하는 강력한 도구를 얻을 수 있습니다.

더 나은 분석을 위한 로그 정보 필터링

로그 파일은 매우 크고 많은 정보를 포함할 수 있습니다. 로그 분석을 더 쉽게 관리하기 위해 tail 명령어를 grep과 같은 다른 도구와 결합하여 특정 정보를 필터링하고 찾을 수 있습니다.

'grep'을 'tail'과 함께 사용하기

grep 명령어는 텍스트에서 패턴을 검색합니다. tail과 결합하면 특정 키워드 또는 패턴에 대한 로그 항목을 필터링할 수 있습니다. 기본 구문은 다음과 같습니다.

tail [options] [file] | grep "pattern"

몇 가지 실제 예를 살펴보겠습니다.

오류 메시지 찾기

시스템 로그에서 오류 메시지를 찾으려면 "error"라는 단어를 필터링할 수 있습니다.

sudo tail -n 100 /var/log/syslog | grep -i "error"

grep과 함께 사용되는 -i 옵션은 대소문자를 구분하지 않으므로 "error", "Error", "ERROR" 등과 일치합니다. 다음과 같은 출력을 볼 수 있습니다.

May  2 09:23:45 ubuntu systemd[1]: Failed to start Apache HTTP Server: Job failed with error code.
May  2 09:45:12 ubuntu kernel: [12345.678901] Buffer I/O error on device sdb1, logical block 123456

결과가 표시되지 않으면 지난 100 줄의 로그에 오류 메시지가 없다는 의미입니다.

특정 서비스 모니터링

특정 서비스 또는 프로그램을 모니터링하기 위해 로그를 필터링할 수도 있습니다. 예를 들어 SSH 관련 활동을 모니터링하려면 다음과 같이 합니다.

sudo tail -n 100 /var/log/auth.log | grep "sshd"

이렇게 하면 인증 로그에서 SSH 관련 항목만 표시됩니다.

May  2 10:18:14 ubuntu sshd[8755]: Accepted password for labex from 192.168.1.5 port 52413 ssh2
May  2 10:18:14 ubuntu sshd[8755]: pam_unix(sshd:session): session opened for user labex(uid=1000) by (uid=0)
May  2 10:18:15 ubuntu sshd[8789]: Received disconnect from 192.168.1.5 port 52413:11: disconnected by user
May  2 10:18:15 ubuntu sshd[8789]: Disconnected from user labex 192.168.1.5 port 52413
May  2 10:18:15 ubuntu sshd[8755]: pam_unix(sshd:session): session closed for user labex

실시간 필터링 모니터링

실시간 모니터링과 필터링을 결합하여 특정 이벤트가 발생하는 대로 관찰할 수도 있습니다.

sudo tail -f /var/log/syslog | grep --line-buffered "test"

--line-buffered 옵션은 grep이 버퍼링하지 않고 각 일치하는 줄을 즉시 출력하도록 보장합니다. 이는 tail -f를 사용할 때 중요합니다.

이제 다른 터미널에서 테스트 로그 메시지를 생성합니다.

logger "This is a test message for grep filtering"

첫 번째 터미널에서는 "test"에 대한 grep 필터 때문에 이 메시지만 표시되어야 합니다 (다른 로그 메시지는 표시되지 않음).

여러 패턴을 사용한 고급 필터링

grep에서 OR 연산자 (|) 를 사용하여 여러 패턴을 검색할 수도 있습니다.

sudo tail -n 100 /var/log/syslog | grep -E "error|warning|critical"

-E 옵션은 확장 정규 표현식을 활성화하여 OR 연산자를 사용할 수 있도록 합니다. 이 명령은 "error", "warning" 또는 "critical" 단어가 포함된 줄을 표시합니다.

'awk'를 사용하여 특정 정보 추출

더욱 고급 필터링 및 서식을 지정하려면 awk 명령을 사용할 수 있습니다. 예를 들어 syslog 에서 시간과 메시지만 추출하려면 다음과 같이 합니다.

sudo tail -n 10 /var/log/syslog | awk '{print $3, $5, $6, $7, $8, $9, $10}'

이렇게 하면 각 로그 항목에서 특정 필드가 추출되어 가장 관련성이 높은 정보에 쉽게 집중할 수 있습니다.

이러한 필터링 기술을 마스터하면 대용량 로그 파일을 효율적으로 분석하고 문제 해결 및 모니터링에 필요한 정보를 정확하게 추출할 수 있습니다.

요약

'tail' 명령어를 사용하여 Linux 로그 파일의 실시간 변경 사항을 모니터링하는 이 랩을 완료하신 것을 축하드립니다. 다음과 같은 몇 가지 중요한 기술을 배우셨습니다.

  1. Linux 로그 파일 이해: 이제 로그가 저장되는 위치, 로그 파일의 내용 및 로그 항목의 구조를 알고 있습니다.

  2. 기본 로그 보기: tail 명령어를 사용하여 로그 파일의 가장 최근 항목을 보고 표시할 줄 수를 지정할 수 있습니다.

  3. 실시간 모니터링: tail -f를 사용하면 로그가 업데이트되는 대로 관찰하여 시스템 활동을 관찰하고 발생하는 문제를 해결할 수 있습니다.

  4. 로그 정보 필터링: tailgrepawk와 같은 도구와 결합하여 로그에서 특정 정보를 추출하여 분석을 보다 효율적으로 만들 수 있습니다.

이러한 기술은 초보자부터 숙련된 관리자에 이르기까지 Linux 시스템으로 작업하는 모든 사람에게 필수적입니다. 로그 분석은 시스템 유지 관리, 문제 해결 및 보안 모니터링의 기본 부분입니다.

Linux 여정을 계속 진행하면서 이러한 로그 모니터링 기술이 시스템을 더 잘 이해하고, 문제를 더 빠르게 진단하며, 더 안전하고 안정적인 환경을 유지하는 데 도움이 될 것입니다.