프로젝트 일지

ChatForYou - 고도화 : Kubernetes 및 ChatForYou 모니터링

TerianP 2023. 11. 22.
728x90

1. 시작하면서

역시나 오랜만에 글을 적는 듯하다. 그래도 마냥 놀았던 것은 아니고, 나름 열심히? 프로젝트 개발에 힘써왔다!

최근에는 이슈로 등록된 버그 수정도 좀 하고, datachannel 을 어떻게 더 갖고 놀 수 있을까 고민도 좀 하고 등등 여러가지를 했는데 특히 kubernetes 에 여러 서버를 올려서 내 프로젝트와 연결을 시도해보았다.

 

그 중 가장 크게 다가온 것이 바로 kubernetes 에 garafana 와 prometheus 를 올려서 시각화하는 부분이었다. 

프로젝트 개발하며 로그도 분석하다가 정말 문득 예전에 ELK 스텍을 구성하고 nginx 로그도 수집해보고, clientIP 로 geomap 에 정보를 찍어보고 했던게 생각났다. 그러다보니 혹시 이번에도 그런식으로 만들어볼 수 있을까? 라는 생각이 들어 도전하게 되었던 것 같다. 무엇보다 최근에 특히 서버에 이상한 에러가 많이 보였는데 대표적으로 sql 인젝션이나 서버의 없는 이상한 url 로 접속을 시도했던 에러들이었다. 이런 IP 들을 걸러내거나 차단하는게 꼭 필요하다는 생각도 들었던 것음 덤.

 

처음에는 이번에도 ELK 스텍을 사용하려고 했었다. 그러다가 grafana 와 prometheus 에 대해서 함께 보게 되었다. 그렇게 두 가지를 비교하던 중 역시나 새로운 것에 도전해보고 싶다는 마음이 생겼고, 뭔가 springboot 프로젝트와는 ELK 보다 grafana 와 prometheus 가 더 많이 보였기 때문에 이번에는 grafana & prometheus 로 가게 되었다

 

사실 grafana 는 별로 어려운 편은 아니었다. kibana 와 느낌이 많이 비슷해서...생각보다 할만한데? 라고 느꼈을 정도니까.

다만 prometheus 얘가 정말 엄청난 문제였다. 특히 prometheus 는 promQL 이라는 자체적인(근본없는) 쿼리문을 사용한다. 기본적인 쿼리문을 공부한 사람이라면 이건가? 싶은 부분도 분명 있지만, 역시나 자체적인 쿼리문인만큼 공부해야 할 것이 배로 늘어나는 느낌ㅠㅠ

트랜드에서도 더 위에 있다

2. Kubernetes 모니터링

Grafana 와 prometheus 로 모니터링 하기 위해 가장 먼저 예제로 했던 것은 바로 Kubernetes 모니터링 이었다.

Grafana 는 다른 선생님들이 만드신 감사한 dashboard 를 무료로 사용할 수 있다는 엄청난 장점이 있었다. 세상에 무료 대시보드라니...정말 감사합니다.

그렇게 다른 분의 대시보드를 가져와 만든 kubernetes 의 성능 모니터링 - Ram 사용량, CPU 사용량, 네트워크, 파드, 컨테이너 등 - 을 위한 대시보드!! 여기서 내가 했던 작업은 단순히 grafana 와 prometheus 를 연결하고, prometheus 와 kubernetes metrics 를 연결하는 정도였다. 

물론 당연히? 에러도 많이 났고, 연결하는 과정에서도 오류가 많았다. 특히 처음에 prometheus 가 kubernetes metrics endpoint 에 접근하지 못해서(정보를 가져오기 못해서) 생겼던 문제도 있었고, prometheus 에서 정보를 가져온 후 대시보드에서 여러 그래프를 만들기 위해서 promQL 을 사용해야했는데 내가 원하는대로 쿼리를 만들지 못 했던 문제도 있었다.

이 부분을 어떻게 트러블슈팅했는지에 대해서는 꼭 한번 포스팅으로 정리해보고 싶다. 아마도...? 나중에...?ㅋㅋㅋ

생각보다 이쁘다

 

3. 블랙리스트 IP 확인 및 차단

이번 기능의 가장 큰 목표 중 하나였던 블랙리스트 IP 확인 및 차단 기능!!

