와탭 알림에서 제공하는 webhook 기능의 경우 단순히 다른 메신저로 알림을 받는 것뿐 아니라
다양한 프로그램과 연동하여 자동화에 사용할 수도 있습니다.
a사 서버들은 디스크에 zfs 를 구성한 서버입니다.
최근 해당 서버들에서 자주 일어나는 현상은 갑자기 i/o wait 지표가 급증하여 서버에 지연이 발생하는 현상이 하루에도 몇 번씩 발생하는 현상이 확인되었습니다. 해당 서버 담당자는 이 현상이 zfs의 모듈 중 하나인 zed 때문에 발생하는 현상이며 zed 프로세스를 재시작 시 서버가 정상적으로 돌아온다는 것을 확인하였습니다. 해당 내용 확인 후 담당자는 i/o wait 발생할 때마다 어떤 서버인지 찾은 후 서버 접속, 재기동을 진행하다 보니 반복 작업이 아닌 자동화가 가능할지에 대한 고민이 시작되었습니다.
시나리오 상황에서 어떻게 하면 자동화가 쉬울지 생각을 하다 젠킨스에서 webhook 을 수신받은 후 젠킨스 서버가 알림이 발생한 서버에서 명령을 실행하는 방법을 생각하였습니다.
먼저 메트릭스 알림에서 임계치를 지정하여 알림을 설정합니다. 이번 예시에는 ServerBase 카테고리의 cpu_iowait 지표를 이용하겠습니다.
다음으로 알림 수신받을 3rd 파티 플러그인을 설정합니다. 알림 수신은 수신 태그를 통해 다른 알림을 받지 못하게 설정하며 젠킨스에게 webhook을 전달할 알림 수신 설정은 webhook json 타입으로 설정하였습니다.
{
"pcode":1234,
"projectName":"Sample project",
"time":1577840400000,
"oid":1234567890,
"oname":"WAS-01"//Optional,
"title":"Alert Title",
"message":"Sample warning message"//Optional,
"level":"Warning",
"status":"on",
"metricName":"cpu"//Optional,
"metricValue":"99.99"//Optional,
"metricThreshold":"90"//Optional"
}
webhook json의 경우 위와 같은 형식을 설정한 주소로 전송합니다. 작업을 하던 중 한가지 고민이 생깁니다.
“어떻게 알림이 발생한 서버를 전달하지?”
webhook으로 전달되는 값을 보니 어떤 서버인지 구분할 수 있는 구분자가 없다는 것을 알았습니다. 이때는 이벤트 메시지를 사용할 수 있습니다.
메트릭스 알림 설정에서는 알림 메세지에 메트릭스 데이터의 태그 정보를 포함할 수 있습니다. 이를 이용하여 다음과 같이 ${host_ip} 로 설정하면 메트릭스 지표에 있는 태그 중 하나인 host_ip 를 메세지로 보낼 수 있게 됩니다. 이렇게 설정 시 위에서 설정한 webhook json 의 "message" 키값으로 ip 가 전달되게 됩니다.
이후 설정한 알림과 등록된 webhook 에 이벤트 태그를 달아 다른 모니터링 알림에는 알림을 전송하지 않도록 해줍니다.
젠킨스에 접속하여 잡을 생성해줍니다. 이후 젠킨스에서 webhook trigger를 통해 다음과 같이 설정을 진행합니다.
위와 같이 설정 시 webhook을 통해 전달받은 message를 젠킨스에서 사용 가능한 변수인 MESSAGE로 사용할 수 있습니다.
설정한 변수를 이용한다면 재기동 스크립트는 다음과 같이 간단히 작성할 수 있습니다.
ssh $MESSAGE sudo systemctl restart zed
이제 자동화를 위한 준비가 끝났습니다.
젠킨스의 webhook trigger 설명을 보면 token 값 지정 후 http://JENKINS_URL/generic-webhook-trigger/invoke 로 웹훅을 설정하면 값을 받는다고 적혀있습니다.
위 사진과 같이 저는 ZED_RESTART라고 지정하였고 젠킨스 주소의 경우 jenkins.example.com 이라 가정하겠습니다. 이때 호출 jenkins webhook url 은 다음과 같습니다.
https://jenkins.example.com/generic-webhook-trigger/invoke?token=ZED_RESTART
해당 주소를 서드파티 플러그인의 Webhook JSON 에 기입합니다.
등록 후 아래 사진과 같이 수신 태그 등록, 수신 태그 미설정 알림 받기 off 설정 시 i/o wait 알림만을 수신하여 젠킨스에게 전달하게 됩니다.
Webhook 의 경우 다양한 프로그램과 연동이 가능합니다.
webhook body 값을 사용하는 서비스와 맞춘다면 알림 발생 시 이슈트래커에 자동 이슈 등록, 위 시나리오와 같이 운영 자동화 등 사용할 수 있는 기능은 무궁무진합니다.