Logstash를 사용하여 Apache 로그를 분석
제일 먼저 해야할 할 가장 중요하고 일반적인 단계 중 하나는 Apache 로그를 향상시키는 것입니다.
이것은 Kibana에서 로그를보다 이해하고 분석 할 수 있도록 로그를 구문 분석하도록 Logstash 필터를 구성하는 것과 관련이 있습니다.
다음은 Apache 로그 라인과 본인 환경에서 이러한 로그를 구문 분석하는 데 사용하는 Logstash 구성의 예입니다.
1 2 3 | httpd.conf common 설정 "%h %l %u %t \"%{uniqueid}i\" \"%r\" %>s %b" | cs |
샘플 Apache 액세스 로그 항목
1 2 | 192.168.0.34 - - [10/Jul/2018:14:15:41 +0900] "W0RA-bdd2MEYBj@0ozrTWAAAAAc" "POST /Air/Reservation/AjaxList HTTP/1.1" 200 6864 | cs |
해당 Apache 액세스 로그 항목을 구문 분석하는 Logstash 구성
1 2 3 4 5 6 7 8 | filter { grok { match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{NOTSPACE:transaction_id}\" \"%{WORD:method} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} (?:-|%{NUMBER:bytes})"} } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } | cs |
conf file 을 기반으로 작업이 수행되기 때문에 유효한지를 검사 -t 옵션 사용
1 | /bin/logstash -t -f ./prime-main.conf | cs |
실행 (root 로 실행 why? 아파치 access_log 접근권한 때문에)
1 | /bin/logstash -f ./prime-main.conf | cs |
아래와 같이 정상적으로 출력 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | { "@timestamp" => 2018-07-10T06:02:12.000Z, "clientip" => "192.168.0.34", "ident" => "-", "timestamp" => "10/Jul/2018:15:02:12 +0900", "bytes" => "1077", "transaction_id" => "W0RL5Ldd2MEYBj@0ozrTWQAAAAc", "host" => "localhost.localdomain", "auth" => "-", "httpversion" => "1.1", "message" => "192.168.0.34 - - [10/Jul/2018:15:02:12 +0900] \"W0RL5Ldd2MEYBj@0ozrTWQAAAAc\" \"GET /erp/zones/images/air/SC.gif HTTP/1.1\" 200 1077", "method" => "GET", "path" => "/var/log/httpd/naya-access_log", "@version" => "1", "request" => "/erp/zones/images/air/SC.gif", "response" => "200" } { "@timestamp" => 2018-07-10T06:02:18.000Z, "clientip" => "::1", "ident" => "-", "timestamp" => "10/Jul/2018:15:02:18 +0900", "transaction_id" => "-", "host" => "localhost.localdomain", "auth" => "-", "httpversion" => "1.0", "message" => "::1 - - [10/Jul/2018:15:02:18 +0900] \"-\" \"OPTIONS * HTTP/1.0\" 200 -", "method" => "OPTIONS", "path" => "/var/log/httpd/naya-access_log", "@version" => "1", "request" => "*", "response" => "200" } | cs |
참고로 logstash 로그 grok 정규식 확인하는 사이트
http://grokdebug.herokuapp.com/
나머지는 키바나에서 확인하시면 되실겁니다.
Logstach config/prime-main.conf 전체 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | input { file { path => "/var/log/httpd/naya-access_log" start_position => "beginning" } } filter { grok { match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{NOTSPACE:transaction_id}\" \"%{WORD:method} %{DATA:request} HTTP/%{N UMBER:httpversion}\" %{NUMBER:response} (?:-|%{NUMBER:bytes})"} } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } } output { elasticsearch { hosts => ["localhost:9200"] index => "apache--%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } | cs |
'소행성이야기' 카테고리의 다른 글
[디자인패턴] PHP 템플릿 메소드 패턴(Template Method Pattern) (0) | 2018.07.11 |
---|---|
logstash json 파일 input 방법 (0) | 2018.07.10 |
엘라스틱 서치와 Relational DB 비교표 (0) | 2018.07.10 |
엘라스틱 서치 클러스터 상태 확인 (0) | 2018.07.10 |
javascript 익명함수 (0) | 2018.07.10 |