>백엔드 개발 >PHP 튜토리얼 >Linux 로그를 분석하는 방법

Linux 로그를 분석하는 방법

WBOY
WBOY원래의
2016-07-25 08:46:521200검색
로그에는 처리해야 할 정보가 많지만 때로는 추출이 생각만큼 쉽지 않습니다. 이 글에서는 오늘 할 수 있는 몇 가지 기본적인 로그 분석 예시를 살펴보겠습니다(검색만 가능). 또한 몇 가지 고급 분석도 다룰 예정이지만 이를 올바르게 설정하려면 약간의 노력이 필요하며 나중에 많은 시간을 절약할 수 있습니다. 데이터 고급 분석의 예로는 요약 개수 생성, 유효한 값 필터링 등이 있습니다.
먼저 명령줄에서 여러 가지 도구를 사용하는 방법을 설명한 다음 로그 관리 도구가 대부분의 힘든 작업을 수행하는 방법을 보여 드리겠습니다. 자동으로 작업하므로 로그 분석이 간단해집니다.
Grep 을 사용하여
을 검색하세요.
텍스트 검색은 정보를 찾는 가장 기본적인 방법입니다. 텍스트를 검색하는 가장 일반적인 도구는 grep 입니다. 대부분의 Linux 배포판에서 사용할 수 있는 이 명령줄 도구를 사용하면 정규식을 사용하여 로그를 검색할 수 있습니다. 정규식은 일치하는 텍스트를 식별하는 특수 언어로 작성된 패턴입니다. 가장 간단한 패턴은 찾으려는 문자열을 따옴표로 묶는 것입니다.
정규식
Ubuntu user hoover를 찾습니다. 예:
$ grep "userhoover" / var/log/auth .log
10.0.2.2 포트 4792 ssh2에서 hoover에 대해 허용된 비밀번호
pam_unix(sshd:session):사용자 hoover를 위해 세션이 열림: (uid=0)
pam_unix(sshd:session):사용자 후버에 대한 세션이 닫혔습니다
정확한 정규식 빌드 어려운. 예를 들어 🎜> 과 같은 포트를 검색하려는 경우 타임스탬프 URL 및 기타 필수 데이터입니다. Ubuntu 의 아래 예는 원치 않는 Apache Log와 일치합니다. $ grep "4792"/var/log/auth.log10.0.2.2 포트 4792에서 후버용 비밀번호 허용 ssh2 74.91.21.46 - -[31/Mar/2015:19:44:32 0000] "GET /scripts/samples/search?q=4972HTTP/1.0" 404 545 " - " "-"
서라운드 검색
또 다른 유용한 팁은 grep 을 사용하여 서라운드 검색을 수행할 수 있다는 것입니다. 그러면 경기 전후의 몇 줄이 표시됩니다. 오류나 문제의 원인을 디버깅하는 데 도움이 될 수 있습니다. B 옵션은 처음 몇 줄을 표시하고 A 옵션은 표시합니다. 다음 몇 줄. 예를 들어, 어떤 사람이 관리자로 로그인하지 못하면 해당 IP 가 역으로 확인되지 않습니다. 즉, 유효한 IP 주소가 없을 수 있습니다. 도메인 이름. 이것은 매우 의심스럽습니다!
$ grep -B 3 -A 2'잘못된 사용자' /var/log/auth.log
4월 28일 17일 :06:20ip-172-31-11-241 sshd[12545]: 역방향 매핑 확인 getaddrinfo for216-19-2-8.commspeed.net [216.19.2.8] 실패 - 가능한 침입 시도!
4월 28일 17:06:20ip-172-31-11-241 sshd[12545]: 216.19.2.8에서 연결 끊김 수신: 11: Bye Bye[preauth]
4월 28일 17:06:20ip-172-31-11-241 sshd[12547]: 216.19.2.8부터 잘못된 사용자 관리자
4월 28일 17:06:20ip- 172-31-11-241 sshd[12547]: input_userauth_request: 잘못된 사용자 admin[preauth]
Apr 28 17:06:20ip-172-31-11-241 sshd[12547 ]: 216.19.2.8에서 연결 끊김 수신: 11: Bye Bye[preauth]
Tail
을 넣을 수도 있습니다. > grep tail 을 함께 사용하여 파일의 마지막 몇 줄을 가져옵니다. 또는 실시간으로 로그를 추적하고 인쇄할 수 있습니다. 이는 서버 시작 또는 코드 변경 테스트와 같은 대화형 변경을 수행할 때 유용합니다.
$ tail -f/var/log/auth.log | grep '잘못된 사용자'
4월 30일 19:49 :48ip-172-31-11-241 sshd[6512]: 219.140.64.136
Apr 30 19:49:49ip-172-31-11-241 sshd의 잘못된 사용자 ubnt [6514]: 219.140.64.136
의 잘못된 사용자 관리자 grep 및 정규식 A 정보 자세한 소개는 이 가이드의 범위를 벗어나지만 Ryan'의 튜토리얼 더 자세한 소개가 있습니다.
로그 관리 시스템은 더 높은 성능과 더 강력한 검색 기능을 제공합니다. 데이터를 병렬로 인덱싱하고 쿼리하는 경우가 많으므로 GB 또는 TB 로 빠르게 검색할 수 있습니다. 님의 로그입니다. 이에 비해 grep 에는 몇 분이 걸리고 극단적인 경우 몇 시간이 걸리기도 합니다. 로그 관리 시스템은 숫자, 필드 등을 검색하기 위한 더 간단한 구문을 제공하는 Lucene 과 유사한 쿼리 언어도 사용합니다.
잘라내기, AWK, Grok 구문 분석
명령줄 도구
Linux 는 텍스트 구문 분석 및 분석을 위한 여러 명령줄 도구를 제공합니다. 적은 양의 데이터를 빠르게 구문 분석하려는 경우 매우 유용하지만, 많은 양의 데이터를 처리하는 경우 시간이 오래 걸릴 수 있습니다.
Cut
cut 명령을 사용하면 구분된 로그에서 필드를 구문 분석할 수 있습니다. 구분 기호는 필드 또는 키-값 쌍을 구분할 수 있는 등호 또는 쉼표를 나타냅니다.
다음 로그에서 사용자를 구문 분석한다고 가정합니다.
pam_unix(su: auth ):authentication failure; logname=hoover uid=1000 euid=0 tty=/dev/pts/0ruser=hoover rhost= user=root
다음과 같이 사용할 수 있습니다. 아래 cut 명령은 등호로 구분된 8번째 필드의 텍스트를 가져옵니다. 다음은 Ubuntu 시스템의 예입니다. $ grep "authentication failure" /var /log/auth.log cut -d | '=' -f 8
루트
후버
루트
나기오스
나기오스
AWK
인 또한, 더욱 강력한 구문 분석 필드 기능을 제공하는
awk를 사용할 수도 있습니다. 관련 없는 거의 모든 것을 필터링할 수 있는 스크립팅 언어를 제공합니다.
예를 들어
Ubuntu 에 다음과 같은 로그 줄이 있다고 가정해 보겠습니다. 시스템, 로그인에 실패한 사용자의 이름을 추출하고 싶습니다: Mar 24 08:28:18ip-172-31-11-241 sshd[32701 ]: input_userauth_request: 잘못된 사용자 게스트 [preauth]
다음과 같이
awk 명령을 사용할 수 있습니다. 아래에. 먼저 정규식 /sshd.*invalid user/ 를 사용하여 sshd 잘못된 사용자 그렇습니다. 그런 다음 { print $9 } 를 사용하여 기본 구분 기호 공백을 기반으로 9번째 필드를 인쇄합니다. 그러면 사용자 이름이 출력됩니다. $ awk'/sshd.*잘못된 사용자/ { print $9 }' /var/log/auth.log
손님
관리자
정보
테스트
ubnt
Awk사용자 가이드에서 찾을 수 있습니다. 에서 정규식 및 출력 필드를 사용하는 방법에 대해 자세히 알아보세요. 로그 관리 시스템
로그 관리 시스템을 사용하면 구문 분석이 더 쉬워지고 사용자는 다음 작업을 수행할 수 있습니다. 많은 로그 파일을 빠르게 분석합니다. 일반적인
Linux 로그 및 서버 로그. 이렇게 하면 시스템 문제를 처리할 때 구문 분석 논리를 직접 작성하는 것에 대해 생각할 필요가 없기 때문에 많은 시간이 절약됩니다.
다음은 sshd 로그 메시지의 예이며, 각 을 구문 분석합니다. RemoteHost 사용자. 클라우드 기반 로그 관리 서비스 Loggly의 스크린샷입니다.
비표준 형식의 구문 분석을 사용자 정의할 수도 있습니다. 일반적으로 사용되는 도구는 Grok이며, 이는 공통 정규식 라이브러리를 사용하여 원시 텍스트를 구조화된 JSON. 다음은 Logstash 에서 커널 로그 파일을 구문 분석하는 Grok 구성의 예입니다. :
필터{
grok {
일치 => 메시지" =>"%{CISCOTIMESTAMP:타임스탬프} %{HOST:호스트} %{WORD:프로그램}%{NOTSPACE}%{NOTSPACE}%{NUMBER:duration}%{NOTSPACE} %{GREEDYDATA:kernel_logs}"
}
}
사용 Rsyslog AWK 필터
필터 전체 텍스트 검색을 수행하는 대신 특정 필드 값을 검색할 수 있습니다. 이렇게 하면 로그 정보의 다른 부분에서 원하지 않는 일치 항목을 무시하므로 로그 분석이 더욱 정확해집니다. 필드 값을 검색하려면 먼저 로그를 구문 분석하거나 최소한 이벤트 구조를 검색할 수 있는 방법이 있어야 합니다.
앱 필터링 방법
종종 하나의 앱만 보고 싶을 수도 있습니다. 통나무. 응용 프로그램이 모든 기록을 파일에 저장한다면 이는 쉽습니다. 집계된 로그 또는 중앙 집중화된 로그에서 애플리케이션을 필터링해야 하는 경우에는 더 복잡합니다. 이를 달성하는 방법에는 여러 가지가 있습니다.
rsyslog 데몬 구문 분석 및 필터 사용 로그. 다음 예에서는 sshd 애플리케이션의 로그를 sshd-message 파일에 기록합니다. 파일을 삭제한 후 다른 곳에서 반복되지 않도록 이벤트를 삭제하세요. 이 예제를 rsyslog.conf 파일에 추가하여 테스트할 수 있습니다.
:programname,isequal, “sshd” /var/log/sshd-messages
&~
awk 와 같은 명령줄 도구를 사용하여 sshd 사용자 이름. 아래는 Ubuntu 시스템의 예입니다.
$ awk'/sshd.*잘못된 사용자/ { print $9 }' /var/log/auth.log
손님
관리자
정보
테스트
ubnt
로그 관리 시스템을 사용하여 로그를 자동으로 구문 분석한 후 필요한 애플리케이션 이름에서 필터를 클릭합니다. 아래는 Loggly 로그관리에서 syslog 도메인을 추출한 스크린샷입니다. 서비스. 애플리케이션 이름은 "sshd"을 사용합니다. 필터링하려면
오류 필터링 방법
하나 그 사람의 대부분은 로그에서 오류를 보고 싶어합니다. 안타깝게도 기본 syslog 구성에서는 오류의 심각도를 직접 출력하지 않으므로 필터링하기가 어렵습니다.
이 문제에 대한 두 가지 해결책이 있습니다. 먼저, rsyslog 구성을 수정하여 오류의 심각도를 로그 파일에 출력함으로써 더 쉽게 보고 검색할 수 있습니다. rsyslog 구성에서 pri-text 템플릿(예:
"<%pri-text%>: %timegenerated%) ,%HOSTNAME%,%syslogtag%,%msg%n"
이 예제는 다음 형식으로 출력됩니다. 메시지에서 err 오류를 확인할 수 있습니다.
: Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: 인증 실패
awk 또는 grep 을 사용할 수 있습니다. 오류 정보를 검색합니다. Ubuntu 에서는 과 같은 몇 가지 구문 기능을 사용할 수 있습니다. >은 이 도메인과만 일치합니다.
$ grep '.err>'/var/log/auth.log
: 3월 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authenticationfailure
두 번째 옵션은 로그 관리 시스템을 사용하는 것입니다. 좋은 로그 관리 시스템은 syslog 메시지를 자동으로 구문 분석하고 오류 필드를 추출할 수 있습니다. 또한 간단한 클릭만으로 특정 오류에 대한 로그 메시지를 필터링할 수 있습니다.
은 오류 심각도를 강조하는 syslog 필드를 표시합니다. 오류 필터링 .
Brothers IT Education의 원본 Linux 운영 및 유지 관리 엔지니어 동영상/자세한 Linux 튜토리얼을 무료로 받아보세요. 자세한 내용은 공식 웹사이트 고객 서비스에 문의하세요. http://www.lampbrother .net/linux/
PHP, Linux, HTML5, UI, Android 등을 배우기 위한 비디오 튜토리얼(코스웨어 노트 비디오)! 문의 Q2430675018
Linux 커뮤니케이션 그룹에 오신 것을 환영합니다. 그룹 번호: 478068715


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.