

# Amazon EKS 및 Kubernetes에서 Container Insights 설정
<a name="deploy-container-insights-EKS"></a>

Container Insights는 Amazon EKS 버전 1.23 이상에서 지원됩니다. 빠른 시작 설치 방법은 버전 1.24 이상에서만 지원됩니다.

Amazon EKS 또는 Kubernetes에서 Container Insights를 설정하는 전반적인 프로세스는 다음과 같습니다.

1. 필요한 사전 조건을 갖추었는지 확인합니다.

1. 클러스터의 Amazon CloudWatch Observability EKS 추가 기능, CloudWatch 에이전트 또는 AWS Distro for OpenTelemetry를 설정하여 CloudWatch에 지표를 전송합니다.
**참고**  
Amazon EKS의 향상된 관찰 기능과 함께 Container Insights를 사용하려면 Amazon CloudWatch Observability EKS 애드온 또는 CloudWatch 에이전트를 사용해야 합니다. 이 버전의 Container Insights에 대한 자세한 정보는 [Amazon EKS의 향상된 관찰성을 갖춘 Container Insights](container-insights-detailed-metrics.md) 섹션을 참조하세요.  
Fargate에서 Container Insights를 사용하려면 AWS Distro for OpenTelemetry를 사용해야 합니다. Amazon EKS의 향상된 관찰 기능 포함된 Container Insights는 Fargate에서 지원되지 않습니다.
**참고**  
Container Insights는 이제 Amazon EKS 클러스터의 Windows 워커 노드를 지원합니다. Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights는 Windows에서도 지원됩니다. Windows의 Container Insights 활성화에 대한 자세한 정보는 [Container Insights와 함께 CloudWatch 에이전트를 사용하고 관찰 기능 활성화](Container-Insights-EKS-agent.md) 섹션을 참조하세요.

   OpenTelemetry 지표가 포함된 Container Insights를 사용하려면 Amazon CloudWatch Observability EKS 추가 기능 `v6.0.1-eksbuild.1` 이상 버전을 설치합니다. 자세한 내용은 [Amazon EKS의 OpenTelemetry 지표가 포함된 Container Insights](container-insights-otel-metrics.md) 섹션을 참조하세요.

   CloudWatch Logs에 로그를 전송하도록 Fluent Bit 또는 Fluentd를 설정합니다. (Amazon CloudWatch Observability EKS 애드온을 설치하면 기본적으로 활성화됩니다.)

   이러한 단계를 빠른 시작 설정의 일부로 동시에 수행하거나(CloudWatch 에이전트를 사용하는 경우), 별도로 수행할 수 있습니다.

1. (선택 사항) Amazon EKS 제어 영역 로깅을 설정합니다.

1. (선택 사항) CloudWatch 에이전트를 클러스터의 StatsD 엔드포인트로 설정하여 CloudWatch에 StatsD 지표를 전송합니다.

1. (선택 사항) App Mesh Envoy 액세스 로그를 사용 설정합니다.

Container Insights의 원래 버전에서는 수집된 지표와 로그가 사용자 지정 지표로 청구됩니다. Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights를 사용하면 Container Insights 지표 및 로그는 저장된 지표나 수집된 로그별로 요금이 부과되는 대신 관찰당 요금이 부과됩니다. CloudWatch 요금에 대한 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.

**Topics**
+ [

# CloudWatch에서 Container Insights에 대한 사전 요구 사항 확인
](Container-Insights-prerequisites.md)
+ [

# Container Insights와 함께 CloudWatch 에이전트를 사용하고 관찰 기능 활성화
](Container-Insights-EKS-agent.md)
+ [

# AWS Distro for OpenTelemetry 사용
](Container-Insights-EKS-otel.md)
+ [

# CloudWatch Logs에 로그 전송
](Container-Insights-EKS-logs.md)
+ [

# Amazon EKS 및 Kubernetes에서 Container Insights 업데이트 또는 삭제
](ContainerInsights-update-delete.md)

# CloudWatch에서 Container Insights에 대한 사전 요구 사항 확인
<a name="Container-Insights-prerequisites"></a>

Amazon EKS 또는 Kubernetes에서 Container Insights를 설치하기 전에 다음을 확인합니다. 이러한 사전 조건은 Amazon EKS 클러스터에서 Container Insights를 설정하는 데 CloudWatch 에이전트를 사용하든 AWS Distro for OpenTelemetry를 사용하든 상관없이 적용됩니다.
+ Amazon EKS 및 Kubernetes의 Container Insights를 지원하는 리전 중 하나에 노드가 연결되어 작동하는 Amazon EKS 또는 Kubernetes 클러스터가 있습니다. 지원되는 리전 목록은 [Container Insights](ContainerInsights.md) 단원을 참조하세요.
+ `kubectl`을 설치하여 실행하고 있습니다. 자세한 내용은 *Amazon EKS 사용 설명서*의 [`kubectl` 설치](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html) 단원을 참조하세요.
+ Amazon EKS를 사용하는 대신 AWS에서 실행되는 Kubernetes를 사용하는 경우 다음 사전 조건도 충족해야 합니다.
  + Kubernetes 클러스터가 역할 기반 액세스 제어(RBAC)를 지원하는지 확인합니다. 자세한 내용은 Kubernetes 참조 문서의 [RBAC 승인 사용](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)을 참조하세요.
  + 여러분의 Kubelet에서는 Webhook 인증 모드를 지원해왔습니다. 자세한 내용은 Kubernetes 참조 문서의 [Kubelet 인증/권한 부여](https://kubernetes.io/docs/reference/access-authn-authz/kubelet-authn-authz/)를 참조하세요.

또한 Amazon EKS 작업자 노드가 지표 및 로그를 CloudWatch에 전송할 수 있도록 IAM 권한을 부여해야 합니다. 이렇게 하는 방법은 두 가지입니다.
+ 작업자 노드의 IAM 역할에 정책을 연결합니다. 이는 Amazon EKS 클러스터와 다른 Kubernetes 클러스터 모두에 적용됩니다.
+ 클러스터 서비스 계정의 IAM 역할을 사용하고 이 역할에 정책을 연결합니다. 이는 Amazon EKS 클러스터에만 적용됩니다.

첫 번째 옵션은 전체 노드의 CloudWatch에 권한을 부여하며, 서비스 계정의 IAM 역할을 사용하면 CloudWatch에 적절한 DaemonSet 포드에 대한 액세스 권한만 부여됩니다.

**작업자 노드의 IAM 역할에 정책 연결**

다음 단계에 따라 작업자 노드의 IAM 역할에 정책을 연결합니다. 이는 Amazon EKS 클러스터와 Amazon EKS 외부의 Kubernetes 클러스터 모두에 적용됩니다.

**작업자 노드의 IAM 역할에 필요한 정책을 연결하려면**

1. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)에서 Amazon EC2 콘솔을 엽니다.

1. 작업자 노드 인스턴스 중 하나를 선택하고 설명에서 IAM 역할을 선택합니다.

1. IAM 역할 페이지에서 [**정책 연결(Attach policies)**]을 선택합니다.

1. 정책 목록에서 **CloudWatchAgentServerPolicy** 옆의 확인란을 선택합니다. 필요한 경우 검색 상자를 사용하여 이 정책을 찾습니다.

1. **정책 연결**을 선택합니다.

