Slack Webhook으로 서버 장애 알림 받기 (feat. 권한문제, CRLF 오류 해결)

왜 만들게 됐나

업체 서버에 내부 파일을 전송하는 작업을 운영하고 있는데, 문제가 하나 있었다.

해당 서버가 해외 서버다 보니 간헐적으로 연결이 끊기는 상황이 발생했다. 프랑스 서버라 너무나 멀었다...

더 골치 아팠던 건 전송 방식이 SFTP로 구축되어 있었다는 점이다. 내가 개발한 것도 아니고, 서버 담당자도 아니었기 때문에 구축 방식 자체를 바꾸거나 서버를 직접 건드려서 해결하는 건 불가능한 상황이었다.

그래서 기존 구축 방식은 그대로 두되, 해외 서버 연결 시 sleep을 두어 연결을 기다리거나 재전송하는 로직을 추가했다. 하지만 그래도 연결 자체가 끊기는 경우가 계속 발생했다. 심지어 파일 전송이 끊긴 걸 확인하려면 작업 이후 log 파일을 직접 열어서 눈으로 확인하는 수밖에 없었다.

이 때문에 업무가 자꾸 꼬이기 시작했다. 연결이 끊긴 걸 뒤늦게 발견하고, 그때부터 처리가 밀리는 패턴이 반복됐다.

그래서 생각한 게 알림 자동화였다. 매일 아침 Slack으로 정상적으로 파일 전송이 되었는지 상태값을 받아보고, 문제가 있으면 바로 수동으로 처리해주면 업무가 꼬일 일이 없겠다 싶었다


만든 방법

1. Slack 워크스페이스 생성

업무용으로 별도 Slack 워크스페이스를 새로 만들었다.

 

2. Slack Webhook 생성

Slack API에서 Incoming Webhook을 생성해서 연동 준비를 했다. Webhook URL을 발급받으면, 해당 URL로 POST 요청을 보내는 것만으로 Slack 메시지를 전송할 수 있다.

 

3. Shell 스크립트 작성

서버에서 log를 확인하고 Slack으로 알림을 보내는 shell 스크립트 파일을 작성했다.

 

4. Cron에 배치 등록

작성한 스크립트를 매일 자정 5분에 실행되도록 cron에 등록했다. 

 
#---------------------------------- log check - slack -------------------------------------#
05 00 * * * /home/user/cronjob/파일명

실행하니 오류 발생

배치를 등록하고 실행해봤더니 권한 문제 또는 파일을 찾을 수 없다는 오류가 발생했다.

원인은 shell 스크립트 파일 자체의 문제였고, 세 가지를 순서대로 해결했다.

 

1. 소유자 / 그룹 변경

chown 소유자명:그룹명 파일명

 

2. 실행 권한 부여

chmod 755 파일명

 

3. CRLF 문제 해결

Windows 환경에서 파일을 작성하면 줄바꿈 문자가 \r\n(CRLF)으로 저장된다.

Linux에서는 이걸 인식 못해서 오류가 나는 경우가 있다. 아래 명령어로 제거해줬다.

sed -i 's/\r//g' 파일명

해결 후

세 가지를 수정하고 배치를 재실행하니 정상적으로 Slack 알림이 오는 것을 확인했다.

이제는 매일 아침 Slack을 열면 전날 밤 연동 상태를 바로 확인할 수 있다. 문제가 있으면 출근하자마자 바로 처리할 수 있게 됐고, 예전처럼 뒤늦게 발견해서 업무가 꼬이는 상황이 사라졌다.

로그 파일을 일일이 열어보던 시절과 비교하면 훨씬 편해졌다.