상태관리시스템을 도전해봤다
슬랙 알림 연동해서 error log 남기기
상태관리시스템(슬랙 알림 연동)
슬랙 설정
1.error 알림을 남길 슬랙 워크스페이스 및 채널 추가하기
나는 우리 프로젝트이름인 BBICHUL을 딴 워크스페이스를 만들고 alarm을 띄울 채널을 따로 추가했다.
2.채널 설정에서 앱추가하기
alarm 채널에 들어가서 채널명 부분을 클릭하면 앱추가할 수 있는 설정창이 뜨는데 거기서 통합을 눌러 앱추가를 한다.
3.Incoming WebHooks를 검색해 추가 및 설정
나의 경우 이미 앱을 추가했기 때문에 워크스페이스에서 부분이 뜨지만 처음에는 앱 디렉터리에서 부분의 설치 버튼을 누른다.
왼쪽의 Slack에 추가 버튼을 누르면 다음 사진으로 넘어간다.
나의 경우 알림을 띄울 alarm이라는 이름의 채널을 만들어놨기 때문에 그걸로 선택했다.
제일 위에 이런 내용이 뜨는데 웹후크 url은 나중에 사용할 곳이 있기 때문에 복사해둔다. 그리고 웹후크 url에 json 페이로드를 보내기 때문에 노출되면 내 프로젝트가 아닌 다른 사람이 다른 내용의 error 로그를 보낼 수도 있어서 노출하지 말자!
제일 밑에서 이런 사용자 지정 설정까지 끝내고 저장을 하면 이제 슬랙 설정은 끝이다!
4.잘되는지 웹후크 url을 포스트맨으로 확인해보기
잘된다!
Springboot 설정
1.의존성 및 파일 추가
implementation 'com.github.maricn:logback-slack-appender:1.4.0'
build.gradle 의존성 추가
logging.slack.webhook-uri: ${SLACK_WEBHOOK_URI}
logging.slack.config: classpath:logback-spring.xml
application.properties
나는 웹후크 url을 환경변수로 설정해줬다. 혼자 테스트하는거라면 그대로 url을써도 괜찮다!
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<springProperty name="SLACK_WEBHOOK_URI" source="logging.slack.webhook-uri"/>
<appender name="SLACK" class="com.github.maricn.logback.SlackAppender">
<webhookUri>${SLACK_WEBHOOK_URI}</webhookUri>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</pattern>
</layout>
<username>Cake-Server-log</username>
<iconEmoji>:stuck_out_tongue_winking_eye:</iconEmoji>
<colorCoding>true</colorCoding>
</appender>
<!-- Consol appender 설정 -->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %green(%-5level) %logger{35} %cyan(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<appender name="ASYNC_SLACK" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="SLACK"/>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="ASYNC_SLACK"/>
</root>
</configuration>
logback-spring.xml
pattern은 alarm 내용에 시간이 뜨게 설정
username은 슬랙에 출력되는 이름
appender에서 name = "Console" 부분은 springboot가 실행됐을 때 콘솔 로그가 출력되도록 설정한 부분이고 name = "ASYNC_SLACK" 부분은 log.error()만 알림 보내게 작성한 것이다.
마지막 info부분은 콘솔에도 로그를 띄우기 위한 코드이다.
2.임의의 에러코드를 추가하기
@Slf4j
@RestController
public class SlackAlarmController {
@GetMapping("/alarm")
public String test() {
log.error("Slack error alarm");
log.info("Slack log info");
return "test";
}
}
나는 SlackAlarmController 클래스를 추가해서 alarm api가 호출될때 Slack error alarm이라는 error 로그를 띄워보기로 했다.
성공!!!
테스트용 api 호출이 아닌 실제 에러가 발생했을때 슬랙 알람화면. 성공적!!