본문 바로가기

Mornitoring/Grafana

Grafana Mornitoring - 4. ECS Cluster & Container

Cluster의 지표는 EC2에서 NodeExporter를 통해 Metric을 수집하는 방법과 동일합니다.

 

Container의 각 지표를 수집하는 방법은 생각 외로 매우 간단합니다.

CAdvisor를 그냥 서비스로 하나 띄워주기만 하면 되기 때문입니다.

 

먼저 아래 명령어를 수행해서 직접 CAdvisor를 띄워서 테스트해보도록 하겠습니다.

docker run   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:ro   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   --volume=/dev/disk/:/dev/disk:ro   --publish=8080:8080   --detach=true   --name=cadvisor   google/cadvisor:latest

 

이후 서버IP에 맞춰서 Prometheus Config를 아래와 같이 추가시켜 주시고, Reload 해주세요

  - job_name: 'ecs cluster'
    scrape_interval: 10s
    static_configs:
      - targets: ['ClusterIP:9100']
  - job_name: 'cadvisor'
    scrape_interval: 10s
    static_configs:
      - targets: ['ClusterIP:8080']

 

curl -s -XPOST localhost:9090/-/reload

 

Promehteus에서 정상적으로 지표를 수집하는 것을 볼 수 있습니다.

 

 

이제 Grafana에서 대시보드를 3125로 로드해서 확인해보도록 하겠습니다.

 

 

자 그러면 아래와 같이 클러스터 및 컨테이너에 대한 모니터링이 잘 되는 것을 볼 수 있습니다.

 

 

여기서 추가적으로 서비스를 더 띄우더라도,

해당 Cluster 서비스에 대한 지표를 8080 Port로 CAdvisor가 수집하기 때문에 알아서 적용되는 부분들도 확인하실 수 있습니다.

 

CAdvisor 컨테이너가 혹시 죽게되어 셀프힐링이 필요할 수 있습니다.

따라서 이를 서비스로 만들어서 띄워주는 것이 좋은 방법입니다.

 

다음과 같이 CAdvisor의 Task Defenition 부터 정의하도록 하겠습니다.

동적포트로 하면 Prometheus에서 수집할 수 없기 때문에 반드시 포트를 고정시켜주셔야 합니다.

먼저 볼륨을 추가해 줍니다.

 

이후 아래와 같이 컨테이너를 설정해줍니다.

 

 

 

이제, 서비스를 만들어주도록 하겠습니다.

 

 

로드벨런싱으로 서비스를 노출할 필요가 없으므로 아래와 같이 세팅해주시면 됩니다.

 

 

프로메테우스와 그라파나에서도 아래와 같이 정상적으로 수집되는 것을 볼 수 있습니다.

 

 

 

이렇게 되면 문제가 발생하여 CAdvisor가 잠시 죽더라도,

ECS에서 서비스를 다시 살리기 때문에 메트릭 수집에 대한 손실을 최소화 할 수 있습니다.

여기까지 AWS EC2 서버에 대한 모니터링 지표 수집방법을 알아봤습니다.