lnav-Linux 터미널에서 Apache 로그 감시 및 분석
2 주 전에 Wannacry 랜섬웨어 공격으로 수천 대의 컴퓨터가 손상되어 대기업과 개인 모두에게 상당한 손실을 입혔습니다. 최근 몇 년 동안 발견 된 다른 광범위한 취약점 (예 : Shellshock 버그)과 함께 미션 크리티컬 시스템을 최상으로 유지하는 것의 중요성을 강조합니다.
취약성이 특정 운영 체제 또는 소프트웨어 구성 요소를 대상으로하는 경우가 많지만 네트워크에 들어오고 나가는 트래픽을 검사하는 것은 책임있는 자산을 보호하는 데 큰 도움이 될 수 있습니다.
이미 알고 계시 겠지만 시스템 로그는이 정보를 찾아야하는 첫 번째 장소입니다. 이 작업을 더 쉽게하기 위해이 기사에서는 고급 로그 파일 뷰어 인 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 웹 서버의 로그를 검사하려면

이전 이미지에 표시된 출력을 간단히 살펴 보겠습니다.
- The top right corner shows the files currently being inspected (access_log-20170519 and access_log). As you scroll down or up, you will note that the file names may change as you go from one to another.
- 40x HTTP responses (for example, Not Found or Forbidden) are displayed in bold, whereas 20x responses are shown in regular text.
- IP addresses appear in bold green.
확실히 멋지지 않나요? 하지만 이제 좀 더 자세히 살펴보면 lnav가 예쁜 색상의 출력보다 훨씬 더 많은 것을 제공한다는 것을 알게 될 것입니다.
오류 로그가 표시되지 않는 이유가 궁금하다면이 기사의 뒷부분에서 답을 찾을 수 있습니다. "그래서 계속 읽으십시오!
옵션 및 핫키로 출력 수정
더 진행하기 전에 lnav의 출력과 사용 가능한보기를보다 쉽게 이동할 수있는 몇 가지 핫키를 나열 해 보겠습니다.
e
orE
to jump to the next / previous error message.w
orW
to jump to the next / previous warning message.b
orBackspace
to move to the previous page.- Space to move to the next page.
g
orG
to move to the top / bottom of the current view.
로그를 회전 할 때 logrotate 구성 파일에 지정된 설정에 따라 이전 파일이 압축되거나 압축되지 않을 수 있습니다. 출력에 압축 파일을 포함하려면 다음과 같이 lnav를 실행하십시오.
# lnav -r /var/log/httpd
lnav가 작동하는 방식을 자세히 살펴 보려면 다음과 같이 -d
옵션과 디버그 정보가 기록 될 파일 이름을 사용하여 프로그램을 시작할 수 있습니다.
# lnav /var/log/httpd -d lnav.txt
이 예제에서 lnav가 시작될 때 생성되는 디버그 정보는 현재 작업 디렉토리 내의 lnav.txt라는 파일에 기록됩니다.
해당 파일의 처음 몇 줄은 다음 이미지에 표시됩니다.

강조 표시된 텍스트는 lnav가 기본 형식 파일, 특히 Apache 액세스 로그를 구문 분석하기 위해 access_log 형식을로드했음을 나타냅니다. 또한 lnav를 사용하면 각 출력 행을 구문 분석하여 출력을 시각화하고 이해하기가 더 쉬워집니다.
이 기능을 사용하려면 프로그램을 시작하고 구문 분석 할 줄을 선택하십시오. 선택한 줄은 항상 창 상단에 있습니다. 그런 다음 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에 지정되며 다른 형식은 .json
확장자를 사용하여 ~/.lnav/formats를 추가 할 수 있습니다.
그러나 이러한 파일을 편집하려면 JSON (Javascript Object Notation) 및 PCRE (Perl-Compatible Regular Expressions) 라이브러리에 어느 정도 익숙해야합니다.
그렇다면 lnav가 Apache 오류 로그 파일을 표시하지 않은 이유는 무엇입니까? 그 이유는 이러한 로그가 기존 형식 파일의 정규식과 일치하지 않으므로 정규 텍스트 파일 (주어진 로그 형식이없는 파일을 의미 함)으로 처리되기 때문입니다.
앞서 언급했듯이 JSON 및 PCRE에 어느 정도 익숙해지면 고유 한 형식을 만들 수 있습니다. 예를 들어 사용자 지정 Apache 로그를 정의한 경우 유용 할 수 있습니다.
lnav 사용 방법을 보여주기 위해 Apache 액세스 로그를 사용했지만이 도구를 사용하여보고 구문 분석 할 수있는 다른 여러 유형의 로그가 있음을 명심하십시오. 도구가 특정 로그를 인식하지 못하는 경우 여기에 제공된 표시에 따라 추가 형식을 만들고 설치할 수 있습니다.
이 기사에 대한 질문이나 의견이 있습니까? 언제나 그렇듯이 아래 양식을 사용하여 언제든지 알려주십시오. "여러분의 의견을 기다리겠습니다!