Amazon EKS 외부에서 Kubernetes 클러스터를 실행하는 경우 작업자 노드에 연결된 IAM 역할이 아직 없을 수 있습니다. 이렇게 없는 경우에는 먼저, IAM 역할을 인스턴스에 연결한 다음, 이전 단계에서 설명한 대로 정책을 추가해야 합니다. 인스턴스에 역할을 연결하는 방법에 대한 자세한 내용은 **Amazon EC2 사용 설명서의 [인스턴스에 IAM 역할 연결](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/iam-roles-for-amazon-ec2.html#attach-iam-role) 섹션을 참조하세요.

Amazon EKS 외부에서 Kubernetes 클러스터를 실행 중인데 지표에서 EBS 볼륨 ID를 수집하려는 경우 인스턴스에 연결된 IAM 역할에 다른 정책을 추가해야 합니다. 다음 내용을 인라인 정책으로 추가합니다. 자세한 내용은 **‘IAM 사용 설명서’의 [IAM 자격 증명 권한 추가 및 제거](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) 단원을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ec2:DescribeVolumes"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

**IAM 서비스 계정 역할 사용**

이 방법은 Amazon EKS 클러스터에서만 작동합니다.

**IAM 서비스 계정 역할을 사용하여 CloudWatch에 권한을 부여하려면**

1. 아직 설정하지 않았다면 클러스터에서 서비스 계정의 IAM 역할을 사용 설정합니다. 자세한 내용은 [클러스터의 서비스 계정에 대한 IAM 역할 활성화](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)를 참조하세요.

1. 아직 구성하지 않은 경우 IAM 역할을 사용하도록 서비스 계정을 구성합니다. 자세한 내용을 알아보려면 [IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html)을 참조하세요.

   역할을 생성할 경우 역할에 대해 생성한 정책 외에도 **CloudWatchAgentServerPolicy** IAM 정책을 역할에 연결합니다. 또한 이 역할에 연결된 Kubernetes 서비스 계정은 CloudWatch 및 Fluent Bit daemonsets가 다음 단계에서 배포될 `amazon-cloudwatch` 네임스페이스에 생성되어야 합니다

1. 아직 연결하지 않았다면 IAM 역할을 클러스터의 서비스 계정과 연결합니다. 자세한 내용을 알아보려면 [IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html)을 참조하세요.

# Container Insights와 함께 CloudWatch 에이전트를 사용하고 관찰 기능 활성화
<a name="Container-Insights-EKS-agent"></a>

CloudWatch 에이전트를 사용하여 Amazon EKS 클러스터 또는 Kubernetes 클러스터에 Container Insights를 설정하려면 다음 섹션 중 하나의 지침을 따르세요. 빠른 시작 지침은 Amazon EKS 버전 1.24 이상에서만 지원됩니다.

**참고**  
다음 섹션 중 하나의 지침에 따라 Container Insights를 설치할 수 있습니다. 세 가지 지침을 모두 따를 필요는 없습니다.

**Topics**
+ [

# Amazon CloudWatch Observability EKS 추가 기능 빠른 시작
](Container-Insights-setup-EKS-addon.md)
+ [

# Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정
](Container-Insights-setup-EKS-quickstart.md)
+ [

# 클러스터 지표를 수집하도록 CloudWatch 에이전트 설정
](Container-Insights-setup-metrics.md)

# Amazon CloudWatch Observability EKS 추가 기능 빠른 시작
<a name="Container-Insights-setup-EKS-addon"></a>

Amazon EKS 추가 기능을 사용하여 Amazon EKS의 관찰 기능이 향상된 Container Insights를 설치할 수 있습니다. 추가 기능은 CloudWatch 에이전트를 설치하여 클러스터에서 인프라 지표를 전송하고, Fluent Bit를 설치하여 컨테이너 로그를 전송하고, CloudWatch [Application Signals](CloudWatch-Application-Monitoring-Sections.md)를 활성화하여 애플리케이션 성능 텔레메트리를 전송합니다.

Amazon EKS 추가 기능 버전 1.5.0 이상을 사용하는 경우 클러스터의 Linux 및 Windows 워커 노드 모두에서 Container Insights가 활성화됩니다. Windows에서는 Amazon EKS에서 Application Signals가 지원되지 않습니다.

Amazon EKS 추가 기능은 Amazon EKS 대신 Kubernetes를 실행하는 클러스터에서는 지원되지 않습니다.

Amazon CloudWatch Observability EKS 추가 기능에 대한 자세한 내용은 [Amazon CloudWatch Observability EKS 추가 기능 또는 헬름 차트를 사용하여 CloudWatch 에이전트 설치](install-CloudWatch-Observability-EKS-addon.md) 섹션을 참조하세요.

추가 기능의 버전 3.1.0 이상을 사용하는 경우 EKS Pod Identity를 사용하여 추가 기능에 필요한 권한을 부여할 수 있습니다. EKS Pod Identity는 권장 옵션이며 최소 권한, 자격 증명 교체 및 감사 가능성과 같은 이점을 제공합니다. 또한 EKS Pod Identity를 사용하면 클러스터 생성 중에 EKS 추가 기능을 설치할 수 있습니다.

**Amazon CloudWatch Observability EKS 추가 기능 설치**

1. [EKS Pod Identity 연결](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create/) 단계에 따라 IAM 역할을 생성하고 EKS Pod Identity 에이전트를 설정하세요.

1. 역할에 필요한 권한을 부여하는 IAM 정책을 연결하세요. *my-role*을 이전 단계의 IAM 역할 이름으로 바꾸세요.

   ```
   aws iam attach-role-policy \
    --role-name my-role \
   --policy-arn=arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
   ```

1. 이전 단계에서 생성한 IAM 역할을 함께 사용하여 다음 명령을 입력하세요.

   ```
   aws eks create-addon \
   --addon-name amazon-cloudwatch-observability \
   --cluster-name my-cluster-name \
   --pod-identity-associations serviceAccount=cloudwatch-agent,roleArn=arn:aws:iam::111122223333:role/my-role
   ```

# Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정
<a name="Container-Insights-setup-EKS-quickstart"></a>

**중요**  
Amazon EKS 클러스터에 Container Insights를 설치하는 경우 이 섹션의 지침을 따르는 대신 Amazon CloudWatch Observability EKS 추가 기능을 사용하여 설치하는 것이 좋습니다. 또한 가속화된 컴퓨팅 네트워크를 검색하려면 Amazon CloudWatch Observability EKS 추가 기능을 사용해야 합니다. 자세한 정보와 지침은 [Amazon CloudWatch Observability EKS 추가 기능 빠른 시작](Container-Insights-setup-EKS-addon.md) 섹션을 참조하십시오.

Container Insights 설정을 완료하려면 이 단원의 빠른 시작 지침을 따르세요. Amazon EKS 클러스터에 설치하고 2023년 11월 6일 또는 그 이후에 이 섹션의 지침을 사용하는 경우 Amazon EKS의 관찰 기능이 향상된 Container Insights를 클러스터에 설치합니다.

**중요**  
이 단원의 단계를 완료하기 전에 먼저, IAM 권한을 포함한 사전 조건을 확인해야 합니다. 자세한 내용은 [CloudWatch에서 Container Insights에 대한 사전 요구 사항 확인](Container-Insights-prerequisites.md) 섹션을 참조하세요.

또는 [클러스터 지표를 수집하도록 CloudWatch 에이전트 설정](Container-Insights-setup-metrics.md) 및 [CloudWatch Logs에 로그 전송](Container-Insights-EKS-logs.md) 단원의 지침을 따를 수 있습니다. 이러한 단원에서는 CloudWatch 에이전트가 Amazon EKS 및 Kubernetes와 작동하는 방식에 대한 추가 구성 세부 정보를 제공하지만, 추가 설치 단계를 수행해야 합니다.

Container Insights의 원래 버전에서는 수집된 지표와 로그가 사용자 지정 지표로 청구됩니다. Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights를 사용하면 Container Insights 지표 및 로그는 저장된 지표나 수집된 로그별로 요금이 부과되는 대신 관찰당 요금이 부과됩니다. CloudWatch 요금에 대한 자세한 내용은 [Amazon CloudWatch 요금](https://aws.amazon.com/cloudwatch/pricing/)을 참조하세요.

**참고**  
Amazon은 이제 Container Insights의 기본 로그 솔루션으로 상당한 성능 향상을 제공하는 Fluent Bit를 출시했습니다. 따라서 Fluentd 대신 Fluent Bit를 사용하는 것이 좋습니다.

## CloudWatch 에이전트 운영자 및 Fluent Bit를 사용한 빠른 시작
<a name="Container-Insights-setup-EKS-quickstart-FluentBit"></a>

Fluent Bit에는 두 가지 구성, 즉 최적화된 버전 및 Fluentd와 더 유사한 환경을 제공하는 버전이 있습니다. 빠른 시작 구성은 최적화된 버전을 사용합니다. Fluentd 호환 구성에 대한 자세한 내용은 [Fluent Bit를 DaemonSet로 설정하여 CloudWatch Logs에 로그 전송](Container-Insights-setup-logs-FluentBit.md) 섹션을 참조하세요.

CloudWatch 에이전트 운영자는 Amazon EKS 클러스터에 설치되는 추가 컨테이너입니다. OpenTelemetry Operator for Kubernetes를 따라 모델링됩니다. 운영자는 클러스터에서 Kubernetes 리소스의 수명 주기를 관리합니다. Amazon EKS 클러스터에 CloudWatch 에이전트, DCGM Exporter(NVIDIA), AWS Neuron Monitor를 설치하고 관리합니다. Fluent Bit와 Windows용 CloudWatch 에이전트는 운영자가 관리하지 않아도 Amazon EKS 클러스터에 직접 설치됩니다.

보다 안전하고 기능이 풍부한 인증 기관 솔루션을 위해 CloudWatch 에이전트 운영자는 cert-manager를 요구하는데, 이는 Kubernetes에서의 TLS 인증서 관리를 위해 널리 채택되고 있는 솔루션입니다. cert-manager를 사용하면 이러한 인증서를 획득, 갱신, 관리 및 사용하는 프로세스가 간소화됩니다. 인증서가 유효하고 최신 상태인지 확인하고 만료되기 전에 구성된 시간에 인증서 갱신을 시도합니다. cert-manager는 또한 AWS Certificate Manager Private Certificate Authority를 포함하여 지원되는 다양한 소스에서 인증서 발급을 용이하게 합니다.

**빠른 시작을 사용하여 Container Insights 배포**

1. 클러스터에 아직 설치되지 않은 경우 cert-manager를 설치합니다. 자세한 내용은 [cert-manager Installation](https://cert-manager.io/docs/installation/)을 참조하세요.

1. 다음 명령을 입력하여 사용자 지정 리소스 정의(CRD)를 설치합니다.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl apply --server-side -f -
   ```

1. 다음 명령을 입력하여 운영자를 설치합니다. *my-cluster-name*을 Amazon EKS 또는 Kubernetes 클러스터의 이름으로 바꾸고, *my-cluster-region*을 로그가 게시되는 리전의 이름으로 바꿉니다. AWS 아웃바운드 데이터 전송 비용을 줄이기 위해 클러스터가 배포되는 리전과 동일한 리전을 사용하는 것이 좋습니다.

   ```
   ClusterName=my-cluster-name
   RegionName=my-cluster-region
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -
   ```

   예를 들어 `MyCluster`라는 클러스터에서 Container Insights를 배포하고 로그 및 지표를 미국 서부(오리건)에 게시하려면 다음 명령을 입력합니다.

   ```
   ClusterName='MyCluster'
   RegionName='us-west-2'
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -
   ```

**Container Insights에서 마이그레이션**

Amazon EKS 클러스터에 Container Insights가 이미 구성되어 있고 Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights로 마이그레이션하려는 경우 [CloudWatch에서 Amazon EKS에 대한 향상된 관찰성을 갖춘 Container Insights로 업그레이드](Container-Insights-upgrade-enhanced.md) 섹션을 참조하세요.

**Container Insights 삭제**

빠른 시작 설정을 사용한 후 Container Insights를 제거하려면 다음 명령을 입력합니다.

```
ClusterName=my-cluster-name 
RegionName=my-cluster-region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl delete -f -
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl delete -f -
```

# 클러스터 지표를 수집하도록 CloudWatch 에이전트 설정
<a name="Container-Insights-setup-metrics"></a>

**중요**  
Amazon EKS 클러스터에 Container Insights를 설치하는 경우 이 섹션의 지침을 따르는 대신 Amazon CloudWatch Observability EKS 추가 기능을 사용하여 설치하는 것이 좋습니다. 자세한 정보와 지침은 [Amazon CloudWatch Observability EKS 추가 기능 빠른 시작](Container-Insights-setup-EKS-addon.md) 섹션을 참조하십시오.

Container Insights를 설정하여 지표를 수집하려면 [Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정](Container-Insights-setup-EKS-quickstart.md)의 절차를 따르거나 이 단원의 절차를 따르면 됩니다. 다음 단계에서는 클러스터에서 지표를 수집할 수 있도록 CloudWatch 에이전트를 설정합니다.

Amazon EKS 클러스터에 설치하고 2023년 11월 6일 또는 그 이후에 이 섹션의 지침을 사용하는 경우 Amazon EKS의 관찰 기능이 향상된 Container Insights를 클러스터에 설치합니다.

## 1단계: CloudWatch의 네임스페이스 생성
<a name="create-namespace-metrics"></a>

다음 단계를 통해 CloudWatch에 대해 `amazon-cloudwatch`라는 Kubernetes 네임스페이스를 생성합니다. 이 네임스페이스를 이미 생성했다면 이 단계를 건너뛸 수 있습니다.

**CloudWatch의 네임스페이스를 생성하려면**
+ 다음 명령을 입력합니다.

  ```
  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
  ```

## 2단계: 클러스터에서 서비스 계정 생성
<a name="create-service-account"></a>

아직 서비스 계정이 없다면 다음 방법 중 하나를 사용하여 CloudWatch 에이전트의 서비스 계정을 생성합니다.
+ `kubectl` 사용
+ `kubeconfig` 파일 사용

### 인증에 `kubectl` 사용
<a name="use-kubectl"></a>

**`kubectl`을 사용하여 CloudWatch 에이전트의 서비스 계정을 생성하려면**
+ 다음 명령을 입력합니다.

  ```
  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
  ```

이전 단계를 따르지 않았지만 사용하려는 CloudWatch 에이전트에 대한 서비스 계정이 이미 있는 경우에는 다음 규칙이 있는지 확인해야 합니다. 뿐만 아니라 Container Insights 설치를 위한 나머지 단계에서 `cloudwatch-agent` 대신 이 서비스 계정의 이름을 사용해야 합니다.

```
rules:
  - apiGroups: [""]
    resources: ["pods", "nodes", "endpoints"]
    verbs: ["list", "watch"]
  - apiGroups: [ "" ]
    resources: [ "services" ]
    verbs: [ "list", "watch" ]
  - apiGroups: ["apps"]
    resources: ["replicasets", "daemonsets", "deployments", "statefulsets"]
    verbs: ["list", "watch"]
  - apiGroups: ["batch"]
    resources: ["jobs"]
    verbs: ["list", "watch"]
  - apiGroups: [""]
    resources: ["nodes/proxy"]
    verbs: ["get"]
  - apiGroups: [""]
    resources: ["nodes/stats", "configmaps", "events"]
    verbs: ["create", "get"]
  - apiGroups: [""]
    resources: ["configmaps"]
    resourceNames: ["cwagent-clusterleader"]
    verbs: ["get","update"]
  - nonResourceURLs: ["/metrics"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [ "discovery.k8s.io" ]
    resources: [ "endpointslices" ]
    verbs: [ "list", "watch", "get" ]
```

### 인증에 `kubeconfig` 사용
<a name="use-kubeconfig"></a>

또는 `kubeconfig` 파일을 인증에 사용할 수 있습니다. 이 방법을 사용하면 CloudWatch 에이전트 구성에서 `kubeconfig` 경로를 직접 지정하여 서비스 계정에 대한 필요성을 우회할 수 있습니다. 또한 인증을 위한 Kubernetes 컨트롤 플레인 API에 대한 종속성을 제거하여 설정을 간소화하고 kubeconfig 파일을 통해 인증을 관리함으로써 보안을 강화할 수 있습니다.

이 방법을 사용하려면 다음 예와 같이 CloudWatch 에이전트 구성 파일을 업데이트하여 `kubeconfig` 파일 경로를 지정합니다.

```
{
  "logs": {
    "metrics_collected": {
      "kubernetes": {
        "cluster_name": "YOUR_CLUSTER_NAME",
        "enhanced_container_insights": false,
        "accelerated_compute_metrics": false,
        "tag_service": false,
        "kube_config_path": "/path/to/your/kubeconfig" 
        "host_ip": "HOSTIP"
      }
    }
  }
}
```

`kubeconfig` 파일을 생성하려면 `system:masters` Kubernetes 역할을 가진 `admin/{create_your_own_user}` 사용자에 대한 인증서 서명 요청(CSR)을 생성합니다. 그런 다음 Kubernetes 클러스터의 인증 기관(CA)에 서명하고 `kubeconfig` 파일을 생성합니다.

## 3단계: CloudWatch 에이전트에 대한 ConfigMap 생성
<a name="create-configmap"></a>

다음 단계를 통해 CloudWatch 에이전트에 대한 ConfigMap을 생성합니다.

**CloudWatch 에이전트에 대한 ConfigMap을 생성하려면**

1. 다음 명령을 실행하여 `kubectl` 클라이언트 호스트로 ConfigMap YAML을 다운로드합니다.

   ```
   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-configmap-enhanced.yaml
   ```

1. 다운로드한 YAML 파일을 다음과 같이 편집합니다.
   + **cluster\$1name** – `kubernetes` 섹션에서 `{{cluster_name}}`을 클러스터 이름으로 바꿉니다. `{{}}` 문자를 제거합니다. 또는 Amazon EKS 클러스터를 사용하는 경우 `"cluster_name"` 필드 및 값을 삭제할 수 있습니다. 그렇게 하면 CloudWatch 에이전트가 Amazon EC2 태그에서 클러스터 이름을 감지합니다.

1. (선택 사항) 다음과 같이 모니터링 요구사항에 따라 ConfigMap을 추가로 변경합니다.
   + **metrics\$1collection\$1interval** – `kubernetes` 섹션에서 에이전트가 지표를 수집하는 빈도를 지정할 수 있습니다. 기본값은 60초입니다. Kubelet의 기본 cadvisor 수집 간격은 15초이기 때문에 이 값을 15초 미만으로 설정해서는 안 됩니다.
   + **endpoint\$1override** – `logs` 섹션에서 기본 엔드포인트를 재정의하려는 경우 CloudWatch Logs 엔드포인트를 지정할 수 있습니다. VPC의 클러스터에서 게시 중인 데이터를 VPC 종단점으로 이동시키고 싶은 경우에 재정의를 원할 수 있습니다.
   + **force\$1flush\$1interval** – `logs` 섹션에서 로그 이벤트를 CloudWatch Logs에 게시하기 전에 배치 처리하는 간격을 지정할 수 있습니다. 기본값은 5초입니다.
   + **region** – 기본적으로 에이전트는 작업자 노드가 있는 리전에 지표를 게시합니다. 이를 재정의하기 위해 `"region":"us-west-2"`처럼 `agent` 섹션에서 `region` 필드를 추가할 수 있습니다.
   + **statsd** 섹션 - CloudWatch Logs 에이전트가 클러스터의 각 작업자 노드에서 StatsD 리스너로도 실행되도록 하려는 경우 다음 예와 같이 `statsd` 섹션을 `metrics` 섹션에 추가할 수 있습니다. 이 섹션의 다른 StatsD 옵션에 대한 자세한 내용은 [StatsD를 사용하여 사용자 지정 지표 검색](CloudWatch-Agent-custom-metrics-statsd.md) 단원을 참조하세요.

     ```
     "metrics": {
       "metrics_collected": {
         "statsd": {
           "service_address":":8125"
         }
       }
     }
     ```

     JSON 섹션에 대한 전체 예는 다음과 같습니다. 인증에 `kubeconfig` 파일을 사용하는 경우, `kube_config_path` 파라미터를 추가하여 kubeconfig 파일의 경로를 지정합니다.

     ```
     {
         "agent": {
             "region": "us-east-1"
         },
         "logs": {
             "metrics_collected": {
                 "kubernetes": {
                     "cluster_name": "MyCluster",
                     "metrics_collection_interval": 60,
                     "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication
                 }
             },
             "force_flush_interval": 5,
             "endpoint_override": "logs.us-east-1.amazonaws.com"
         },
         "metrics": {
             "metrics_collected": {
                 "statsd": {
                     "service_address": ":8125"
                 }
             }
         }
     }
     ```

1. 다음 명령을 실행하여 클러스터에서 ConfigMap을 생성합니다.

   ```
   kubectl apply -f cwagent-configmap-enhanced.yaml
   ```

## 4단계: DaemonSet로 CloudWatch 에이전트 배포
<a name="deploy-agent-yaml"></a>

CloudWatch 에이전트의 설치를 완료하고 컨테이너 지표 수집을 시작하려면 다음 단계를 따르세요.

**CloudWatch 에이전트를 DaemonSet로 배포하려면**

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
     ```
   + StatsD를 사용하지 않으려면 다음 절차를 따르세요.

     1. 다음 명령을 실행하여 `kubectl` 클라이언트 호스트에 DaemonSet YAML을 다운로드합니다.

        ```
        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
        ```

     1. 다음과 같이 `cwagent-daemonset.yaml` 파일에서 `port` 섹션의 주석 처리를 해제합니다.

        ```
        ports:
          - containerPort: 8125
            hostPort: 8125
            protocol: UDP
        ```

     1. 다음 명령을 실행하여 클러스터에서 CloudWatch 에이전트를 배포합니다.

        ```
        kubectl apply -f cwagent-daemonset.yaml
        ```

     1. 다음 명령을 실행하여 클러스터의 Windows 노드에서 CloudWatch 에이전트를 배포합니다. StatsD 리스너는 Windows의 CloudWatch 에이전트에서 지원되지 않습니다.

        ```
        kubectl apply -f cwagent-daemonset-windows.yaml
        ```

1. 다음 명령을 실행하여 에이전트가 배포되었는지 확인합니다.

   ```
   kubectl get pods -n amazon-cloudwatch
   ```

완료되면 CloudWatch 에이전트는 `/aws/containerinsights/Cluster_Name/performance`라는 로그 그룹을 생성하고 이 로그 그룹에 성능 로그 이벤트를 전송합니다. 또한 StatsD 리스너로서 에이전트를 설정하는 경우, 에이전트는 애플리케이션 Pod가 예약된 노드의 IP 주소를 통해 포트 8125에서 StatsD 지표를 수신합니다.

### 문제 해결
<a name="ContainerInsights-deploy-troubleshooting"></a>

에이전트에서 배포가 올바르게 되지 않으면 다음을 수행해 보세요.
+ 다음 명령을 실행하여 Pod 목록을 가져옵니다.

  ```
  kubectl get pods -n amazon-cloudwatch
  ```
+ 다음 명령을 실행하고 출력 하단에서 이벤트를 확인합니다.

  ```
  kubectl describe pod pod-name -n amazon-cloudwatch
  ```
+ 다음 명령을 실행하여 로그를 확인합니다.

  ```
  kubectl logs pod-name  -n amazon-cloudwatch
  ```

# AWS Distro for OpenTelemetry 사용
<a name="Container-Insights-EKS-otel"></a>

AWS Distro for OpenTelemetry Collector를 사용하여 Amazon EKS 클러스터에서 지표를 수집하도록 Container Insights를 설정할 수 있습니다. AWS Distro for OpenTelemetry에 대한 자세한 내용은 [AWS Distro for OpenTelemetry](https://aws.amazon.com/otel/)를 참조하세요.

**중요**  
AWS Distro for OpenTelemetry를 사용하여 설치하는 경우 Container Insights는 설치하지만 Amazon EKS의 관찰 기능이 향상된 Container Insights는 얻을 수 없습니다. Amazon EKS의 향상된 관찰 기능을 통해 Container Insights에서 지원되는 세부 지표는 수집할 수 없습니다.

Container Insights를 설정하는 방법은 클러스터가 Amazon EC2 인스턴스 또는 AWS Fargate 중 어디에서 호스팅되는지에 따라 결정됩니다.

## Amazon EC2에서 호스팅되는 Amazon EKS 클러스터
<a name="Container-Insights-EKS-otel-EC2"></a>

사전 조건 충족을 아직 확인하지 않은 경우 필요한 IAM 역할을 포함한 사전 조건을 충족했는지 확인합니다. 자세한 내용은 [CloudWatch에서 Container Insights에 대한 사전 요구 사항 확인](Container-Insights-prerequisites.md) 섹션을 참조하세요.

Amazon은 Amazon EC2에서 Amazon Elastic Kubernetes Service 모니터링을 설정하는 데 사용할 수 있는 Helm 차트를 제공합니다. 이 모니터링은 지표의 경우 AWS Distro for OpenTelemetry(ADOT) Collector를 사용하고 로그의 경우 Fluent Bit를 사용합니다. 따라서 Helm 차트는 Amazon EC2에서 Amazon EKS를 사용하고 CloudWatch Container Insights로 전송하기 위해 지표 및 로그를 수집하려는 고객에게 유용합니다. 이 Helm 차트에 대한 자세한 내용은 [Amazon CloudWatch Container Insights에 대한 EC2 지표 및 로그의 EKS용 ADOT Helm 차트](https://github.com/aws-observability/aws-otel-helm-charts/tree/main/charts/adot-exporter-for-eks-on-ec2)를 참조하세요.

또는 이 섹션에 있는 지침을 사용할 수 있습니다.

먼저, 다음 명령을 입력하여 AWS Distro for OpenTelemetry Collector를 DaemonSet로 배포합니다.

```
curl https://raw.githubusercontent.com/aws-observability/aws-otel-collector/main/deployment-template/eks/otel-container-insights-infra.yaml |
kubectl apply -f -
```

Collector가 실행 중인지 확인하려면 다음 명령을 입력합니다.

```
kubectl get pods -l name=aws-otel-eks-ci -n aws-otel-eks
```

이 명령의 출력에 `Running` 상태의 포드가 여러 개 포함되어 있다면 Collector가 실행 중이며 클러스터에서 지표를 수집 중입니다. Collector는 `aws/containerinsights/cluster-name/performance`라는 로그 그룹을 생성하고 이 그룹에 성능 로그 이벤트를 전송합니다.

CloudWatch에서 Container Insights 지표를 보는 방법에 대한 자세한 내용은 [Container Insights 지표 보기](Container-Insights-view-metrics.md) 단원을 참조하세요.

AWS는 이 시나리오에 대한 GitHub 문서도 제공했습니다. Container Insights에서 게시한 지표 및 로그를 사용자 지정하려면 [https://aws-otel.github.io/docs/getting-started/container-insights/eks-infra](https://aws-otel.github.io/docs/getting-started/container-insights/eks-infra)를 참조하세요.

## Fargate에서 호스팅되는 Amazon EKS 클러스터
<a name="Container-Insights-EKS-otel-Fargate"></a>

Fargate의 Amazon EKS 클러스터에 배포된 워크로드에서 시스템 지표를 수집하여 CloudWatch Container Insights로 전송하도록 ADOT Collector를 구성 및 배포하는 방법에 대한 지침은 AWS Distro for OpenTelemetry 설명서의 [Container Insights EKS Fargate](https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate)를 참조하세요.

# CloudWatch Logs에 로그 전송
<a name="Container-Insights-EKS-logs"></a>

컨테이너에서 Amazon CloudWatch Logs로 로그를 전송하려면 Fluent Bit를 사용하면 됩니다. 자세한 내용은 [Fluent Bit](https://fluentbit.io/)를 참조하세요.

**참고**  
AWS는 2025년 2월 10일에 CloudWatch Logs에 대한 로그 전달자인 FluentD에 대한 지원을 중단했습니다. 간편하고 리소스 효율이 우수한 대안인 Fluent Bit를 사용하는 것이 좋습니다. 기존 FluentD 배포는 계속 작동합니다. 로깅 파이프라인을 Fluent Bit로 마이그레이션하여 지속적인 지원과 최적 성능을 확보하세요.  
Container Insights는 이전에 FluentD를 사용하여 컨테이너에서 로그를 전송하는 것도 지원했습니다. FluentD는 사용 중지되었으며 이제 Container Insights에서 지원되지 않습니다. 그 대신에 Fluent Bit를 사용합니다.

**Topics**
+ [

# Fluent Bit를 DaemonSet로 설정하여 CloudWatch Logs에 로그 전송
](Container-Insights-setup-logs-FluentBit.md)
+ [

# (선택 사항) Amazon EKS 제어 영역 로깅 설정
](Container-Insights-setup-control-plane-logging.md)
+ [

# (선택 사항) 대규모 클러스터에 Use\$1Kubelet 기능 활성화
](ContainerInsights-use-kubelet.md)

# Fluent Bit를 DaemonSet로 설정하여 CloudWatch Logs에 로그 전송
<a name="Container-Insights-setup-logs-FluentBit"></a>

다음 단원을 통해 Fluent Bit를 배포하여 컨테이너에서 CloudWatch Logs로 로그를 전송할 수 있습니다.

**Topics**
+ [

## Fluent Bit 설정
](#Container-Insights-FluentBit-setup)
+ [

## 여러 줄 로그 지원
](#ContainerInsights-fluentbit-multiline)
+ [

## (선택 사항) Fluent Bit의 로그 볼륨 축소
](#ContainerInsights-fluentbit-volume)
+ [

## 문제 해결
](#Container-Insights-FluentBit-troubleshoot)
+ [

## 대시보드
](#Container-Insights-FluentBit-dashboard)

## Fluent Bit 설정
<a name="Container-Insights-FluentBit-setup"></a>

Fluent Bit를 설정하여 컨테이너에서 로그를 수집하려면 [Amazon EKS 및 Kubernetes에서 Container Insights의 빠른 시작 설정](Container-Insights-setup-EKS-quickstart.md)의 절차를 따르거나 이 단원의 절차를 따르면 됩니다.

어느 방법이든 클러스터 노드에 첨부된 IAM 역할에 충분한 권한이 있어야 합니다. Amazon EKS 클러스터를 실행하는 데 필요한 권한에 대한 자세한 내용은 *Amazon EKS 사용 설명서*의 [Amazon EKS IAM 정책, 역할 및 권한](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) 단원을 참조하세요.

다음 단계에서는 Fluent Bit를 daemonSet로 설정하여 CloudWatch Logs에 로그를 전송합니다. 이 단계를 완료하면 Fluent Bit가 다음 로그 그룹을 생성합니다(아직 없는 경우).

**중요**  
Container Insights에 이미 FluentD가 구성되어 있고 FluentD DaemonSet가 예상대로 실행되지 않는 경우(`containerd` 런타임을 사용하는 경우 발생할 수 있음), Fluent Bit를 설치하기 전에 Fluent Bit를 제거해야 Fluent Bit가 FluentD 오류 로그 메시지를 처리하지 않습니다. 그러지 않으면 Fluent Bit를 성공적으로 설치한 후 즉시 FluentD를 제거해야 합니다. Fluent Bit를 설치한 후 Fluentd를 제거해도 이 마이그레이션 과정에서 로깅을 계속 유지할 수 있습니다. CloudWatch Logs로 로그를 전송하는 데 Fluent Bit 또는 FluentD 중 하나만 필요합니다.


| 로그 그룹 이름 | 로그 소스 | 
| --- | --- | 
|  `/aws/containerinsights/Cluster_Name/application`  |  `/var/log/containers`의 모든 로그 파일  | 
|  `/aws/containerinsights/Cluster_Name/host`  |  `/var/log/dmesg`, `/var/log/secure` 및 `/var/log/messages`에서의 로그  | 
|  `/aws/containerinsights/Cluster_Name/dataplane`  |  `kubelet.service`, `kubeproxy.service` 및 `docker.service`에 대한 `/var/log/journal`에서의 로그.  | 

**Fluent Bit를 설치하여 컨테이너에서 CloudWatch Logs로 로그를 전송하려면**

1. `amazon-cloudwatch`라는 네임스페이스가 아직 없는 경우 다음 명령을 입력하여 네임스페이스를 생성합니다.

   ```
   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
   ```

1. 다음 명령을 실행하여 로그를 전송할 클러스터 이름 및 리전이 포함된 `cluster-info`라는 ConfigMap을 생성합니다. *cluster-name* 및 *cluster-region*을 클러스터의 이름 및 리전으로 바꿉니다.

   ```
   ClusterName=cluster-name
   RegionName=cluster-region
   FluentBitHttpPort='2020'
   FluentBitReadFromHead='Off'
   [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
   [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
   kubectl create configmap fluent-bit-cluster-info \
   --from-literal=cluster.name=${ClusterName} \
   --from-literal=http.server=${FluentBitHttpServer} \
   --from-literal=http.port=${FluentBitHttpPort} \
   --from-literal=read.head=${FluentBitReadFromHead} \
   --from-literal=read.tail=${FluentBitReadFromTail} \
   --from-literal=logs.region=${RegionName} -n amazon-cloudwatch
   ```

   이 명령에서 플러그 인 지표 모니터링을 위한 `FluentBitHttpServer`는 기본적으로 활성화되어 있습니다. 명령에서 이를 비활성화하려면 명령의 세 번째 줄을 `FluentBitHttpPort=''`(빈 문자열)로 변경합니다.

   또한 기본적으로 Fluent Bit는 테일에서 로그 파일을 읽으며 배포된 후 새 로그만 캡처합니다. 반대를 원하는 경우 `FluentBitReadFromHead='On'`으로 설정하면 파일 시스템의 모든 로그를 수집합니다.

1. 다음 명령 중 하나를 실행하여 Fluent Bit 데몬 세트를 다운로드한 후 클러스터에 배포합니다.
   + Linux 컴퓨터에 대한 Fluent Bit 최적화 구성을 원하는 경우 이 명령을 실행합니다.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
     ```
   + Windows 컴퓨터에 대한 Fluent Bit 최적화 구성을 원하는 경우 이 명령을 실행합니다.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-windows.yaml
     ```
   + Linux 컴퓨터를 사용 중이고 Fluentd와 더 유사한 Fluent Bit 구성을 원하는 경우 이 명령을 실행합니다.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-compatible.yaml
     ```
**중요**  
Fluent Bit DaemonSet 구성은 기본적으로 로그 수준을 INFO로 설정하므로 CloudWatch Logs 수집 비용이 높아질 수 있습니다. 로그 수집 볼륨과 비용을 줄이려면 로그 수준을 오류로 변경하면 됩니다.  
로그 볼륨을 줄이는 방법에 대한 자세한 내용은 [(선택 사항) Fluent Bit의 로그 볼륨 축소](#ContainerInsights-fluentbit-volume) 섹션을 참조하세요.

1. 다음 명령을 입력하여 배포를 검증합니다. 각 노드에는 **fluent-bit-\$1**라는 포드가 하나 있어야 합니다.

   ```
   kubectl get pods -n amazon-cloudwatch
   ```

위 단계는 클러스터에 다음 리소스를 생성합니다.
+ `amazon-cloudwatch` 네임스페이스의 `Fluent-Bit`이라는 서비스 계정. 이 서비스 계정은 Fluent Bit daemonSet를 실행하는 데 사용됩니다. 자세한 내용은 Kubernetes 참조 문서의 [서비스 계정 관리](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/)를 참조하세요.
+ `amazon-cloudwatch` 네임스페이스의 `Fluent-Bit-role`이라는 클러스터 역할. 이 클러스터 역할은 `Fluent-Bit` 서비스 계정에 대해 Pod 로그에서 `get`, `list` 및 `watch` 권한을 부여합니다. 자세한 내용은 Kubernetes 참조 문서의 [API 개요](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#api-overview/)를 참조하세요.
+ `amazon-cloudwatch` 네임스페이스의 `Fluent-Bit-config`이라는 ConfigMap. 이 ConfigMap에는 Fluent Bit에서 사용할 구성이 포함되어 있습니다. 자세한 내용은 Kubernetes 작업 설명서의 [ConfigMap을 사용하도록 Pod 구성](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/)을 참조하세요.

Fluent Bit 설정을 확인하려면 다음 단계를 따르세요.

**Fluent Bit 설정 확인**

1. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)에서 CloudWatch 콘솔을 엽니다.

1. 탐색 창에서 **로그 그룹**을 선택합니다.

1. Fluent Bit를 배포한 리전에 있는지 확인합니다.

1. 리전의 로그 그룹 목록을 확인합니다. 다음과 같은 모양이어야 합니다.
   + `/aws/containerinsights/Cluster_Name/application`
   + `/aws/containerinsights/Cluster_Name/host`
   + `/aws/containerinsights/Cluster_Name/dataplane`

1. 이러한 로그 그룹 중 하나로 이동하여 로그 스트림의 **마지막 이벤트 시간**을 확인합니다. 해당 시간이 Fluent Bit를 배포한 시점을 기준으로 최근인 경우 설정이 확인됩니다.

   `/dataplane` 로그 그룹을 생성하는 데 약간의 지연이 있을 수 있습니다. 이러한 로그 그룹은 Fluent Bit가 해당 로그 그룹에 대한 로그 전송을 시작할 때만 생성되기 때문에 약간의 지연 현상은 정상입니다.

## 여러 줄 로그 지원
<a name="ContainerInsights-fluentbit-multiline"></a>

여러 줄 로그와 함께 Fluent Bit를 사용하는 방법에 대한 자세한 내용은 Fluent Bit 설명서의 다음 섹션을 참조하세요.
+ [여러 줄 구문 분석](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing)
+ [여러 줄 및 컨테이너(v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-and-containers-v1.8)
+ [여러 줄 코어(v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-core-v1.8)
+ [테일 입력에는 항상 여러 줄 사용](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#always-use-multiline-the-tail-input)

## (선택 사항) Fluent Bit의 로그 볼륨 축소
<a name="ContainerInsights-fluentbit-volume"></a>

기본적으로 CloudWatch에 Fluent Bit 애플리케이션 로그와 Kubernetes 메타데이터가 전송됩니다. CloudWatch에 전송되는 데이터의 볼륨을 줄이려면 이러한 데이터 원본 중 하나 또는 둘 모두가 CloudWatch에 전송되지 못하게 막으면 됩니다. 이 페이지의 단계에 따라 Fluent Bit를 설정했다면, 이전에 실행한 kubectl `apply` 명령에서 Kubernetes 매니페스트 YAML 파일을 다운로드하고 변경 사항으로 수정한 다음 클러스터에 다시 적용할 수 있습니다. 또는 Amazon CloudWatch Observability EKS 추가 기능 또는 차트 Helm을 사용하는 경우, 추가 기능의 고급 구성 또는 차트 Helm을 사용하여 Fluent Bit 구성을 관리하는 방법에 대한 자세한 내용은 [(선택 사항) 추가 구성](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) 섹션을 참조하세요.

Fluent Bit 애플리케이션 로그를 중지하려면 `Fluent Bit configuration` 파일에서 다음 섹션을 제거합니다.

```
[INPUT]
        Name                tail
        Tag                 application.*
        Path                /var/log/containers/fluent-bit*
        Parser              docker
        DB                  /fluent-bit/state/flb_log.db
        Mem_Buf_Limit       5MB
        Skip_Long_Lines     On
        Refresh_Interval    10
```

Kubernetes 메타데이터를 제거하여 CloudWatch로 전송되는 로그 이벤트에 추가되지 못하게 하려면 Fluent Bit 구성의 `application-log.conf` 섹션에 다음 필터를 추가합니다. *<Metadata\$11>* 및 유사한 필드를 실제 메타데이터 식별자로 바꾸세요.

```
application-log.conf: |
    [FILTER]
        Name                nest
        Match               application.*
        Operation           lift
        Nested_under        kubernetes
        Add_prefix          Kube.

    [FILTER]
        Name                modify
        Match               application.*
        Remove              Kube.<Metadata_1>
        Remove              Kube.<Metadata_2>
        Remove              Kube.<Metadata_3>
    
    [FILTER]
        Name                nest
        Match               application.*
        Operation           nest
        Wildcard            Kube.*
        Nested_under        kubernetes
        Remove_prefix       Kube.
```

## 문제 해결
<a name="Container-Insights-FluentBit-troubleshoot"></a>

이러한 로그 그룹이 표시되지 않으며 리전이 올바른지 살펴보고 있는 경우 Fluent Bit daemonSet 포드의 로그를 확인하여 오류를 찾습니다.

다음 명령을 실행하여 상태가 `Running`인지 확인합니다.

```
kubectl get pods -n amazon-cloudwatch
```

로그에 IAM 권한과 관련된 오류가 있다면 클러스터 노드에 연결된 IAM 역할을 확인합니다. Amazon EKS 클러스터를 실행하는 데 필요한 권한에 대한 자세한 내용은 *Amazon EKS 사용 설명서*의 [Amazon EKS IAM 정책, 역할 및 권한](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) 단원을 참조하세요.

Pod 상태가 `CreateContainerConfigError`이면 다음 명령을 실행하여 정확한 오류를 가져옵니다.

```
kubectl describe pod pod_name -n amazon-cloudwatch
```

## 대시보드
<a name="Container-Insights-FluentBit-dashboard"></a>

대시보드를 생성하여 실행 중인 각 플러그 인의 지표를 모니터링할 수 있습니다. 출력 오류 및 재시도/실패 비율 관련 데이터뿐만 아니라 입력 및 출력 바이트 관련 데이터, 레코드 처리 속도 관련 데이터를 확인할 수 있습니다. 이러한 지표를 보려면 Amazon EKS 및 Kubernetes 클러스터용 Prometheus 지표 수집과 함께 CloudWatch 에이전트를 설치해야 합니다. 대시보드 설정 방법에 대한 자세한 내용은 [Amazon EKS 및 Kubernetes 클러스터에 Prometheus 지표 수집과 함께 CloudWatch 에이전트 설치Amazon EKS 및 Kubernetes 클러스터에 Prometheus 지표 수집과 함께 CloudWatch 에이전트 설치](ContainerInsights-Prometheus-Setup.md) 단원을 참조하세요.

**참고**  
이 대시보드를 설정하려면 먼저, Prometheus 지표에 대한 Container Insights를 설정해야 합니다. 자세한 내용은 [Container Insights Prometheus 지표 모니터링](ContainerInsights-Prometheus.md) 섹션을 참조하세요.

**Fluent Bit Prometheus 지표에 대한 대시보드를 생성하려면**

1. 환경 변수를 만들어서 다음 줄의 오른쪽에 있는 값을 배포와 일치하도록 바꿉니다.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   REGION_NAME=your_metric_region_such_as_us-west-1
   CLUSTER_NAME=your_kubernetes_cluster_name
   ```

1. 다음 명령을 실행하여 대시보드를 생성합니다.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/fluent-bit/cw_dashboard_fluent_bit.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --dashboard-body
   ```

# (선택 사항) Amazon EKS 제어 영역 로깅 설정
<a name="Container-Insights-setup-control-plane-logging"></a>

Amazon EKS를 사용하는 경우 선택적으로 Amazon EKS 제어 영역 로깅을 사용 설정하여 Amazon EKS 제어 영역에서 CloudWatch Logs로 직접 감사 및 진단 로그를 제공할 수 있습니다. 자세한 내용은 [Amazon EKS 제어 영역 로깅](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html) 단원을 참조하세요.

# (선택 사항) 대규모 클러스터에 Use\$1Kubelet 기능 활성화
<a name="ContainerInsights-use-kubelet"></a>

기본적으로 Use\$1Kubelet 기능은 FluentBit Kubernetes 플러그 인에서 비활성화되어 있습니다. 이 기능을 활성화하면 API 서버에 대한 트래픽이 줄어들고 API 서버에 병목 현상이 발생하는 문제를 완화할 수 있습니다. 대규모 클러스터에 해당 기능을 활성화하는 것이 좋습니다.

Use\$1Kubelet을 활성화하려면 먼저 노드와 노드 및 프록시 권한을 ClusterRole 구성에 추가합니다.

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluent-bit-role
rules:
  - nonResourceURLs:
      - /metrics
    verbs:
      - get
  - apiGroups: [""]
    resources:
      - namespaces
      - pods
      - pods/logs
      - nodes
      - nodes/proxy
    verbs: ["get", "list", "watch"]
```

DaemonSet 구성에서 이 기능을 사용하려면 호스트 네트워크 액세스 권한이 필요합니다. `amazon/aws-for-fluent-bit`의 이미지 버전이 2.12.0 이상이거나 fluent bit 이미지 버전이 1.7.2 이상이어야 합니다.

```
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: amazon-cloudwatch
  labels:
    k8s-app: fluent-bit
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: fluent-bit
  template:
    metadata:
      labels:
        k8s-app: fluent-bit
        version: v1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: fluent-bit
        image: amazon/aws-for-fluent-bit:2.19.0
        imagePullPolicy: Always
        env:
            - name: AWS_REGION
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: logs.region
            - name: CLUSTER_NAME
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: cluster.name
            - name: HTTP_SERVER
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.server
            - name: HTTP_PORT
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.port
            - name: READ_FROM_HEAD
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.head
            - name: READ_FROM_TAIL
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.tail
            - name: HOST_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name      
            - name: CI_VERSION
              value: "k8s/1.3.8"
        resources:
            limits:
              memory: 200Mi
            requests:
              cpu: 500m
              memory: 100Mi
        volumeMounts:
        # Please don't change below read-only permissions
        - name: fluentbitstate
          mountPath: /var/fluent-bit/state
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: fluent-bit-config
          mountPath: /fluent-bit/etc/
        - name: runlogjournal
          mountPath: /run/log/journal
          readOnly: true
        - name: dmesg
          mountPath: /var/log/dmesg
          readOnly: true
      terminationGracePeriodSeconds: 10
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      volumes:
      - name: fluentbitstate
        hostPath:
          path: /var/fluent-bit/state
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: fluent-bit-config
        configMap:
          name: fluent-bit-config
      - name: runlogjournal
        hostPath:
          path: /run/log/journal
      - name: dmesg
        hostPath:
          path: /var/log/dmesg
      serviceAccountName: fluent-bit
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      - operator: "Exists"
        effect: "NoExecute"
      - operator: "Exists"
        effect: "NoSchedule"
```

쿠버네티스 플러그 인 구성은 다음과 유사합니다.

```
[FILTER]
        Name                kubernetes
        Match               application.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_Tag_Prefix     application.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed
        K8S-Logging.Parser  On
        K8S-Logging.Exclude Off
        Labels              Off
        Annotations         Off
        Use_Kubelet         On
        Kubelet_Port        10250 
        Buffer_Size         0
```

# Amazon EKS 및 Kubernetes에서 Container Insights 업데이트 또는 삭제
<a name="ContainerInsights-update-delete"></a>

이 단원의 절차를 통해 CloudWatch 에이전트 컨테이너 이미지를 업데이트하거나 Amazon EKS 또는 Kubernetes 클러스터에서 Container Insights를 제거할 수 있습니다.

**Topics**
+ [

# CloudWatch에서 Amazon EKS에 대한 향상된 관찰성을 갖춘 Container Insights로 업그레이드
](Container-Insights-upgrade-enhanced.md)
+ [

# CloudWatch 에이전트 컨테이너 이미지 업데이트
](ContainerInsights-update-image.md)
+ [

# Container Insights의 CloudWatch 에이전트 및 Fluent Bit 삭제
](ContainerInsights-delete-agent.md)

# CloudWatch에서 Amazon EKS에 대한 향상된 관찰성을 갖춘 Container Insights로 업그레이드
<a name="Container-Insights-upgrade-enhanced"></a>

**중요**  
Amazon EKS 클러스터에 Container Insights를 업그레이드 또는 설치하는 경우 이 섹션의 지침을 따르는 대신 Amazon CloudWatch Observability EKS 추가 기능을 사용하여 설치하는 것이 좋습니다. 또한 가속화된 컴퓨팅 지표를 검색하려면 Amazon CloudWatch Observability EKS 추가 기능을 사용해야 합니다. 자세한 정보와 지침은 [Amazon CloudWatch Observability EKS 추가 기능 빠른 시작](Container-Insights-setup-EKS-addon.md) 섹션을 참조하십시오.

Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights는 Container Insights의 최신 버전입니다. Amazon EKS를 실행하는 클러스터에서 세부 지표를 수집하고, 애플리케이션 및 인프라 텔레메트리를 자세히 살펴볼 수 있도록 즉시 사용할 수 있는 선별된 대시보드를 제공합니다. 이 버전의 Container Insights에 대한 자세한 정보는 [Amazon EKS의 향상된 관찰성을 갖춘 Container Insights](container-insights-detailed-metrics.md) 섹션을 참조하세요.

Amazon EKS 클러스터에 원래 버전의 Container Insights를 설치한 후 관찰 기능이 향상된 새 버전으로 업그레이드하려면 이 섹션의 지침을 따르세요.

**중요**  
이 섹션의 단계를 완료하기 전에 먼저, cert-manager를 포함한 사전 조건을 확인해야 합니다. 자세한 내용은 [CloudWatch 에이전트 운영자 및 Fluent Bit를 사용한 빠른 시작](Container-Insights-setup-EKS-quickstart.md#Container-Insights-setup-EKS-quickstart-FluentBit) 섹션을 참조하세요.

**Amazon EKS 클러스터를 Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights로 업그레이드**

1. 다음 명령을 입력하여 CloudWatch 에이전트 운영자를 설치합니다. *my-cluster-name*을 Amazon EKS 또는 Kubernetes 클러스터의 이름으로 바꾸고, *my-cluster-region*을 로그가 게시되는 리전의 이름으로 바꿉니다. AWS 아웃바운드 데이터 전송 비용을 줄이기 위해 클러스터가 배포되는 리전과 동일한 리전을 사용하는 것이 좋습니다.

   ```
   ClusterName=my-cluster-name
   RegionName=my-cluster-region
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl apply -f -
   ```

   리소스 충돌로 인해 장애가 발생하는 경우 이는 CloudWatch 에이전트와 Fluent Bit 및 ServiceAccount, ClusterRole, ClusterRoleBinding 등 Fluent Bit 구성 요소가 클러스터에 설치되어 있기 때문일 수 있습니다. CloudWatch 에이전트 운영자가 CloudWatch 에이전트 및 연결된 구성 요소를 설치하려고 할 때 콘텐츠의 변경 사항이 탐지되면 기본적으로 클러스터의 리소스 상태를 덮어쓰지 않도록 설치 또는 업데이트가 실패합니다. 이전에 클러스터에 설치한 Container Insights 설정을 포함하여 기존 CloudWatch 에이전트를 삭제한 다음 CloudWatch 에이전트 운영자를 설치하는 것이 좋습니다.

1. (선택 사항) 기존 사용자 지정 Fluent Bit 구성을 적용하려면 Fluent Bit 데몬셋과 연결된 Configmap을 업데이트해야 합니다. CloudWatch 에이전트 운영자는 Fluent Bit의 기본 구성을 제공하며, 사용자는 필요에 따라 기본 구성을 재정의 또는 수정할 수 있습니다. 사용자 지정 구성을 적용하려면 다음 단계를 따릅니다.

   1. 다음 명령을 입력하여 기존 구성을 엽니다.

      ```
      kubectl edit cm fluent-bit-config -n amazon-cloudwatch
      ```

   1. 파일을 변경한 다음 `:wq`를 입력하여 파일을 저장하고 편집 모드를 종료합니다.

   1. 다음 명령을 입력하여 Fluent Bit를 다시 시작합니다.

      ```
      kubectl rollout restart ds fluent-bit -n amazon-cloudwatch
      ```

# CloudWatch 에이전트 컨테이너 이미지 업데이트
<a name="ContainerInsights-update-image"></a>

**중요**  
Amazon EKS 클러스터에 Container Insights를 업그레이드 또는 설치하는 경우 이 섹션의 지침을 따르는 대신 Amazon CloudWatch Observability EKS 추가 기능을 사용하여 설치하는 것이 좋습니다. 또한 가속화된 컴퓨팅 지표를 검색하려면 Amazon CloudWatch Observability EKS 추가 기능 또는 CloudWatch 에이전트 운영자를 사용해야 합니다. 자세한 정보와 지침은 [Amazon CloudWatch Observability EKS 추가 기능 빠른 시작](Container-Insights-setup-EKS-addon.md) 섹션을 참조하십시오.

컨테이너 이미지를 최신 버전으로 업데이트해야 하는 경우 이 단원의 절차를 따르세요.

**컨테이너 이미지를 업데이트하려면**

1. 다음 명령을 입력하여 `amazoncloudwatchagent` 사용자 지정 리소스 정의(CRD)가 이미 존재하는지 확인합니다.

   ```
   kubectl get crds amazoncloudwatchagents.cloudwatch.aws.amazon.com -n amazon-cloudwatch
   ```

   이 명령에서 CRD가 누락되었다는 오류를 반환하는 경우 클러스터에는 CloudWatch 에이전트 운영자로 구성된 Amazon EKS의 향상된 관찰 기능을 갖춘 Container Insights가 없는 것입니다. 이 경우 [CloudWatch에서 Amazon EKS에 대한 향상된 관찰성을 갖춘 Container Insights로 업그레이드](Container-Insights-upgrade-enhanced.md) 섹션을 참조하세요.

1. 다음 명령을 입력하여 최신 `cwagent-version.yaml` 파일을 적용합니다.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-version.yaml | kubectl apply -f -
   ```

# Container Insights의 CloudWatch 에이전트 및 Fluent Bit 삭제
<a name="ContainerInsights-delete-agent"></a>

Amazon EKS용 CloudWatch Observability 추가 기능 설치를 사용하여 Container Insights를 설치한 경우, 다음 명령을 입력하여 Container Insights와 CloudWatch 에이전트를 삭제할 수 있습니다.

**참고**  
Amazon EKS 추가 기능은 이제 Windows 워커 노드의 Container Insights를 지원합니다. Amazon EKS 추가 기능을 삭제하면 Windows용 Container Insights도 삭제됩니다.

```
aws eks delete-addon —cluster-name my-cluster —addon-name amazon-cloudwatch-observability
```

또는 CloudWatch 에이전트 및 Fluent Bit와 관련된 모든 리소스를 삭제하려면 다음 명령을 입력합니다. 이 명령에서 *My\$1Cluster\$1Name*은 Amazon EKS 또는 Kubernetes 클러스터의 이름이며, *My\$1Region*은 로그가 게시되는 리전의 이름입니다.

```
ClusterName=My_Cluster_Name
RegionName=My-Region
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-operator-rendered.yaml | sed 's/{{cluster_name}}/'${ClusterName}'/g;s/{{region_name}}/'${RegionName}'/g' | kubectl delete -f -
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/main/k8s-quickstart/cwagent-custom-resource-definitions.yaml | kubectl delete -f -
```