brunch

You can make anything
by writing

C.S.Lewis

by 강진우 Sep 10. 2019

CloudWatch 이상 동작 탐지 기능 사용하기 #1

Amazon Web Service

오늘은 CloudWatch의 이상 동작 탐지 기능을 통해 갑작스러운 패턴 변화 등을 감지하여 모니터링하는 시스템에 대해 이야기해보려고 합니다. 특히 로그 수집 시스템으로 각광받고 있는 ElasticStack과의 연동을 통해서 애플리케이션에서 발생하는 슬로우 로그의 패턴을 분석하는 과정을 그려 나가 보겠습니다.

CloudWatch의 이상 동작 탐지 기능 예제

ElasticStack


본격적인 이야기에 앞서 ElasticStack을 활용한 애플리케이션 로그 수집 시스템에 대해 살펴보겠습니다. 아래는 시스템의 구성도 입니다.

ElasticStack 시스템 구성도

구성은 간단합니다. 애플리케이션 서버에는 filebeat가 설치되어 발생하는 로그들을 전부 kafka로 보냅니다. 그리고 logstashkafka에서 로그들을 꺼내서 JSON 문서로 만들고 ElasticSearch에 저장합니다. 그리고  이렇게 저장된 로그들은 kibana를 이용해서 확인합니다. 그럼 아래와 같이 kibana를 통해서 로그를 조회하고 모니터링에 활용할 수 있게 됩니다.

kibana 화면 예제

CloudWatch PutMetricData


이제 ElasticStack에 저장되고 있는 애플리케이션의 슬로우 로그들에 대한 지표를 CloudWatchCustom Metric으로 쌓아 보겠습니다. 

먼저 전체 로그 수를 가져오는 쿼리입니다. 현재 시간으로부터 1분 이내에 수집된 모든 로그의 수를 계산합니다.

전체 로그 수 가져오기

그리고 응답 속도가 1초를 넘는 슬로우 로그의 수를 가져오는 쿼리입니다. 각각의 필드명과 슬로우 로그 기준 값은 각자의 환경에 맞게 변경하면 됩니다.

슬로우 로그 가져오기

이렇게 두 개의 쿼리를 이용해서 1분 동안의 전체 로그 수와 슬로우 로그 수를 가져온 후 비율을 계산합니다.

비율 계산 하기

그리고 계산된 비율을 CloudWatchPutMetricData API를 이용해서 저장합니다.

Put Metric API 사용 예제

PutMetricData APINamespace, MetricName, Dimensions와 같은 지시자를 필요로 합니다. 각각의 관계는 아래와 같습니다.

NS, Dim, Metric의 관계

Namespace가 가장 큰 개념이고 그 아래로 Dimension들이 위치하고 있으며 실제 저장되는 Metric의 이름과 값은 MetricName, Value로 정의합니다.

물론 위와 같은 작업을 하기 위해서는 EC2 혹은 Lambda 함수에 아래와 같은 PutMetricData 권한이 있어야 합니다.
PutMetricData 권한 주기

여기까지 완료되면 아래와 같은 CloudWatch 메트릭을 그래프로 볼 수 있게 됩니다.

CloudWatch Metric Graph

이제 본격적으로 이상 탐지 기능을 사용해 볼 차례가 되었습니다.


anomaly detection 활성화


CloudWatch에 메트릭을 보게 되면 아래와 같은 그래프 형태의 아이콘을 볼 수 있습니다.

이상 탐지 기능의 활성화 버튼

해당 버튼을 클릭하면 이상 탐지 기능이 활성화되며 아래와 같이 메트릭이 하나 더 생성됩니다.

이상 탐지 기능 활성화

Details에 보면 ANOMALY_DETECTION_BAND라고 되어 있는데 이는 CloudWatch에서 제공하는 함수 중 하나입니다. 첫 번째 값인 m1은 이상 탐지 기능의 베이스가 되는 값을 가리키는데 위 그림에서는 ID가 m1인 첫 번째 값을 바탕으로 이상 탐지를 한다는 의미입니다. 두 번째 값인 2는 이상 탐지 기능의 범위를 결정하게 되는데 이 값이 크면 클수록 회색 음영의 범위가 넓어지게 됩니다.

두 번째 값의 변화에 따른 음영 지대의 변화
위 그림에서는 회색 음영이 바로 나타난 것처럼 보이지만 실제로 이상 탐지 기능을 활성화하게 되면 학습하는 데에 시간이 소요되기 때문에 처음에는 회색 음영이 보이지 않습니다. 또한 이상 탐지 기능은 머신 러닝을 기반으로 하기 때문에 시간이 지나면 지날수록 음영의 영역이 더욱 정교해지고 정상적인 패턴을 따라가게 됩니다.

이상 탐지 알럿 보내기


지금까지의 예제를 통해서 CloudWatch의 이상 탐지 기능을 활성화했다면 이제 이상 탐지 기능에 의해 탐지된 비정상 패턴들을 알럿팅 해주어야 합니다. 이 작업은 CloudWatchSNS, 그리고 Lambda 함수를 이용해서 구축할 수 있습니다.

알럿 시스템 구성도

우선은 시스템 구성도만 먼저 공유하고 SNS, Lambda를 통해서 Slack으로 알람을 발송하는 구체적인 과정은 두 번째 글로 이어 가겠습니다. 

감사합니다.




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari