웹사이트 검색

lnav - Linux 터미널에서 Apache 로그 보기 및 분석


불과 2주 전에 Wannacry 랜섬웨어 공격으로 수천 대의 컴퓨터가 손상되어 대기업과 개인 모두에게 상당한 손실을 입혔습니다. 이는 최근 몇 년간 발견된 다른 광범위한 취약점(예: Shellshock 버그)과 함께 미션 크리티컬 시스템을 최신 상태로 유지하는 것의 중요성을 강조합니다.

취약점은 특정 운영 체제나 소프트웨어 구성 요소를 대상으로 하는 경우가 많지만, 네트워크에 들어오고 나가는 트래픽을 조사하는 것은 귀하가 담당하는 자산을 보호하는 데 큰 도움이 될 수 있습니다.

추천 자료: Linux용 좋은 오픈 소스 로그 모니터링 및 관리 도구 4가지

이미 알고 계시겠지만, 시스템 로그는 우리가 이 정보를 찾아야 하는 첫 번째 장소입니다. 이 작업을 더 쉽게 하기 위해 이 문서에서는 고급 로그 파일 뷰어인 lnav를 설치하고 사용하는 방법을 설명합니다. lnav를 사용하면 여러 유형의 로그를 동시에 볼 수 있고, 단축키를 사용하여 파일을 탐색하고, 액세스 및 오류에 대한 요약된 히스토그램을 생성할 수 있습니다. 계속 읽어보세요!

Linux에서 lnav 설치 및 실행

lnav를 설치하려면 배포판의 패키지 관리 시스템을 사용하세요.

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

설치가 완료되면 lnav를 실행한 다음 검사할 로그가 있는 디렉터리의 절대 경로를 입력하세요. 이는 일반적으로 /var/log이므로 다음을 수행하겠습니다.

lnav /var/log/httpd

CentOS 7에서 Apache 웹 서버의 로그를 검사하려면 다음을 수행하세요.

이전 이미지에 표시된 출력을 간략하게 살펴보겠습니다.

  • 오른쪽 상단에는 현재 검사 중인 파일(access_log-20170519access_log)이 표시됩니다. 아래로 또는 위로 스크롤하면 파일 이름이 서로 바뀔 수 있다는 것을 알 수 있습니다.
  • 40x HTTP 응답(예: 찾을 수 없음 또는 금지됨)은 굵게 표시되는 반면 20x 응답은 표시됩니다. 일반 텍스트로.
  • IP 주소는 굵은 녹색으로 표시됩니다.

확실히 멋있어 보이지 않나요? 하지만 이제 조금 더 자세히 살펴보면 lnav가 예쁜 색상의 출력보다 훨씬 더 많은 것을 제공한다는 것을 알게 될 것입니다.

오류 로그가 표시되지 않는 이유가 궁금하다면 이 문서의 뒷부분에서 답변을 찾을 수 있습니다. 계속 읽어보세요!

옵션 및 단축키를 사용하여 출력 수정

더 진행하기 전에 lnav 출력과 사용 가능한 보기를 더 쉽게 이동할 수 있는 몇 가지 단축키를 나열하겠습니다.

  • e 또는 E: 다음/이전 오류 메시지로 이동합니다.
  • w 또는 W: 다음/이전 경고 메시지로 이동합니다.
  • 이전 페이지로 이동하려면 b 또는 백스페이스를 누르세요.
  • 다음 페이지로 이동할 수 있는 공간입니다.
  • g 또는 G는 현재 보기의 상단/하단으로 이동합니다.

로그가 회전되면 logrotate 구성 파일에 지정된 설정에 따라 이전 파일이 압축될 수도 있고 압축되지 않을 수도 있습니다. 출력에 압축 파일을 포함하려면 다음과 같이 lnav를 시작하십시오.

lnav -r /var/log/httpd

lnav 작동 방식을 자세히 살펴보려면 다음과 같이 -d 옵션과 디버그 정보가 기록될 파일 이름을 사용하여 프로그램을 시작할 수 있습니다.

lnav /var/log/httpd -d lnav.txt

