본문 바로가기
Data/ELK

[2021.04.02] 인턴 +32 Apache log Analysis log file(3GB) - geoip 사용 O

by injekim97 2021. 4. 2.
반응형

[2021.04.02] 인턴 +32 Apache log Analysis log file(3GB) - geoip 사용 O

 

 

이번 아파치 로그 분석에 대한 실습 자료는 아래 링크에서 받을 수 있다.(Kaggle)

www.kaggle.com/eliasdabbas/web-server-access-logs?select=access.log

 

Web Server Access Logs

A sample of web server logs file

www.kaggle.com

-> 구글로 로그인 후 다운로드를 하면 된다.

 

 

하지만, log 데이터 용량이 3GB라 파일을 볼 수 없다.

LTFViewr.zip
0.24MB

 

파일을 보기 위해 무설치 버전(대용량 editor)을 설치해서 심심하면 열어봐라.

 

* 에디터의 배경을 수정하고 싶으면 -> LTFViewr5u.ini 열어서 default와 info에 있는 BkImage=darkwatch.jpg를 수정해주면 된다.(자기가 바꾸고자 하는. jpg) 

 

* 나처럼 흑백으로 사용하고 싶으면, 주석처리(#)를 해주면 된다. #Bklmage = darkwatch.jpg

-> 그냥 다운받아서 쓰면 된다.(이미 주석 처리해놓음)  

 

 

-> 3GB LOG 기록이 담긴 파일을 위의 파일(무설치 대용량 editor)로 열은 상태이다. 무려, 라인수가 10365153개이다.

 

 

 

------------------------------------------------------------------------------------------------------------

자, 이제 로그 분석 데이터 자료 준비는 끝났으니, 본격적으로 log pattern를 분석해보자

 

 

1. 로그분석
1-1) grok-patterns에서 일치하는 패턴을 찾아서 사용

github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

 

 

1-2) 또는 grok debugger를 이용해서 패턴을 분석

http://grokdebug.herokuapp.com/

 

 

* 로그 분석 실습 1과 실습 2의 자료와 다르게  것이 진정한 아파치 로그 형태이다.

* 다른 실습 자료들은 grok로 하나하나 구별해줘야 하는데, 이 예시는 그렇지 않다

grok에서, 아파치 로그 형태를 위해 만들어놓은 %{COMBINEDAPACHELOG}를 사용하면 된다

 

 

이번에 사용하게 될 아파치 로그 분석 실습 예시 (로그 분석 실습 1과 실습 2는 아파치 로그 형태가 아님. 로그 형태임)

5.134.161.178 - - [26/Jan/2019:20:29:11 +0330] "GET /static/images/amp/third-party/footer-mobile.png HTTP/1.1" 200 62894 "https://www.zanbil.ir/m/filter/b46%2Cp41" "Mozilla/5.0 (Linux; Android 6.0; HTC_U-2u) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.99 Mobile Safari/537.36" "-"

 

-> 사진을 보면 알다시피, 아파치 로그 분석 실습 1과 실습 2를 할 땐, 하나하나 grok를 찾아 구별해줬어야 했다.

 

why?

-> 완전한 아파치 로그 형태가 아니어서, %{COMBINEDAPACHELOG}를 사용할 수 없기 때문이었다.

 

-> 하지만, 이번 아파치 로그 실습 3의 예시는 완벽한 아파치 로그 분석 실습 예시여서,  %{COMBINEDAPACHELOG}를 사용하면 된다. (참 편리하다. 알아서 다 구별해준다.)

 

 

 

----------------------------------------------------------------------------------------------------------------------------

자, 이제 conf 파일을 수정한 후에, template를 만들어보자(geoip를 사용하기 위해 - 로그분석실습 2 게시글 참고)

