EC2 콘솔의 Monitoring 탭을 열면 CPU, 네트워크 I/O, 디스크 I/O가 보인다. 그런데 정작 운영자가 제일 많이 보고 싶은 메모리 사용률과 디스크 여유 공간은 없다. 이유는 간단하다. 이 메트릭들은 게스트 OS 안에서만 알 수 있고, AWS 하이퍼바이저는 게스트 OS 내부를 들여다볼 수 없기 때문이다. 공동 책임 모델의 경계가 바로 여기서 나타난다. CloudWatch Agent는 그 경계 안쪽, 즉 게스트 OS 내부에서 실행되면서 메트릭과 로그를 CloudWatch로 내보내는 소프트웨어다.
AWS EC2는 Nitro 하이퍼바이저 위에서 동작한다. Nitro는 CPU 사이클, 네트워크 패킷, 블록 I/O 같은 하드웨어 레벨 지표는 볼 수 있다. 하지만 게스트 OS가 메모리를 어떻게 쓰고 있는지, 파일시스템 마운트 포인트별로 디스크가 얼마나 찼는지, 어떤 프로세스가 CPU를 얼마나 쓰는지는 게스트 OS 커널만이 알고 있다.
이것이 EC2 기본 메트릭에 mem_used_percent가 없는 이유다. 이 제약은 EC2만의 것이 아니다. GCP Compute Engine도 동일하게 게스트 OS 내부 메트릭은 Ops Agent(구 Stackdriver Agent)를 설치해야 한다. Azure VM도 Azure Monitor Agent가 필요하다.