이 예에서는 lnav가 시작될 때 생성되는 디버그 정보가 현재 작업 디렉터리 내의 lnav.txt라는 파일에 기록됩니다.

해당 파일의 처음 몇 줄은 다음 이미지에 표시됩니다.

강조 표시된 텍스트는 lnav가 기본 형식 파일, 특히 Apache 액세스 로그를 구문 분석하기 위해 access_log 형식을 로드했음을 나타냅니다. 또한 lnav를 사용하면 각 출력 라인을 구문 분석하여 출력을 더 쉽게 시각화하고 이해할 수 있습니다.

권장 읽기: GoAccess(실시간 Apache 및 Nginx) 웹 서버 로그 분석기

이 기능을 사용하려면 프로그램을 시작하고 구문 분석하려는 라인을 선택하십시오. 선택한 줄은 항상 창 상단에 있는 줄입니다. 그런 다음 p를 누르면 다음 결과가 표시됩니다.

일반 모드로 돌아가려면 p를 다시 누르세요.

이제 날짜 및 시간별로 로그 요약을 보려면 i를 누르세요. 예를 들어 강조 표시된 텍스트는 4월 10일 월요일 오후 10시에서 11시 사이에 37개의 HTTP 요청이 있었고 그 중 14개에서 오류가 발생했음을 나타냅니다.

위에 표시된 히스토그램을 기반으로 잠재적인 문제를 식별한 후에는 i를 눌러 보기를 종료하고 앞에서 설명한 대로 파서를 사용하여 더 자세히 검사할 수 있습니다. 또는 세미콜론을 입력하고 표준 쿼리를 작성하여 내장된 SQL 기능을 사용할 수도 있습니다. 예를 들어 다음을 수행합니다.

;.schema

데이터베이스 스키마에서 사용 가능한 테이블을 봅니다. 올바른 테이블(이 경우 access_log)을 식별한 후 q를 누르고 다음 쿼리를 사용하여 195.154.230.31에서 들어오는 요청에 대해 사용 가능한 모든 정보를 반환해 보겠습니다.

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

log_time을 기준으로 결과를 필터링할 수도 있습니다. 요점은 약간의 SQL을 추가하면 lnav로 할 수 있는 작업에는 한계가 있다는 것입니다.

Apache 기본 로그 형식

많은 로그 형식은 기본적으로 lnav를 통해 로드되므로 우리의 개입 없이 구문 분석됩니다. 공식 문서의 로그 형식 섹션에서 목록을 볼 수 있습니다.

기본 형식은 ~/.lnav/formats/default/default-formats.json.sample에 지정되며, 다른 형식은 ~/.lnav/formats를 사용하여 추가할 수 있습니다..json 확장자.

그러나 이러한 파일을 편집하려면 JSON(Javascript Object Notation) 및 PCRE(Perl-Compatible Regular Expressions) 라이브러리에 어느 정도 익숙해야 합니다.

그렇다면 lnav가 Apache 오류 로그 파일을 표시하지 않은 이유는 무엇입니까? 그 이유는 해당 로그가 기존 형식 파일의 정규 표현식과 일치하지 않으므로 일반 텍스트 파일(지정된 로그 형식이 없는 파일을 의미)로 처리되기 때문입니다.

권장 자료: Apache 웹 서버 로드 및 페이지 통계를 모니터링하는 방법

앞서 언급했듯이 JSON 및 PCRE에 어느 정도 익숙해지면 자신만의 형식을 만들 수 있습니다. 예를 들어 사용자 정의 Apache 로그를 정의한 경우 이는 유용할 수 있습니다.

요약

lnav 사용 방법을 보여주기 위해 Apache 액세스 로그를 사용했지만 이 도구를 사용하여 보고 구문 분석할 수 있는 다른 유형의 로그도 여러 가지 있다는 점을 염두에 두십시오. 도구가 특정 로그를 인식하지 못하는 경우 추가 형식을 생성하고 여기에 제공된 표시에 따라 설치할 수 있습니다.

이 기사에 대해 질문이나 의견이 있으신가요? 언제나처럼 아래 양식을 사용하여 알려 주시기 바랍니다. 여러분의 의견을 기다리겠습니다!