임대 서버의 경우, 해당 서버 상태를 주시하고 문제가 생겼을 때 바로바로 처리가 가능해야한다. 지금이야 트래픽이 많이 발생하지 않지만 언젠가는 문제 생길 수 있다. 더불어 트래픽이 넘친다면 서버 스케일에도 변화를 줘야하기 때문에 더욱 중요하다. 따라서 현재 사용중인 슬랙에 메시지를 적용시키기로 했다.
프로세스는 다음과 같다
1. 서버 내 문제 발생
2. 모니터링 시스템 감지
3. 슬랙 채팅 전송
4. 앱으로 채팅 메시지 확인
여기서 1-3번을 내 로컬 서버에서 처리할 수 있는 시스템이 구축되어야 한다. 4번은 슬랙 앱이 알아서 해주니까.
찾아보니 슬랙 플러그인 중 웹후크라는 것이 있다. API로 텍스트를 JSON으로 전송하면 선택되어 있는 채널에 메시지를 날려준다.
Slack app directory 에서 수신 웹후크를 찾아 add-on 한다.
웹후크에서 URL이 생성되었고 테스트를 위해 PostMan 으로 확인해본다.
POST로 body에 Json 형식이어야 한다.
{ "text" : "쌀라 쌀라.. 모함메드 쌀라.." }
이름/해당 채널/ 메시지 모두 잘 나온다.
이제 로컬 CPU / Network 상태를 체크하고 이를 바탕으로 문제가 생겼을 때, 해당 슬랙 웹후크 URL로 메시지를 전송하면 된다.
나의 경우 직접 아래와 같이 파이썬 기반으로 코드를 짰다.
def send_alert():
cpu, mem_used_percent_size, mem_available_size = get_system_state()
message = "CPU: {0}% , RAM: {1}%, Available: {2} GB".format(round(cpu, 1),round(mem_used_percent_size, 1), round(mem_available_size,1))
URL = 'https://hooks.slack.com/services/' + args.key
response = requests.post(URL, json={"text": message})
무한루프를 특정 시간마다 돌게되고, 이곳에서 문제가 생기는지 체크하여 send_alert 함수가 동작하도록 진행했다.
내가 가정한 문제 상황은
1. CPU 점유율이 n% 이상이 넘을 경우
2. RAM 사용량이 n% 이상 넘을 경우
3. 로컬 서버 80포트 접근이 불가능할 경우
총 3가지로 나누었다.
def get_system_state():
cpu = psutil.cpu_percent(interval=0.1)
mem_used_percent_size = psutil.virtual_memory().percent
mem_available_size = psutil.virtual_memory().available/1204**3
return cpu, mem_used_percent_size, mem_available_size
1번 및 2번 상태를 체크하는 것은 psutil 라이브러리를 활용하였다.(https://psutil.readthedocs.io/en/latest/)
3번은 localhost에 80포트로 소켓통신을 진행했다.
이제 각각의 필요한 서버에서 해당 py 파일을 실행하면 끝.
다만 얼마나 효율적인 프로그램일지는 미지수긴 하다.
2초에 한번씩 CPU/RAM/Network 확인하는 코드를 돌렸더니 위와 같이 나왔다. 아마 사용에는 크게 문제가 없지 않나 싶다만.
혹시 모르니 이게 맞는 결과인지 좀더 찾아봐야겠다.
'컴퓨터 공학' 카테고리의 다른 글
👉 [CS] Docker 기반 Microservice 구현 (0) | 2021.07.06 |
---|---|
👉 [Flask] Blueprint 활용하기 (라우팅 함수 관리) (0) | 2021.06.28 |
👉 [Flutter] 앱 아이콘 뱃지 만들기(iOS/Android) 방법론 삽질기 (3) | 2021.06.04 |
👉 [Flutter] FCM 사용시, iOS에서 백그라운드 작동이 안될 때 (0) | 2021.05.05 |
👉 [CS] Join (0) | 2021.02.14 |