사실 블랙리스트는 웹 로그를 보면서 확인하고 필터링하면서 블랙리스트를 지정하는게 일반적일 듯 싶은데...당장 그렇게 하기에는 조금 무리가 있는 듯 싶기도하고 솔직히 내 사이트에 접속하면 얼마나 접속할까 싶기도해서 이번에는 웹에서 돌아다니는 블랙리스트를 다운로드 받아서 이를 활용해보기로 하였다

 

최종적으로는 프로젝트 안에 블랙리스트.txt 를 가져다 놓고, 프로젝트 구동 시 해당 파일의 내용(IP subnet) 을 읽어와서 웹 접속할 때 client 의 ip 들과 비교해서 client 의 ip 대역이 블랙리스트의 ip 대역과 동일하면 403 페이지로 날아가도록 만들었다.

 

생각보다 블랙리스트 ip 대역을 적어둔 txt 파일의 크기가 크기 때문에 매번 읽어오기에는 메모리상 너무 낭비가 심한 듯 해서 @cache 를 사용해서 프로젝트가 실행시 txt 파일을 읽어와서 cache 에 저장한 후 추후에는 cache 메모리에 있는 블랙리스트 내용을 가져와서 client 와 비교하도록 만들었다.

 

현재는 springboot 의 @Cacheable 를 사용했지만 추후 chttingroom 도 그렇고, 이것도 그렇고 활용해서 추가 개발 예정!!

혓바닥이 움직이는데..굉장히 킹받는다

4. ChatForYou 와 Client 모니터링

아마 아는 사람들은 알겠지만 티스토리에 구글 애널리틱스를 연결해두면 애널리틱스에서 티스토리에 몇명이 방문하는지 어느 나라에서 접속했는지 시각화해서 보여준다. 이걸 보고 생각이 들었는데 grafana 와 사이트를 방문하는 방문자의 ip 정보를 활용하면 어디서 접속하는지 몇명이나 접속하는지 체크하는 기능을 추가하고자하는 마음이 들었다. 물론 'client 정보를 활용한 통계 분석 및 시각화' 라는 목표와 함께 혹시나 모를 사고...에 대비해 어느 정도 접속 정보는 알고 있는게 좋지 않을까 싶어 급하게 구성하게 되었다.

 

아래는 일단 ChatForYou 의 성능 모니터링을 위한 대시보드를 구성한 사진이다. 아마 여기에 client 정보를 활용한 접속 국가, 방문자 수, geomap 등이 추가되지 않을까...싶은데 일단 이번주까지는 계속 개발해야할 듯 하다ㅠ.ㅠ

 

 

그 이유는 바로 아래처럼 prometheus 에 client 정보까지 잘 조회는 되는데 grafana 의 geomap 대시보드에서 위도와 경도를 못 불러오는 문제가 있었다. grafana 에서 내가 설정을 잘못하는건지 아니면 prometheus 에 쌓는 정보의 형식이 잘못된건지 알수가 없다ㅠ

 

이것까지만 해결하면 담에는 개발일지가 아닌 프로젝드 기능 추가 일지로 돌아오겠습니다!

대표적인 BlackList IP 로 접속했을 때의 로그

 


Refernece

1. 대표적인 블랙리스트 IP 리스트 정보를 주는 사이트

https://iplists.firehol.org/#about

 

FireHOL IP Lists | IP Blacklists | IP Reputation Feeds

350+ IP blacklists, IP blocklists and IP Reputation feeds, about Cybercrime, Fraud, Botnets, Μalware, Virus, Abuse, Attacks, Open Proxies, Anonymizers. See their changes and updates, size over time, retention policy, geographic coverage, comparisons and o

iplists.firehol.org

 

2. IP 정보로 국가, 위도 경도, 언어 등등 다양한 정보를 알 수 있도록 도움을 주는 GeoIP!

참고로 GeoLite2 가 무료이고 GeoIP2 는 유료버전이다

https://dev.maxmind.com/geoip

 

https://dev.maxmind.com/geoip

MaxMind’s GeoIP2 and GeoLite2 IP intelligence products and services are used to discover information about a specific IP address. We provide free and paid web services, subscription-based downloadable databases, and free downloadable databases.

dev.maxmind.com

3. 403 forbidden

https://codepen.io/Mansoour/pen/LgGGvm

 

Svg 403 Access Forbidden.

animated this SVG free drawing from freepik.com. ...

codepen.io

 

댓글