회사에서 협업툴로 Slack을 사용하고 있는데,
각종 통계자료 몇 로그데이터를 매일 알림으로 보내주면 좋을 것 같았다.
그래서 무슨데이터를 전송해주면 좋을지 고민하다가
1.전체 유저수 / 2.가입자수 / 3.기사 조회수 / 4.언론사별 기사 발행수 / 5.댓글수 / 6.DAU / 7.WAU
해당 7가지 데이터를 보여주기로 결정했다.
Slack bot을 통한 axios와 schedule를 사용해서 자동화를 시켜줄 것이다.
우선 Slack bot을 만들자.
해당 URL에 접속하여 슬랙봇을 생성을 하고,
다음 URL에서 슬랙봇의 chat.postMessage 권한을 추가해 주도록 하자.
그 후 Install to Workspace 를 통해 토큰을 빠르게 발급받자.
이제 바로 Node.JS와 API 연동을 시켜보자.
우선 axios와 schedule를 사용하려면 패키지를 설치해야한다.
axios 설치
npm install axios
// or
yarn add axios
schedule 설치
npm install @nestjs/schedule
// or
yarn add @nestjs/schedule
그 후 Api를 연동시킬 모듈에 HttpModule를 추가 해야한다.
그다음 아까 발급받은 Slackbot 토큰값을 추가해 줄 차례다.
src > common > apis > slack.api.ts
해당 경로에 apis 폴더와 ts파일을 추가해주자.
import axios from 'axios';
export const postMessage = async (channel: string, text: string) => {
const params = { channel, text };
const option = {
headers: {
Authorization: `Bearer 여기에 발급받은 토큰정보를 넣으면 됩니다.`,
},
};
try {
const res = await axios.post(
'https://slack.com/api/chat.postMessage',
params,
option,
);
console.log(res.data);
} catch (err: any) {
console.log(err.message);
throw err;
}
};
이제 Controller부로 가서 자동화 코드와 관련 데이터코드를 짜보자.
@Cron('원하는 Cron 시간', {
name: 'userLogData',
})
async userLogDataSlack() {
// 필요한 데이터를 갖고오는 코드 작성
const TARGET_CHANNEL = '해당 메시지를 전송할 채널명';
const msg = `
< ${month}월 ${date}일 NEXT Analytics >
\n1. 전체 유저수: ${totalUser}명
\n2. 가입자수: ${registerUser}명
\n3. 기사 조회수: ${articleViewCount}회
\n4. 언론사별 기사 발행수
\n
\n5. 댓글수: ${totalComment}개
\n6. DAU: ${dau}
\n7. WAU: ${wau}
\n
`;
postMessage(TARGET_CHANNEL, msg);
}
관련 코드를 작성하고 import 부분을 체크해줘야한다.
마지막 라인에 postMessage 부분을 아까 slack bot 토큰파일 경로로 import 시켜야한다.
사진 속 처럼 import정보까지 변경 해 주었다면 전부 끝났다!
이제 설정해둔 @Cron 시간이 돌때까지 기다리면
내가 설정했던 slack채널에 정상적으로 메시지가 전송된 것을 확인할 수 있을 것이다!
해당 내용을 바탕으로 다음번에는
서버에 이상이 있을시 바로 Slack에 알림 발송하는 모니터링을 만들 계획이다.
'Web > NestJS' 카테고리의 다른 글
[Nest.JS] 구글, 네이버, 카카오 소셜로그인 구현 - 1 (1) | 2023.10.16 |
---|---|
[Nest.JS] Nest.JS에서 cache-manager를 활용한 캐싱 방법 (0) | 2023.09.17 |
[Nest.JS] TypeOrm에서 페이지네이션 구현 (last_id, size) (0) | 2023.05.05 |
[Nest.JS] DTO vs Interface (0) | 2023.04.23 |
[Nest.JS] Axios, Http 비동기 통신 라이브러리 (0) | 2023.04.15 |