이전 포스팅
Mattermost에 대한 alert bot을 만들기 설계
근본적으로 먼저 설계를 진행하기 전에
일단은 혹시 grafana와 mattermost를 연동할 수 있는 기능이 있을까 싶어 검색을 몇가지 해보았다.
Mattermost performance alerting guide — Mattermost documentation
Grafana alerting notifications in Mattermost | Tinkering Tobias (skarhed.com)
[MatterMost] Webhooks와 Bot으로 메세지 보내기 (tistory.com)
마지막의 링크가 도움이 많이 되었다.
우선, mattermost를 docker를 통해서 실행하고 public channel을 하나 만들자.
그 다음 아래와 같은 사항들을 진행해본다.
Channel ID랑 Token이 필요하다.
Channel ID는 Channel Info의 이 부분에 있다.
Mattermost Bot 생성
mattermost에서 bot을 생성하면 token을 생성할 수 있다.
bot creation이 가능하도록 하는 admin option을 켜고, 아래와 같이 생성이 설정에서 bot account를 생성하자.
그러면 bot에 대한 Token이 나온다.
그리고 아래와 같은 Post를 API로 만들어서 요청을 날려보면 테스트 메세지를 보내볼 수 있다.
export const createPrAlarm = async (req: Request, res: Response) => {
const data = {
"channel_id": "<channel-id>",
"message": "This is a message from a bot",
"props": {
"attachments": [
{
"pretext": "Look some text",
"text": "This is text"
}
]
}
};
const config = {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <token>'
}
};
try {
const response = await axios.post('http://localhost:8065/api/v4/posts', data, config);
res.status(200).send(response.data);
} catch (error) {
console.error(error);
res.status(500).send({ message: "Internal Server Error" });
}
}
위의 코드에서 <channel-id>, <token> 부분에 메세지를 보내고 싶은 channel-id와 bot의 token을 넣어주면 된다.
그러면 Grafana에서 test 내용을 요청했을때 아래와 같이 봇이 해당 채널에 메세지를 보내주는것을 확인할 수 있었다.
그럼 이제 원하는 데이터를 서버에 전달이 가능한지 확인해야한다.
특정 데이터가 추가되었을때 알림을 보내고 싶다면 아래와 같이 grafana alert rule을 지정하면 좋을것 같다.
SELECT COUNT(*)
FROM prs
WHERE created_at > NOW() - INTERVAL '100000 minutes'
+ expression으로 해당 alert를 생성하기 위한 조건을 만들 수 있다.
다만, 내가 원하는 정도까지 데이터를 전달할 수 있을것 같지가 않다.
특정 조건을 생성하면 그 생성된 데이터를 그대로 전달해야하는것 처럼 보이는데
위와 같이 alert 조건을 생성하더라도 내가 원하는 정도의 level은 아니기 때문이다.
그래서 grafana를 통하지 않는 방법을 생각해봤다.
그러면 차라리 crawling 코드 안에 alerting post rule을 집어넣으면 어떤가?
db에 특정 유저들의 pr 요청에 대한 update를 받으면 mattermost bot에 post를 보내도록 코드를 작성하는것이다.
나쁘지 않을지도 모르겠다는 생각이 들었다.
NodeJS Express를 통해서 API 서버 구축 및 DB 업데이트 하기 (tistory.com)
추가로 별도의 서버를 안만들어도 된다는 점이 회사내에서 구현하기에 적절한것으로 생각된다.
1. 굳이 grafana의 webhook을 처리하는 서버를 만들필요가 없고
2. grafana의 데이터 처리 방식에 얽매이지 않아도 되며
3. alarm을 위한 로직도 내 마음대로 추가가 가능하다.
는 장점이 있을것 같다.
기존에 구현된 코드들에 alert를 post하는 코드를 작성하면 될거같다.
다만, alarm에 대한 요구사항이 있는 사람들을 처리하기위한 내용이 DB에 필요할듯하다.
이 부분은 추가하면 되니 괜찮을듯.
정리하자면, 리뷰 데이터를 크롤링 하는 프로그램에 bot에 alarm을 보내도록 요청하는 api 까지 포함하자는 것이다.
일단은 그런 방향으로 설계를 해서 다음 포스트에서 구현까지 진행을 해보도록 하려고한다.
'프로젝트 > Github Rest API로 프로젝트 리뷰 대시보드 구성하기' 카테고리의 다른 글
Mattermost alert bot 구현하기 (0) | 2024.02.01 |
---|---|
Grafana Dashboard에 Webhook 서버 (Mattermost 봇) 연결해서 알람 봇 만들기 - 작성중 (0) | 2024.01.08 |
mattermost deploy 및 봇 사용해보기 (1) | 2024.01.07 |
NodeJS Express를 통해서 API 서버 구축 및 DB 업데이트 하기 (0) | 2023.12.25 |
Grafana 리뷰 대시 보드 구성 - Panel 에 변수 추가하기 (0) | 2023.12.22 |
개발 및 IT 관련 포스팅을 작성 하는 블로그입니다.
IT 기술 및 개인 개발에 대한 내용을 작성하는 블로그입니다. 많은 분들과 소통하며 의견을 나누고 싶습니다.