★★★★★ 매우 중요 ★★★★★

 

 # grok에서 아파치 로그만 사용할 수 있게 해주는 %{COMBINEDAPACHELOG}를 만들어 놓음. 그대로 사용하면 된다

    grok { match => { "message" => ["%{COMBINEDAPACHELOG}"] } } 

 

 # ★★★ geoip는 무조건 %{COMBINEDAPACHELOG}만 사용 가능하다. 완전한 아파치 로그 형태일 때만. ★★★

geoip {
    source => "clientip"
}

 

 

자, 이제 conf 파일을 대충 수정했으니, 실행해보자

 

-> 1. elasticsearch.bat, kibana 기동(관리자 - 명령 프롬포트)

-> 2. logstash -f 파일명. conf 

 

-> 일부분 캡처 완료 (geoip 위도와 경도 잘 나오는 것을 확인할 수 있다)

 

-----------------------------------------------------------------------------------------------------------------------------------

이제, elasticsearch에 kibana-template를 만들어보자.(dev tools)

사용하려면, 1. conf(파일) 부분과, 2. kibana - template를 수정해줘야 사용이 가능하다.

수정하지 않고 geo_ip를 출력 시, 에러 문구 geoip lookup failure  발생

 

즉, 결론  

1. 데이터를 넣기 전에 먼저 kibana-template (geo_point) 만들기

PUT geoip_test1

 

2. 생성된 index에 geo_point로 사용할 속성 생성

PUT geoip_test1/_mapping
{
  "properties" : {
    "geoip" : {
      "dynamic" : true,
      "properties" : {
        "location" : {
          "type" : "geo_point"
        }
      }
    }
  }
}

 

-> 만들어진  인덱스 geoip_test 1을 사용해서, conf파일에도 동일하게 수정해주자.

* 1번 라인에서 처음 만들 때 오류 뜨면 최대한 index명을 간략하게 할 것(너무 길어서 에러 뜨는 거 같음 - 내 생각)

 

* 다시 한번 더 말하지만, geoip는 완전한 로그 형태일 때만 사용 가능(%{COMBINEDAPACHELOG} 이 사용 가능할 때.)

 

 

PUT geoip_test1

PUT geoip_test1/_mapping
{
  "properties" : {
    "geoip" : {
      "dynamic" : true,
      "properties" : {
        "location" : {
          "type" : "geo_point"
        }
      }
    }
  }
}
GET geoip_test1

 

-------------------------------------------------------------------------------

 

 

 

-------------------------------------------------------------------------------------------------------------------

 하면서 알게 된 점 ★

-> remove_field로 @timestamp를 지우면 안 된다. (여기서 select 할 게 없음)

 

실행 과정

 

결과 값 캡처

 

-----------------------------------------------------------------------------------------------------------------------------

자, 이제 실행 과정은 생략하고 kibina에서 만들어주자

-> index pattens에 들어가, conf에서 지정해준, index명을 그대로 친 후에 Next step 클릭 (1/2)

 

-> @timestamp select후, create index patten 클릭

 

 하면서 알게 된 점 ★

-> remove_field로 @timestamp를 지우면 안 된다. (여기서 select 할 게 없음)

 

 

-------------------------------------------------------------------------------------------------------------------

자, 이제 maps로 시각화를 해보자.

* 하면서 알게 된 점(속도를 늘리고 싶으면.으로 찍는다 -> 데이터가 빨리 들어감)

output {
    stdout {
        #codec => rubydebug
        codec => dots {} #.으로 출력하여, 속도를 올려주기 위해
    } 
}

 

----------------------------------------------------------------------------------------------------------------------

이제, 본격적으로 map 시각화해보자

 

 

 

 

사용 방법

-> maps -> create maps 버튼 클릭 -> add layer -> documents -> index pattens(apache_log5 select 해주기) 

 

 

 

Dashboard

 

-------------------------------------------------------------------------------------------------------------------------

1730 mappings _geoip.txt
0.00MB
geoip_test1.conf
0.00MB

 

반응형

댓글