Print
카테고리: [ Amazon Web Services ]
조회수: 13735

Container Insights CloudWatch Agent 설치 

Amazon EKS 클러스터에서 지표를 수집할 수 있도록 CloudWatch 에이전트를 설치한다. 

 

1) CloudWatch을 위한 namespace 생성

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
namespace/amazon-cloudwatch created

$ k get ns 
NAME                              STATUS             AGE
amazon-cloudwatch       Active                72s

2) 클러스터 내 서비스 어카운트 생성 

docker-compose로 minio 서버를 띄우고 지정한 포트로 접속한다. 

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
serviceaccount/cloudwatch-agent created
clusterrole.rbac.authorization.k8s.io/cloudwatch-agent-role created
clusterrolebinding.rbac.authorization.k8s.io/cloudwatch-agent-role-binding created

$ k get serviceaccount -n amazon-cloudwatch 
NAME                          SECRETS             AGE
cloudwatch-agent       1                          51s
default                         1                          4m

 

3) CloudWatch Agent를 위한 ConfigMap 생성 

3-1) 다음 명령을 실행하여 ConfigMap YAML을 kubectl client host에 다운로드한다.

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap.yaml
% Total         % Received % Xferd  Average  Speed   Time   Time   Time   Current 
                                                        Dload     Upload  Total   Spent  Left    Speed
100     521     100      521     0     0     1371          0     --:--    --:--    --:--      1371
 

3-2) 다운 받은 YAML 파일의 {{cluster_name}} 부분을 사용 중인 클러스터 이름으로 변경한다.

Amazon EKS를 사용하고 있다면, CloudWatch agent가 EC2 태그를 통해 클러스터 이름을 찾아낼 것이므로, cluster_name을 삭제해도 된다. 

apiVersion: v1
data:
  cwagentconfig.json: |
      {
        "logs": {
          "metrics_collected": {
             "kubernetes": {
                "cluster_name": "{{cluster_name}}",
                "metrics_collection_interval": 60
              }
          },
          "force_flush_interval": 5
       }
    }
kind: ConfigMap
metadata:
     name: cwagentconfig
     namespace: amazon-cloudwatch 
 
3-3) ConfigMap 생성 
$ kubectl apply -f cwagent-configmap.yaml
configmap/cwagentconfig created 

 

4) CloudWatch Agent를 DaemonSet으로 배포 

4-1) 클러스터에서 StatsD를 사용하지 않는 경우 

$ kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
daemonset.apps/cloudwatch-agent created 

4-2) StatsD를 사용하는 경우 

$ curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
ports:
   - containerPort: 8125
      hostPort: 8125
      protocol: UDP

$ kubectl apply -f cwagent-daemonset.yaml 

4-3) Agent가 정상적으로 배포되었는지 확인 

$ kubectl get pods -n amazon-cloudwatch 
NAME   READY      STATUS      RESTARTS          AGE
cloudwatch-agent-dhmx2     0/1      Pending   0  41s
cloudwatch-agent-l7qxf        1/1       Running   0  41s
cloudwatch-agent-r7tj6        0/1       Pending   0  41s
cloudwatch-agent-shqc9      1/1       Running   0  41s
Agent 설치가 완료되면 CloudWatch agent는 /aws/containerinsights/Cluster_Name/performance라는 로그 그룹을 생성하고 성능 로그 이벤트를 해당 로그그룹으로 보낸다. 
 
여기까지 CloudWatch Agent를 Amazon EKS 클러스터 내에 설치하는 과정이며, 이어서는 Container Insights 대시보드와 로그그룹을 통해 수집된 로그를 확인 해볼 것이다.