APM 이 왜 필요할까요?
APM 은 무엇을 위해 필요한 것일까요?
- 웹브라우저에서 아무런 응답이 없어요.
- 시스템은 정상인데 서비스가 안 되는 이유는 뭘까요?
- 어제 까지만 해도 멀쩡한 서비스 왜 갑자지 안되는 거조?
IT 서비스를 운영할 때에 가장 중요한 것은 안정성입니다.
IT 서비스를 안정적으로 제공하기 위해선 인프라에서부터 애플리케이션까지 구성이 완벽하여야 합니다.
하지만 사람이 사는 세상에는 완벽한 것은 없습니다.
때문에 시스템을 관찰하고, 점점 개선해 나갈 필요가 있습니다.
그 때에 필요한 것은 시스템을 관찰하는 툴입니다.
그 중, 서비스를 제공하는 것은 Application으로, 아무리 서비스가 동작하는 인프라가 정상적이어도,
Application이 정상적이지 않으면, 서비스를 정상적으로 제공할 수 없습니다.
그때, Application이 정상적인지 아닌지 확인하기 위해서는 APM ( Application Performance Management) 을 이용하여야 합니다.
APM – 시스템 장애의 원인 분석이 코끼리 만지기 인가요?
IT도 각 분야별로 세분화되어 있기 때문에 한 사람이 모든 IT 분야의 지식들을 알 수는 없습니다.
자신의 전문 분야는 잘 알고 있지만 다른 분야는 그 만큼 알지 못합니다. 실제 서비스 환경을 보면 여러 단계에 걸쳐 복잡하게 구성되어 있습니다.
각자 자신의 업무 분야만 파악하고 있으면 서로 자신의 업무 범위 내에서만 판단을 하기 때문에 정확한 장애 원인을 찾기가 더욱 어렵게 됩니다.
그래서 이런 복잡한 구조에서는 전체의 구조를 파악하고 모니터링 할 수 있어야 어떤 구간에서 장애가 발생했으며 어떤 조치가 필요한지를 파악할 수 있습니다.
시스템 장애가 발생하면 관련 벤더와 엔지니어가 모입니다. 서로 자기 분야가 아닌 부분에서 문제가 발생했을 것이라고 의심하는 걸까요? 과연 누가 장애의 원인을 밝힐 수 가 있을까요?
서비스에 관련된 사람들은 전문가이지만, 전체를 조안하고, 문제를 객관적으로 찾을 수 있는 사람은 드뭅니다.
APM 은 이러한 문제를 해결 하는 데에 아주 유용하게 이용될 수 있습니다.
APM 필요성 – 개발자 측면 / 운영자 측면/ 비즈니스 담당자 측면
그렇다면 APM을 이용하는 대상이 될 수 있는 개발자, 운영자, 고객 시점에서 왜 APM 이 필요한가를 알아보겠습니다.
개발자 시점
자신이 만든 코드 중, 어느 것이 느린지 파악하기 위해서 APM 이 필요할 것입니다.
개발 환경에서는 정상적이고, 빠르게 응답을 하였으나, 운영 환경에서는 그렇지 않을 수도 있습니다.
그 때에 어느 부분이 느린지, Code level로 성능을 측정할 수 있게 해 주는 것이 APM 입니다.
(1) 자신의 코드 중 어느 메서드 느린지 파악하기 위하여.
(2) 자신의 코드가 JIT, garbage collection 등의 이유로 느려지는지 파악하기 위하여.
해당 사항을 파악하기 위해선, APM에서 code level performance profiling이 가능하여야 한다.
(3) 자신이 작성한 쿼리문 중 어느 쿼리문이 느린지 파악하기 위하여.
해당 사항을 파악하기 위해선, APM에서 code level performance profiling이 가능하여야 한다.
운영자 시점
서비스에 장애가 발생하였을 때에, APM 이 없다면, 어떤 부분이 장애인지 파악조차 할 수가 없게 될 가능성이 높습니다.
운영자는 APM 을 통해 시스템의 디스크, 네트워크, Application 등 어느 부분이 문제인지 빠르게 파악하고, 문제가 있는 부분에 관련된 사람과 객관적인 자료를
이용하여 커뮤니케이션을 할 수 있습니다.
(1) 모니터링 대상 서버가 정상 작동 중인지 파악하기 위하여.
(2) 서비스가 정상적이지 않을 경우, 구체적이진 않아도, 어느 부분에서 문제가 있는지 파악하기 위하여.
해당 사항을 파악하기 위해선, Transaction traces, basiic server monitoring, metrics(CPU, memory, etc) 등을
모니터링 할 수 있어야 한다.
고객 시점
서비스 전체에 대한 책임을 가지고 있는 사람으로서, 장애가 나지 않게 서비스를 제공하는 책임이 있습니다.
서비스에 장애가 발생하였을 때에, 빠르게 해결하기 위해선, 문제를 빠르게 파악할 수 있어야 되고,
구체적으로 파악한 문제를 바탕으로 복구를 진행하여야 합니다.
이 때에, APM 이 없다면 담당자들은 전체를 보지 못하고, 책임을 떠넘기다 서비스 복구에 엄청난 시간이
소모될 수 있습니다.
(1) 전체적인 서비스에 대한 책임을 가지고 있음.
(2) APM 이 없으면, 각 부분을 담당하고 있는 사람들이, 장애가 났을 때에 장애를 처리하는 시간이
늘어나기 때문에, 서비스를 책임지는 사람으로서, 목이 날아갈 수 있음.
이처럼 APM은 개발자, 운영자, 고객 입장에서 안정적인 서비스를 제공하는 데에 큰 역할을 합니다.
때문에 서비스를 제공한다면 APM을 도입하는 것은 거의 필수라고 볼 수 있겠습니다.
이 글은 오픈마루 클라우드 서비스팀 서영은 님이 작성해 주셨습니다.
Written by YeongEun Seo ( sye010@opennaru.com )
쿠버네티스 : 마이크로서비스 아키텍처 구현 데모
/in Kubernetes, Microservices Architecture, OpenShift, 분류되지 않음/by 실장 님클라우드 여정 의미와 가치
/in Cloud, Kubernetes, OpenShift, 분류되지 않음/by 실장 님쿠버네티스 1.2 부터 도커 사용 중단
/in Kubernetes, OpenShift, 분류되지 않음/by 실장 님