서버에서 500 Error 발생 시 키바나를 통해 Slack으로 알림을 보내는 모니터링 설정 방법 알아보기
준비
Slack WebhookURL 복사해두기
1. Alerting - Monitor 생성하기
1) 좌측 상단 햄버거 버튼 클릭 후 Kibana - Alerting 으로 이동한다.
2) Destinations의 우측 상단 Add Destination 버튼을 눌러 준비해둔 Slack Webhook URL을 등록한다.
3) 다시 뒤로 돌아와 Monitors로 이동한 후 Create monitor 버튼을 통해 모니터 등록 화면으로 이동한다.
4) Monitor name에 모니터링 이름을 설정하고, Disable monitor는 체크 해제 한다.(캡쳐화면은 오류)
Define monitor 영역에서 Define using extraction query로 설정한다.
5) Index를 설정해준다.
여기서는 dev 서버 인덱스에 설정해주기 위해서 app-dev-*로 전체 개발서버 인덱스를 모두 설정해주었다.
특정 인덱스를 설정해주거나 * 키워드를 이용하여 여러 인덱스를 한 번에 지정할 수 있다.
6) Define extraction query에 원하는 모니터링 쿼리를 등록해준다.
아래 쿼리는 1분마다 로그 레벨이 ERROR이고( log.error()로 찍히는) logger_name이 log4jdbc.log4j2인 로그를 찾는 쿼리이다.
{
"query": {
"bool": {
"must": [
{
"term": {
"level.keyword": {
"value": "ERROR"
}
}
},
{
"range": {
"@timestamp": {
"from": "{{period_end}}||-1m",
"to": "{{period_end}}"
}
}
}
],
"filter": [
{
"match": {
"logger_name": {
"query": "log4jdbc.log4j2",
"operator": "OR"
}
}
}
]
}
}
}
참고로 logger_name의 query에서 여러 logger_name으로 검색하고 싶을 경우 아래와 같이 공백으로 문자를 구분하고 여러 개 나열한 후 아래 operator에 or연산을 할 것인지, and 연산을 할 것인지 정해줄 수 있다.
logger_name이 LOGGER_NAME_1 이거나 LOGGER_NAME_2인 로그 찾기
"logger_name": {
"query": "LOGGER_NAME_1 LOGGER_NAME_2",
"operator": "OR"
}
logger_name이 LOGGER_NAME_1 과 LOGGER_NAME_2 모두 포함하는 로그 찾기
"logger_name": {
"query": "LOGGER_NAME_1 LOGGER_NAME_2",
"operator": "AND"
}
logger_name 뿐만 아니라 exception.exception_class로 찾아보고 싶을 경우 동일하게 적용할 수 있다.
"exception_class": {
"query": "EXCEPTION_CLASS_NAME",
"operator": "AND"
}
위와 같이 설정해줄 경우 정상적으로 입력했다면 우측에 쿼리로 추출된 결과를 확인할 수 있다.
쿼리로 인한 결과가 없을 경우(1분 내에 에러 발생 로그가 없을 경우) 아래처럼 hits.hits.total.value = 0임을 볼 수 있다.
7) 모니터링 스케줄을 (몇 분/시간의 간격으로 모니터링을 할 지) 정해주고 Create 버튼을 눌러 모니터를 생성한다.
2. Trigger 설정하기
Create Monitor를 완료하고 나면 Trigger 생성하기를 할 수 있다.
1) Trigger name을 설정한다.
2) Action 이름과 Destination을 설정한다.
어떤 메신저로 알림을 보낼지 설정하기 위해 Destination에 1-2)에서 Slack Webhook URL을 등록한 Destination을 선택해준다.
3) Slack으로 보낼 원하는 포맷을 Message에 직접 입력해준다.
입력한 메시지의 결과는 아래 Message preview를 통해 미리 확인해볼 수 있다.
디폴트로 설정된 메시지로 보낼 경우 다음과 같이 메시지가 도착한다.
내가 원하는 정보를 전송하고 싶을 경우 자유롭게 변경할 수 있다.
예를 들어 {{ctx.action.name}} 를 입력할 경우 내가 직접 설정한 Action name을 보여줄 수 있다.
'백엔드' 카테고리의 다른 글
[Swagger3] 1. springdoc-openapi를 이용한 Swagger3 설정하기(+Swagger 옵션) (0) | 2023.05.05 |
---|---|
[ELK] 2. Kibana에서 Teams WebhookURL로 에러 모니터링하기 (1) | 2023.03.13 |
[트러블 슈팅] Reflection 객체 내 @Autowired NullPointerException 발생 (0) | 2022.10.08 |
[Java] 왜 배열은 Covariant(공변)이고 제네릭은 Invariant(불공변)일까? (0) | 2022.07.22 |
[Java] Covariant Return Type이란? (0) | 2022.07.15 |
댓글