본문 바로가기
🌿 Data Engineering/Study

[ELK] Flask 웹로그 분석해보기2-Flask 로그남기기

by 카프리썬_ 2021. 7. 9.
728x90
728x90

이렇게 docker로 간단하게 elk를 구성했다. 

이제 내가 만든 웹서버를 켜서 로그를 보내려고한다. 

그러니까 내가 만든 웹서버안에 로그를 남겨두면 된다. 

 

아 그전에 EC2의 스펙을 늘렸다. 이전에 왠지모르게 ELK설치 후 계속 인스턴스가 버벅거렸다.

알고보니 docker로 ELK세팅을 할 경우 메모리가 최소2기가 이상 필요했다. 

메모리가 2기가인 t2.small도 버벅거렸다. 그래서 결국 t2.medium 타입으로 인스턴스 스펙을 올렸다.

 

>> elk구성시 물리적인 스펙에 관련해서 여기를 참고했다. 

Flask 추가설정 

일단 테스트페이지에 대한 로그를 남겨두도록 Flask에서 추가로 설정했다. ( 이분 블로그참고)

 

-app.py 수정 : 로그를 가져올 메인py(my_test.py) 를 라우트등록

-logger.py : 로그포맷 세팅 

-my_log.py : 로그설정 (스트림로그와 logstash로그를 같이 실행 하도록 설정)

-test_route.py : 임의로 생성한 메인(Hello World 페이지)

 

그래서 현재 디렉토리구성은 아래와 같다. 

 

Flask실행 및 엑세스 로그확인

그다음 웹서버를 실행해준다. 

그럼 웹서버 페이지에 접속할때마다 아래와 같은 엑세스 로그를 확인할 수 있다. 

 

위에서 설정한 로그포맷대로 logstash로그는 날짜 - web_stream - INFO - 로그메세지 이렇게 찍혔다. 

 

ELK실행 

docker-compose build && docker-compose up -d

앗, 그런데 포트충돌이 일어났다.

알고보니 Flask의 기본 포트가 5000인데, logstash의 포트도 5000번으로 지정한 것. 

그래서 docker-compose.yml 파일에서 logstash에서 받는 포트를 5001로수정해줬다. 

앗, sudo로 실행을 안해서 그런가 또 오류가 났다.  >>여기를 참고해서 해결했다. 

docker를 재시작 (service docker start) 하고 docker-compse up 을 수행했다. 

그럼 이렇게 마구마구 무엇인가 실행되는게 보인다. 

웹서버가 실행되고 있으니까, 웹서버가 만든 로그들을 수집하고 전달하고 있는 상태일까?

이렇게 뭔가 된다고 바로 kibana를 시작하면 안된다..

 

Kibana 접속

이제 그럼 수집된 데이터를 직접 확인해보자. 

웹서버가 남기고 있는 데이터들이 Logstash로 전송되면, 

Logstash가 수집한 로그 데이터를 가공 및 변환하여 ElasticSearch에 인덱싱하여 전송한다.

ElasticSearch는 받은 로 데이터를 저장소에 저장하고, 검색한다. 

Kibana가 ElasticSearch에 저장된 데이터를 시각화하여 사용자에게 보여준다.

 

결국 사용자는 Kibana에서 시각화된 데이터를 볼 수 있다. 

Kibana의 포트는 5601이다. 서버의 ip에 5601을 붙여서 kibana페이지에 접속할 수 있다.

 

나같은 경우 전체적인 인프라구성을 AWS로 해서 인스턴스의 퍼블릭IP에 5601을 붙여서 확인했다. 

얏호 드디어 나왔다. 키바나! 

 

뒤적뒤적거리다 여기로그가 키바나로 온 로그같은데.. 이걸 어떻게 시각화해서 대시보드로 만들수 있지?

728x90
반응형