티스토리 뷰

 


안녕하세요! 오늘은 인프라 파트 중 모니터링에 관련된 얘기를 해볼까 합니다.

 

서버를 운영하다보면 여러 장애가 발생하곤 합니다. 물론 모든 장애를 모니터링 할 수는 쉽지 않겠지만, 이번에는 가장 기본적인 서버가 죽었을 때 스크립트 작성을 통해 Slack으로 알림을 받고자 합니다

 

자, 이제 시작해봅시다!

 

 

목차는 다음과 같습니다.

1. Slack에 알림을 보낼 수 있는 incoming webhook(수신 웹후크) 설정 하기

2. 쉘 스크립트 작성을 통해 EC2 인스턴스 내에서 서버 모니터링 하기

 

간단하죠? 하나씩 해보겠습니다.

 

슬랙 좌측 하단에 앱 추가 클릭

 

먼저 Slack 왼쪽 하단에 앱 > 앱 추가를 클릭하자!

 

Incoming webhooks 추가

 

이어서 검색창에 incoming webhooks 를 입력하고, 추가 버튼을 눌러줍니다!

 

 

Slack에 추가 클릭

 

 

Slack에 추가 클릭~~~

 

 

원하는 채널 등록 후 추가 클릭

 

 

다음은 어떤 채널에 알림을 전송할지 정하는 화면인데요!

기존에 보내고 싶은 채널이 있다면 선택을 해주시면 되고, 새로 생성을 원하신다면 새 채널 생성을 클릭 합니다!

 

그 다음 수신 웹후크 통합 앱 추가 클릭!

 

 

노란 칸 안에 있는 URL을 복사하자

 

 

이제 중요해요! 여기까지 오셨다면 노란색 줄 쳐진 부분에 url이 나올건데요! 이를 복사해서 기억하고 있어야 합니다~! 이를 활용해서 알림을 보낼거니까요~!

 

 


 

자, 여기까지 무사히 오셨다면
이제 본격적으로 EC2 내부에서 스크립트를 짜보겠습니다!

 

 

저는 JAR 프로세스 실행 하나, 그리고 NPM 서버 하나를 모니터링 하고 싶은데요. 스크립트는 아래와 같습니다!

 

 

#!/bin/bash

# Slack Webhook URL
WEBHOOK_URL="복사한 URL 입력"

# EC2 인스턴스의 프라이빗 IP 주소 가져오기 --> 이쪽 코느는 구글링해서 찾아보세요~~
TOKEN=$()
PRIVATE_IP=$()

# 현재 시간 가져오기
current_time() {
  date "+%Y-%m-%d %H:%M:%S"
}

# 알림을 보낼 함수
send_slack_notification() {
  local message=$1
  local time=$(current_time)
  curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"${message} (IP: ${PRIVATE_IP}, 발생 시각: ${time})\"}" $WEBHOOK_URL
}

# 프로세스 모니터링 함수
monitor_processes() {
  # Java 프로세스 확인
  java_process=$(ps aux | grep '[j]ava.*\.jar')

  if [ -z "$java_process" ]; then
    send_slack_notification "Alert: 운영계 서버가 동작하지 않습니다. 개발팀은 확인해 주세요!"
  fi

  # npm run dev 프로세스 확인
  npm_process=$(ps aux | grep '[n]pm.*run dev')

  if [ -z "$npm_process" ]; then
    send_slack_notification "Alert: 관리자 페이지가 동작하지 않습니다. 개발팀은 확인해 주세요!"
  fi
}

# 무한 루프로 1분마다 체크
while true; do
  monitor_processes
  sleep 60
done

 

 

단순히 프로세스 조회를 통해 해당하는 프로세스가 없다면 슬랙으로 알림을 보내는 스크립트 입니다!  이제 잘 가는지 확인해볼까요?

 

 

 

 

 

 

 

 

 

 

 

짜잔! 알림이 잘 오는 것을 확인했습니다!~!~!

여기까지 EC2 + Slack 연동을 통해 서버 모니터링이었습니다!

 

감사합니다!