더 나은 분석을 위한 로그 정보 필터링
로그 파일은 매우 크고 많은 정보를 포함할 수 있습니다. 로그 분석을 더 쉽게 관리하기 위해 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}'
이렇게 하면 각 로그 항목에서 특정 필드가 추출되어 가장 관련성이 높은 정보에 쉽게 집중할 수 있습니다.
이러한 필터링 기술을 마스터하면 대용량 로그 파일을 효율적으로 분석하고 문제 해결 및 모니터링에 필요한 정보를 정확하게 추출할 수 있습니다.