Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Día de Ruru

에러 로깅 시스템 구축 본문

항해99/FinalProject

에러 로깅 시스템 구축

공대루루 2023. 5. 15. 04:03

문제점

기존에 사용하던 winston을 사용한 에러로그확인 방식은 서버 컴퓨터에 직접 들어가서 해당 날짜의 에러 로그 파일을 찾은 후 에러 로그를 확인해야 하는 부분이 너무 번거롭고 불편했다.

✔ 해결방법

클라우드 기반의 팀 협업 툴인 Slack을 이용해서 팀원 전체가 실시간으로 서버 에러를 모니터링 할 수 있게 적용했다.

✔ 도입

  • 먼저 Slack에 서버를 추가하고 incomming webhooks 을 설치한 후, URL을 발급받았다.
    👉 토큰을 발급 받아서 사용할 수도 있지만 incomming webhooks은 메세지 전송에 특화되어 있어서 더 다양한 기능을 시도해 볼 수 있다. 그리고 애초에 토큰이 없기 때문에 토큰 탈취로 인한 정보 유출의 가능성이 아예 없다.
  • URL 을 발급 받았으면 Slack에서 요구하는 기본 틀에 맞춰서 메세지를 보내주면 된다.
module.exports = async (message) => {
    // 보내줄 메세지 형태 작성
    const data = {
        mrkdwn: true,
        text: '',
        attachments: []
    };
    message.footer = "From Meer API Server";
    data.attachments.push(message);  //모든 메세지에 footer 추가 후 전송
    // Slack에 전송하기 위해서 axios 사용
    axios({
        url:          //발급 받은 URL,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        data
    });
};
  • Slack에 메세지를 보낼 때에는 axios를 사용해서 보내면 된다. 위의 코드를 미들웨어로 등록해두고 app.js에서 require해서 사용했다.
const message = {
        color : '#DC3545',
        title : "에러가 발생했습니다.",
        text : `errorMessage : *[${err.status}]* ${err.message}`,
    }
slackMiddleware(message)

✔ 슬랙에서 에러 메세지를 바로바로 확인할 수는 있지만 오래된 에러로그를 확인할 때에는 불편한 점이 있어서 wiston 과 winston-daily-rotate-file을 사용해서 날짜별로 에러로그를 따로 저장해주었다.

const transport = new transports.DailyRotateFile({
    filename: "errorlogs-%DATE%.log",
    datePattern: "YYYY-MM-DD-HH",
    zippedArchive: true,
    maxSize: "20m",
    maxFiles: "14d",
    dirname: "./logs",
    level: "http",
    format: printLogformat,
});

const logger = createLogger({
    transports: [
        transport,
        new transports.Console({  
            level: "http",
            format: ConsoleprintLogformat,
        }),
    ],
});

 

Comments