Slack Bot 으로 서비스 신뢰도 높이기

Dragon_Tack·2025년 1월 17일

오류가 발생하거나, SNS의 경보를 줘야할수도 있지만, Service 레벨에서 중요한 정보들에 모듈화해서 정보를 받아보면 어떨까 ?

이 모듈을 개발하면서 핵심적으로 느낀부분이, MSA기반 아키텍쳐 이벤트들을 슬랙봇으로 수집한다면 각각 인스턴스의 모니터링 툴을 굳이 들어가지 않더라도, 슬랙채널에 모여있는 오류메시지로 원하고자 하는 레벨의 로그들을 중앙화 할수있지않을까? 모니터링에도 용이할거라는 생각이 굳게 든다.

또한 Batch Job으로 일별 통계, 시간별 통게도 구현이 가능하며, 모듈단위로 쪼개놓으면 여러모로 유용하게 사용할수있다.

Slack 설정

Slack API Incoming Webhooks 생성
Slack API 홈페이지 → Create New App → 이름 및 workspace 지정 → Feature/Incoming Webhooks 메뉴 → Activate Incoming Webhooks 를 On → Webhook URL .env 파일에 저장

Slack Module 설정

import { Injectable, Logger } from '@nestjs/common';
import {
  SlackWebhookEndpointType,
  SLACK_WEBHOOK_ENDPOINTS,
} from './constants/slack-webhook-endpoints.constant';
import { IncomingWebhook } from '@slack/webhook';

@Injectable()
export class SlackWebhookService {
  private async _send(url: string, message: string) {
    if (process.env.NODE_ENV === 'local') {
      console.log('슬랙메시지: ', message);
      return;
    }
    try {
      const webhook = new IncomingWebhook(url);
      (async () => {
        await webhook.send({
          text: message,
        });
      })();
    } catch (e) {
      Logger.error(e);
    }
  }
  async send(type: SlackWebhookEndpointType, message: string) {
    this._send(
      SLACK_WEBHOOK_ENDPOINTS[type],
      `${process.env.NODE_ENV} ${message}`,
    );
  }

  async sendEvent(message: string) {
    this.send('channel1', message);
  }
}

Lv.0

Lv.1

OAuth Token으로 유저아이디 추출하기

멘션된 모습을 확인할수있다.

응용단계

Batch Job에서의 응용도 가능하며 통계화 데이터를 daily로 수집이 가능하다.

Conclusion

사이트 신뢰성 엔지니어링에 대해 알아보던 중에 해당 기능을 사용해보면서 역량을 키워봤습니당.
상시 모니터링을 할수 없기 때문에, 중요도 높은 알림이나, 통계화된 데이터를 보기좋게 커스터마이징하여 입맛에 맞게 수정하면 좋을듯 합니다.

고민거리
모든 오류메시지를 보낸다면 채널이 무거워질수있음(폭파)
ㄴ 긴급대응하기에 꼭 필요로하는 message위주로 담아주는게 좋을듯함 - 결제실패, 유저문의
ㄴ 이정도 레이어면 cloudwatch자체를 별도로 중앙화 로그를 만드는게 편이할수도있음
ㄴ 또한 오류메시지에 민감정보가 속해있다면 마스킹처리는 어떻게할지?

이벤트성으로 입맛에맞게 일부만쓴다면?
ㄴ admin에서 주로 사용할 모델링이나, 통계같은 지표를 추출해서 보기에 좋다.

참고문헌

profile
고민의 흔적을 늘여놓는 공간

0개의 댓글