프로젝트 일지

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 이라는 자체적인(근본없는) 쿼리문을 사용한다. 기본적인 쿼리문을 공부한 사람이라면 이건가? 싶은 부분도 분명 있지만, 역시나 자체적인 쿼리문인만큼 공부해야 할 것이 배로 늘어나는 느낌ㅠㅠ

ChatForYou - 고도화 : Kubernetes 및 ChatForYou 모니터링 - 1. 시작하면서
트랜드에서도 더 위에 있다

2. Kubernetes 모니터링

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

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

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

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

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

ChatForYou - 고도화 : Kubernetes 및 ChatForYou 모니터링 - 2. Kubernetes 모니터링
생각보다 이쁘다

 

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

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

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

 

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

 

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

 

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

ChatForYou - 고도화 : Kubernetes 및 ChatForYou 모니터링 - 3. 블랙리스트 IP 확인 및 차단
혓바닥이 움직이는데..굉장히 킹받는다

4. ChatForYou 와 Client 모니터링

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

 

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

 

ChatForYou - 고도화 : Kubernetes 및 ChatForYou 모니터링 - 4. ChatForYou 와 Client 모니터링

 

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

 

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

ChatForYou - 고도화 : Kubernetes 및 ChatForYou 모니터링 - 4. ChatForYou 와 Client 모니터링
대표적인 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

 

댓글