개요

aws 서버에서 서비스 배포 중 런타임에 발생하게 될 에러를 보기 위해서 slack과 연동하기로 하였다.

 

 

maven

 

<dependency>
  <groupId>com.slack.api</groupId>
  <artifactId>bolt</artifactId>
  <version>1.27.2</version>
</dependency>
<dependency>
  <groupId>com.slack.api</groupId>
  <artifactId>bolt-servlet</artifactId>
  <version>1.27.2</version>
</dependency>

 

application.properties

 

properties에 토큰과 채널 이름을 정의한다.

#slack 
slack.token= your auth token
slack.channel.monitor= your channel name

 

토큰 생성

 

https://api.slack.com/

 

Slack은 당신을 위한 Digital HQ입니다

Slack은 여러분의 팀과 소통할 새로운 방법입니다. 이메일보다 빠르고, 더 조직적이며, 훨씬 안전합니다.

slack.com

 

1. 로그인 후 your apps 들어가기

 

2. Create New App

 

3. App Create

4. Permissions 설정

 

5. Permissions 설정 후 Install to Workspace 실행하면 토큰이 생성됨

6. Slack 테스트를 위한 서비스 생성

@Service
public class SlackService {
	
	
	@Value(value = "${slack.token}")
	private String token;
	
	@Value(value = "${slack.channel.monitor}")
	private String channel;

	
	public void postSlackMessage(String message) {
		
		try {
			MethodsClient methods = Slack.getInstance().methods(token);
			ChatPostMessageRequest request = 
					ChatPostMessageRequest.builder()
					.channel(channel)
					.text(message)
					.build();
			
			methods.chatPostMessage(request);
			
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

 

 

 

테스트 성공 후 

어떠한 에러들을 보낼 것인지 정한 것은 없기에 모든 에러 메시지를 Slack에 보내기로 결정함

@RestControllerAdvice
public class GlobalExceptionHandler {
	
	@Autowired
	private SlackService slackService;
    
	/**
	 * 모든 에러를 클라이언트에 보내지 않음
	 * 
	 * @param exception
	 * @return
	 */

	@ExceptionHandler(Exception.class)
	public ResponseEntity<String> globalExceptionErrorHandler(Exception exception){
		String errorMessage = exception.getMessage();
		
		slackService.postSlackMessage(errorMessage);
		
		return new ResponseEntity<String>("server error", HttpStatus.NOT_FOUND);
	}
}

+ Recent posts