CloudWatch 솔루션: Amazon EC2의 Kafka 워크로드
이 솔루션을 사용하면 EC2 인스턴스에서 실행되는 Apache Kafka 워크로드(브로커, 생산자, 소비자)용 CloudWatch 에이전트를 사용하여 즉시 사용 가능한 메트릭 컬렉션을 구성할 수 있습니다. 또한, 미리 구성된 CloudWatch 대시보드를 설정하는 데 도움이 됩니다. CloudWatch 관찰성 솔루션에서 모든 CloudWatch 관찰성 솔루션에 대한 일반 정보를 참조하세요.
주제
요구 사항
이 솔루션 관련 조건은 다음과 같습니다.
워크로드: Kafka v0.8.2.x 이상
컴퓨팅: Amazon EC2
지정된 AWS 리전의 모든 Kafka 워크로드에서 최대 500개의 EC2 인스턴스 지원
-
CloudWatch 에이전트의 최신 버전
-
EC2 인스턴스에 SSM Agent 설치
참고
AWS Systems Manager(SSM Agent)는 AWS 및 신뢰할 수 있는 타사에서 제공하는 일부 Amazon Machine Images (AMI)에 사전 설치되어 있습니다. 에이전트가 설치되지 않은 경우 다음 운영 체제 유형에 대한 절차를 사용하여 수동으로 설치할 수 있습니다.
이점
이 솔루션은 Kafka 서버 모니터링을 제공함으로써 다음 사용 사례에 관한 유용한 인사이트를 제공합니다.
-
복제 메트릭과 및 동기화 메트릭을 통해 Kafka 클러스터 상태를 모니터링합니다.
-
요청 실패 및 지연 시간을 네트워크 트래픽과 함께 사용하여 브로커 성능을 추적합니다.
-
생산자/소비자 오류, 지연 시간, 소비자 지연을 모니터링합니다.
-
Kafka 클러스터의 기본 JVM 성능을 분석합니다.
-
동일한 계정의 솔루션을 통해 구성된 여러 Kafka 클러스터, 생산자, 소비자 간에 전환합니다.
솔루션의 가장 중요한 장점으로는 다음과 같은 것들이 있습니다.
-
CloudWatch 에이전트 구성을 사용하여 Kafka 및 기본 JVM의 메트릭 수집을 자동화함으로써 수동 계측 소요를 없앱니다.
-
Kafka 및 JVM 메트릭에 대해 미리 구성된 통합 CloudWatch 대시보드를 제공합니다. 대시보드는 솔루션을 사용하여 구성된 새 Kafka EC2 인스턴스의 메트릭을 자동으로 처리하며, 이는 해당 대시보드를 처음 생성할 때 해당 메트릭이 존재하지 않더라도 마찬가지입니다. 또한 메트릭을 논리적 애플리케이션으로 그룹화하여 더 쉽게 초점을 맞추고 관리할 수 있습니다.
다음 이미지는 해당 솔루션의 대시보드 예시입니다.
비용
이 솔루션은 사용자 계정에 리소스를 생성하여 사용합니다. 표준 사용에 대한 요금이 부과되며, 다음 항목들이 포함됩니다.
CloudWatch 에이전트가 수집한 메트릭은 사용자 지정 메트릭으로 청구됩니다. 이 솔루션에서 사용하는 메트릭 수는 EC2 호스트 수에 따라 달라집니다.
솔루션에 구성된 각각의 브로커 호스트는 33개의 메트릭과 함께, 각각의 EC2 호스트의 메트릭 수가 해당 호스트의 디스크 경로 수에 따라 달라지는 메트릭(
disk_used_percent
) 하나를 더해 게시합니다.솔루션에 구성된 각각의 생산자 호스트는
topic
차원이 있는 메트릭 3개와topic
차원이 없는 메트릭 3개를 게시합니다.topic
차원이 있는 메트릭의 경우 주제마다 별도의 메트릭으로 계산됩니다.솔루션에 구성된 각각의 소비자 호스트는
topic
차원이 있는 메트릭 2개와topic
차원이 없는 메트릭 3개를 게시합니다. 주제 차원이 있는 메트릭의 경우 주제마다 별도의 메트릭으로 계산됩니다.
사용자 지정 단일 대시보드
메트릭을 게시하기 위해 CloudWatch 에이전트가 요청한 API 작업입니다. 이 솔루션의 기본 구성을 사용하면 CloudWatch 에이전트가 각각의 EC2 호스트마다 PutMetricData를 1분에 한 번씩 호출합니다. 즉, 각각의 EC2 호스트에 대해 30일 이내에 PutMetricData API
30*24*60=43,200
가 호출됩니다.
CloudWatch 요금에 대한 자세한 내용은 Amazon CloudWatch 요금
요금 계산기는 이 솔루션 사용에 대한 대략적인 월별 비용을 추정하는 데 도움이 될 수 있습니다.
요금 계산기를 사용하여 솔루션 월별 비용을 추정하려면
-
Amazon CloudWatch 요금 계산기
를 엽니다. -
메트릭 섹션의 메트릭 수에
broker_metrics_count + producer_metrics_count + consumer_metrics_count
을(를) 입력합니다. 계산식은 다음과 같습니다.broker_metrics_count
= (EC2 호스트당 33개 + 평균 디스크 경로 수) * number_of_ec2_broker_hostsproducer_metrics_count
= (3 * average_number_of_topics_per_producer_host + 3) * number_of_ec2_producer_hostsconsumer_metrics_count
= (2 * average_number_of_topics_per_consumer_host + 3) * number_of_ec2_consumer_hosts
-
API 섹션의 API 요청 수에
43200 * number of EC2 instances configured for this solution
을(를) 입력합니다.기본적으로 CloudWatch 에이전트는 각각의 EC2 호스트마다 PutMetricData 작업을 1분당 하나씩 수행합니다.
대시보드 및 경보 섹션의 대시보드 수에
1
을(를) 입력합니다.-
요금 계산기 하단에서 월별 예상 비용을 확인할 수 있습니다.
이 솔루션에 대한 CloudWatch 에이전트 구성
CloudWatch 에이전트는 서버와 컨테이너화된 환경에서 지속적이고 자율적으로 실행되는 소프트웨어입니다. 인프라와 애플리케이션에서 메트릭, 로그, 트레이스를 수집하여 CloudWatch와 X-Ray로 전송합니다.
CloudWatch에 대한 자세한 내용은 CloudWatch 에이전트를 사용하여 지표, 로그, 추적 수집을(를) 참조하세요.
이 솔루션의 에이전트 구성에서는 Kafka, JVM, EC2의 기본 메트릭을 수집합니다. CloudWatch 에이전트는 대시보드가 기본적으로 표시하는 것보다 더 많은 Kafka 및 JVM 메트릭을 수집하도록 구성할 수 있습니다. EC2 메트릭 목록은 Linux 및 macOS 인스턴스의 CloudWatch 에이전트가 수집하는 지표을(를) 참조하세요.
Kafka 브로커, 생산자, 소비자 역할 관련 JMX 포트 노출
CloudWatch 에이전트는 JMX를 사용하여 Kafka 브로커, 생산자, 소비자와 관련된 메트릭을 수집합니다. 이 작업을 수행하려면 서버와 애플리케이션의 JMX 포트를 노출해야 합니다.
Kafka 브로커의 경우, JMX_PORT
환경 변수를 사용하여 포트를 설정해야 합니다. 이 환경 변수를 설정한 후 브로커를 다시 시작해야 합니다. 애플리케이션의 시작 스크립트 및 구성 파일을 검토하여 이러한 인수를 추가할 수 있는 가장 좋은 위치를 찾습니다.
예를 들어, Linux 시스템과 macOS 시스템에서는 다음 명령을 사용하여 JMX 포트를 설정할 수 있습니다. 반드시 사용하지 않는 포트 번호를 지정해야 합니다.
export JMX_PORT=
port-number
Kafka 생산자 및 소비자의 경우 JMX 포트 노출 지침은 생산자 또는 소비자 JVM 애플리케이션에 사용 중인 워크로드 유형에 따라 다릅니다. 이 지침을 찾으려면 애플리케이션 설명서를 참조하세요.
일반적으로 모니터링 및 관리용 JMX 포트를 활성화하려면 JVM 애플리케이션에 시스템 속성을 다음과 같이 설정합니다. 다음 예제에서는 인증되지 않은 JMX를 설정합니다. 보안 정책/요건에 따라 암호 인증으로 JMX를 활성화하거나 원격 액세스용 SSL을 활성화해야 하는 경우 JMX 설명서
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=
port-number
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
JMX 포트를 확인하려면 ps aux | grep jmxremote.port
을(를) 실행합니다. 실행 결과를 통해 JMX 포트가 JVM 프로세스에 설정되었다고 표시되어야 합니다.
이 솔루션의 에이전트 구성
에이전트가 수집한 메트릭은 에이전트 구성에 정의되어 있습니다. 이 솔루션은 솔루션 대시보드에 적합한 차원에 권장 메트릭을 수집하는 에이전트 구성을 제공합니다. 브로커, 생산자, 소비자와 같은 Kafka 역할 각각에는 Kafka 메트릭과 기본 JVM 메트릭 및 EC2 메트릭을 수집할 수 있는 자체 에이전트 구성이 있습니다.
솔루션 배포 단계는 뒷부분의 솔루션 에이전트 배포에 설명되어 있습니다. 다음 정보는 환경에 맞게 에이전트 구성을 사용자 지정하는 방법을 이해하는 데 도움이 됩니다.
환경에 맞게 다음 에이전트 구성의 일부를 사용자 지정해야 합니다.
JMX 포트 번호는 이 설명서의 이전 섹션에서 구성한 포트 번호입니다. 포트 번호는 구성의
endpoint
줄에 있습니다.ClusterName
- 수집된 브로커 메트릭의 차원으로 사용됩니다. Kafka 브로커를 실행하는 인스턴스의 클러스터 그룹화를 알 수 있는 이름을 입력합니다.ProcessGroupName
- 브로커와 관련하여 수집된 JVM 메트릭의 차원으로 사용됩니다.ClusterName
에 제공하는 것과 같은 값을 제공합니다. 이를 통해 솔루션 대시보드에서 브로커 메트릭과 동일한 Kafka 브로커 그룹의 JVM 메트릭을 볼 수 있습니다.ProducerGroupName
- 수집된 생산자 메트릭의 차원으로 사용됩니다. 생산자 인스턴스 그룹임을 알 수 있는 이름을 입력합니다. 해당 값의 경우, 솔루션 대시보드에서 생산자 메트릭 통합 보기에 사용할 생산자 애플리케이션이나 서비스를 지정할 수 있습니다.ConsumerGroupName
- 수집된 소비자 메트릭의 차원으로 사용됩니다. 소비자 인스턴스 그룹임을 알 수 있는 이름을 입력합니다. Kafka의 소비자 그룹 개념과는 다릅니다. 해당 항목은 솔루션 대시보드에서 소비자 메트릭의 통합 보기에 사용할 소비자 애플리케이션이나 서비스를 지정할 수 있는 그룹화 차원에 불과합니다.
예를 들어, 동일한 계정에 Kafka 클러스터를 두 개 실행 중인 경우, 하나는 order-processing
애플리케이션용이고 다른 하나는 inventory-management
애플리케이션용이며, 브로커 인스턴스의 에이전트 구성에서 이에 따라 ClusterName
차원과 ProcessGroupName
차원을 설정해야 합니다.
-
order-processing
클러스터 브로커 인스턴스의 경우ClusterName=order-processing
및ProcessGroupName=order-processing
을(를) 설정합니다. -
inventory-management
클러스터 브로커 인스턴스의 경우ClusterName=inventory-management
및ProcessGroupName=inventory-management
을(를) 설정합니다. -
마찬가지로 각각 해당되는 애플리케이션에 따라 생산자 인스턴스에
ProducerGroupName
을(를), 소비자 인스턴스에ConsumerGroupName
을(를) 설정합니다.
위의 차원을 올바르게 설정하면 솔루션 대시보드는, ClusterName
, ProducerGroupName
, ConsumerGroupName
차원을 기반으로 자동으로 메트릭을 그룹화합니다. 대시보드에는 특정 클러스터와 그룹의 메트릭을 선택하고 볼 수 있는 드롭다운 옵션이 포함되어 있으므로 개별 클러스터와 그룹의 성능을 각각 모니터링할 수 있습니다.
관련 에이전트 구성을 올바른 EC2 인스턴스에 배포해야 합니다. 각각의 구성은 뒷부분의 2단계: Systems Manager Parameter Store에 권장 에이전트 구성 파일을 저장에 설명된 대로 SSM의 Parameter Store에 개별 파라미터로 저장됩니다.
다음 지침은 생산자, 소비자, 브로커 역할이 중복 없이 별도의 EC2 인스턴스에 배포되는 상황을 설명합니다. 동일한 EC2 인스턴스에서 다양한 Kafka 역할을 실행하는 경우, 동일한 인스턴스에서 다양한 Kafka 역할에 대한 에이전트 구성에서 자세한 내용을 참조하세요.
Kafka 브로커 에이전트의 에이전트 구성
Kafka 브로커 에이전트가 배포된 EC2 인스턴스에 다음 CloudWatch 에이전트 구성을 사용합니다. ClusterName
을 통합 보기에 대해 해당 메트릭을 그룹화할 때 사용할 클러스터 이름으로 바꿉니다. ClusterName
에 지정하는 값은 ClusterName
차원과 ProcessGroupName
차원으로 모두 사용됩니다. 포트 번호
를 Kafka 서버의 JMX 포트 번호로 바꾸세요.
이 구성(JMX 블록 외부에 표시된 구성)에 표시된 EC2 메트릭은는 Linux 및 macOS 인스턴스에서만 작동합니다. Windows 인스턴스를 사용하는 경우 구성에서 이러한 메트릭을 생략하도록 선택할 수 있습니다. Windows 인스턴스에서 수집한 메트릭에 관해서는 Windows Server 인스턴스의 CloudWatch 에이전트가 수집하는 지표에서 자세한 내용을 참조하세요.
{ "metrics": { "namespace": "CWAgent", "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:
port-number
", "kafka": { "measurement": [ "kafka.request.time.avg", "kafka.request.failed", "kafka.request.count", "kafka.purgatory.size", "kafka.partition.under_replicated", "kafka.partition.offline", "kafka.network.io", "kafka.leader.election.rate", "kafka.isr.operation.count" ] }, "append_dimensions": { "ClusterName": "ClusterName
" } }, { "endpoint": "localhost:port-number
", "jvm": { "measurement": [ "jvm.classes.loaded", "jvm.gc.collections.count", "jvm.gc.collections.elapsed", "jvm.memory.heap.committed", "jvm.memory.heap.max", "jvm.memory.heap.used", "jvm.memory.nonheap.committed", "jvm.memory.nonheap.max", "jvm.memory.nonheap.used", "jvm.threads.count" ] }, "append_dimensions": { "ProcessGroupName": "ClusterName
" } } ], "disk": { "measurement": [ "used_percent" ] }, "mem": { "measurement": [ "used_percent" ] }, "swap": { "measurement": [ "used_percent" ] }, "netstat": { "measurement": [ "tcp_established", "tcp_time_wait" ] } } } }
Kafka 생산자를 위한 에이전트 구성
Kafka 생산자가 배포된 Amazon EC2 인스턴스에 다음 CloudWatch 에이전트 구성을 사용합니다. ProducerGroupName
을 통합 보기에 대해 메트릭을 그룹화할 때 사용할 애플리케이션 또는 그룹의 이름으로 바꿉니다. 포트 번호
를 Kafka 생산자 애플리케이션의 JMX 포트로 바꿉니다.
솔루션 대시보드에는 생산자용 JVM과 관련된 JVM 메트릭이 표시되지 않으므로 이 솔루션에서는 Kafka 생산자에 대한 JVM 메트릭을 활성화하지 않습니다. 에이전트 구성을 사용자 지정하여 JVM 메트릭을 내보낼 수도 있지만 생산자와 관련된 JVM 메트릭은 솔루션 대시보드에 표시되지 않습니다.
{ "metrics": { "namespace": "CWAgent", "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:
port-number
", "kafka-producer": { "measurement": [ "kafka.producer.request-rate", "kafka.producer.byte-rate", "kafka.producer.request-latency-avg", "kafka.producer.response-rate", "kafka.producer.record-error-rate", "kafka.producer.record-send-rate" ] }, "append_dimensions": { "ProducerGroupName": "ProducerGroupName
" } } ] } } }
Kafka 소비자를 위한 에이전트 구성
Kafka 소비자가 실행하는 EC2 인스턴스에 다음 CloudWatch 에이전트 구성을 사용합니다. ConsumerGroupName
을 통합 보기에 대해 메트릭을 그룹화할 때 사용할 애플리케이션 또는 그룹의 이름으로 바꿉니다. 포트 번호
를 Kafka 소비자 애플리케이션의 JMX 포트로 바꿉니다.
솔루션 대시보드에는 소비자용 JVM과 관련된 JVM 메트릭이 표시되지 않으므로 이 솔루션에서는 Kafka 소비자에 대한 JVM 메트릭을 활성화하지 않습니다. 에이전트 구성을 사용자 지정하여 JVM 메트릭을 내보낼 수도 있지만 소비자와 관련된 JVM 메트릭은 솔루션 대시보드에 표시되지 않습니다.
{ "metrics": { "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:
port-number
", "kafka-consumer": { "measurement": [ "kafka.consumer.fetch-rate", "kafka.consumer.total.bytes-consumed-rate", "kafka.consumer.records-consumed-rate", "kafka.consumer.bytes-consumed-rate", "kafka.consumer.records-lag-max" ] }, "append_dimensions": { "ConsumerGroupName": "ConsumerGroupName
" } } ] } } }
솔루션 에이전트 배포
사용 사례에 따라 CloudWatch 에이전트를 설치하는 방법에는 여러 가지가 있습니다. 이 솔루션에는 Systems Manager를 사용하는 것이 좋습니다. Systems Manager는 콘솔 환경을 제공하며 단일 AWS 계정 내에 관리형 서버 플릿을 더 쉽게 관리할 수 있습니다. 이 섹션의 내용은 Systems Manager를 사용하며, 기존 구성으로 CloudWatch 에이전트를 실행하지 않는 경우에 적용할 수 있습니다. CloudWatch 에이전트가 실행 중인지 확인에 나열된 단계에 따라 CloudWatch 에이전트가 실행 중인지 확인할 수 있습니다.
워크로드가 배포된 EC2 호스트에서 이미 CloudWatch 에이전트를 실행 중이며 에이전트 구성을 관리 중이라면 이 섹션의 내용을 건너뛰어 기존 배포 메커니즘에 따라 구성을 업데이트할 수 있습니다. 브로커, 생산자, 소비자와 같은 역할에 따라 에이전트 구성을 기존 에이전트 구성과 병합한 다음에 병합된 구성을 배포해야 합니다. Systems Manager를 사용하여 CloudWatch 에이전트의 구성을 저장하고 관리하는 경우, 해당 구성을 기존 파라미터 값에 병합할 수 있습니다. 자세한 내용은 CloudWatch 에이전트 구성 파일 관리를 참조하세요.
참고
Systems Manager를 사용하여 다음 CloudWatch 에이전트 구성을 배포하면 EC2 인스턴스의 기존 CloudWatch 에이전트 구성을 대체하거나 덮어씁니다. 이 구성은 고유한 환경 또는 사용 사례에 맞춰 수정할 수 있습니다. 이 솔루션에 정의된 메트릭은 권장 대시보드에 필요한 최소 항목입니다.
이 배포 프로세스는 다음 단계를 통해 이루어집니다.
1단계: 대상 EC2 인스턴스에 필요한 IAM 권한이 있는지 확인합니다.
2단계: Systems Manager Parameter Store에 권장 에이전트 구성 파일을 저장합니다.
3단계: AWS CloudFormation 스택을 사용하여 하나 이상의 EC2 인스턴스에 CloudWatch 에이전트를 설치합니다.
4단계: 에이전트 설정이 올바르게 구성되었는지 확인합니다.
브로커, 생산자, 소비자가 동일한 EC2 인스턴스에 배포되었는지 다른 인스턴스에 배포되었는지에 따라 이러한 단계를 반복해야 합니다. 예를 들어, Kafka 브로커, 생산자, 소비자가 중복 없이 별도의 인스턴스에 배포되는 경우, 브로커, 생산자, 소비자 EC2 인스턴스에 대한 적절한 에이전트 구성을 사용하여 이 단계를 세 번 반복해야 합니다.
1단계: 대상 EC2 인스턴스에 필요한 IAM 권한이 있는지 확인
Systems Manager가 CloudWatch 에이전트를 설치하고 구성할 수 있도록 권한을 부여해야 합니다. 또한, CloudWatch 에이전트가 EC2 인스턴스에서 CloudWatch로 원격 측정을 게시할 수 있는 권한을 부여해야 합니다. 인스턴스에 연결된 IAM 역할에 CloudWatchAgentServerPolicy와 AmazonSSMManagedInstanceCore IAM 정책이 연결되어 있는지 확인합니다.
-
역할을 생성하려면 Amazon EC2 인스턴스에서 CloudWatch 에이전트와 함께 사용할 IAM 역할 생성 섹션을 참조하세요.
-
역할이 생성된 후에는 해당 역할을 EC2 인스턴스에 연결합니다. IAM 역할로 인스턴스 시작의 단계에 따라 새 EC2 인스턴스를 시작하는 동안 역할을 연결합니다. 기존 EC2 인스턴스에 역할을 연결하려면 인스턴스에 IAM 역할 연결의 단계를 따릅니다.
2단계: Systems Manager Parameter Store에 권장 에이전트 구성 파일을 저장
Parameter Store는 구성 파라미터를 안전하게 저장하고 관리하여 EC2 인스턴스에 CloudWatch 에이전트 설치하는 작업을 간소화하므로 하드 코딩 값이 필요 없습니다. 이를 통해 보다 안전하고 유연한 배포 프로세스를 보장하며 중앙 집중식 관리를 가능하게 하는 동시에 다양한 인스턴스에서 구성을 더 쉽게 업데이트할 수 있습니다.
다음 단계에 따라 권장 CloudWatch 에이전트 구성 파일을 Parameter Store에 파라미터로 저장합니다.
CloudWatch 에이전트 구성 파일을 파라미터로 생성하려면
AWS Systems Manager 콘솔(https://console.aws.amazon.com/systems-manager/
)을 엽니다. 탐색 창에서 애플리케이션 관리와 Parameter Store를 선택합니다.
다음 단계에 따라 새 구성 파라미터를 생성합니다.
-
파라미터 생성(Create parameter)을 선택합니다.
-
CloudWatch 에이전트 구성을 저장할 파라미터에 이름을 생산자에
AmazonCloudWatch-Kafka-Producer-Configuration
, 소비자에AmazonCloudWatch-Kafka-Consumer-Configuration
, 브로커에AmazonCloudWatch-Kafka-Broker-Configuration
같이 입력합니다. 단일 EC2에 Kafka 역할이 여러 개 있는 경우 쉽게 식별할 수 있도록 그에 따라 역할 이름을 지정합니다. 이 값은 나중에 EC2 인스턴스에서 실행되는 에이전트에 해당 구성을 배포하는 데 사용됩니다. -
파라미터 계층에서 표준을 선택합니다.
-
Type(유형)에서 문자열을 선택합니다.
데이터 유형에는 텍스트를 선택합니다.
-
값 상자에 CloudWatch 에이전트 구성의 전체 텍스트를 붙여넣습니다. 이 인스턴스가 호스팅하는 Kafka 역할의 JSON 블록을 선택해야 합니다. 브로커, 생산자, 소비자 관련 구성을 각각 저장할 때는 Kafka 브로커 에이전트의 에이전트 구성, Kafka 생산자를 위한 에이전트 구성, Kafka 소비자를 위한 에이전트 구성에 제공한 구성을 참조합니다. 동일한 EC2 인스턴스에서 여러 Kafka 역할을 실행하는 경우, 필요하다면 동일한 인스턴스의 동일한 인스턴스에서 다양한 Kafka 역할에 대한 에이전트 구성에 설명된 대로 구성을 병합해야 합니다.
-
파라미터 생성(Create parameter)을 선택합니다.
-
3단계: CloudWatch 에이전트를 설치하고 AWS CloudFormation 템플릿을 사용하여 구성을 적용
AWS CloudFormation을(를) 사용하여 에이전트를 설치하고 이를 이전 단계에서 생성한 CloudWatch 에이전트 구성을 사용하도록 구성할 수 있습니다.
이 솔루션의 CloudWatch 에이전트를 설치하고 구성하려면
-
https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions.s3.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-1.0.0.json
링크를 사용하여 AWS CloudFormation 빠른 스택 생성 마법사를 엽니다. -
콘솔에서 선택한 리전이 Kafka 워크로드가 실행 중인 리전인지 확인합니다.
-
스택 이름에 스택의 이름을
CWAgentInstallationStack
등과 같이 입력합니다. -
파라미터 섹션에는 다음과 같이 지정합니다.
-
CloudWatchAgentConfigSSM에는 이전에 생성한 에이전트 구성의 Systems Manager 파라미터 이름을 브로커는
AmazonCloudWatch-Kafka-Broker-Configuration
, 생산자는AmazonCloudWatch-Kafka-Producer-Configuration
, 소비자는AmazonCloudWatch-Kafka-Consumer-Configuration
처럼 입력합니다. -
대상 인스턴스를 선택할 때 사용할 수 있는 두 가지 옵션이 있습니다.
-
InstanceIds에는 이 구성으로 CloudWatch 에이전트를 설치하려는 인스턴스 ID에서 쉼표로 구분된 인스턴스 ID 목록을 지정합니다. 단일 인스턴스나 여러 인스턴스를 목록 지정할 수 있습니다.
-
대규모 배포 시에는 TagKey와 해당 TagValue를 지정하여 해당 태그와 값을 사용하는 모든 EC2 인스턴스를 대상으로 지정할 수 있습니다. TagKey를 지정하는 경우 관련된 TagValue를 지정해야 합니다. (Auto Scaling 그룹에서는 TagKey를
aws:autoscaling:groupName
처럼 지정하고 Auto Scaling 그룹 내의 모든 인스턴스에 배포할 TagKey의 Auto Scaling 그룹 이름을 지정합니다.)InstanceIds와 TagKeys 파라미터를 모두 지정하면 InstanceIds가 우선시되어 태그는 무시됩니다.
-
-
-
설정을 검토한 다음 스택 생성을 선택합니다.
템플릿 파일을 먼저 편집하여 사용자 지정하려면 스택 생성 마법사에서 템플릿 파일 업로드 옵션을 선택하여 편집된 템플릿을 업로드합니다. 자세한 내용은 AWS CloudFormation 콘솔에서 스택 생성 단원을 참조하세요. https://aws-observability-solutions.s3.amazonaws.com/CloudWatchAgent/CFN/v1.0.0/cw-agent-installation-template-1.0.0.json
참고
이 단계가 완료되면 이 Systems Manager 파라미터는 대상 인스턴스에서 실행되는 CloudWatch 에이전트와 연결됩니다. 이는 다음을 의미합니다.
-
Systems Manager 파라미터가 삭제되면 에이전트가 중지됩니다.
-
Systems Manager 파라미터를 편집하면 기본값인 30일로 예약된 빈도로 에이전트에 구성 변경 사항이 자동으로 적용됩니다.
-
이 Systems Manager 파라미터에 변경 사항을 즉시 적용하려면 이 단계를 다시 실행해야 합니다. 자세한 내용은 Systems Manager에서 연결 작업을 참조하세요.
4단계: 에이전트 설정이 올바르게 구성되었는지 확인
CloudWatch 에이전트가 실행 중인지 확인에 나열된 단계에 따라 CloudWatch 에이전트가 설치되었는지 확인할 수 있습니다. CloudWatch 에이전트가 설치되어 실행되지 않는 경우 모든 항목을 올바르게 설정했는지 확인합니다.
-
1단계: 대상 EC2 인스턴스에 필요한 IAM 권한이 있는지 확인에서 설명한 대로 EC2 인스턴스에 올바른 권한이 있는 역할을 연결했는지 확인합니다.
-
Systems Manager 파라미터의 JSON을 올바르게 구성했는지 확인합니다. AWS CloudFormation을 사용한 CloudWatch 에이전트 설치 문제 해결 단원의 단계를 따르세요.
모든 것이 올바르게 설정된 경우 CloudWatch에 게시되는 Kafka 메트릭이 표시됩니다. CloudWatch 콘솔을 확인하여 게시되고 있는지 확인할 수 있습니다.
Kafka 메트릭이 CloudWatch에 게시되고 있는지 확인하려면
https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. 메트릭, 전체 메트릭을 선택합니다.
솔루션을 배포한 리전을 선택하고 사용자 지정 네임스페이스, CWAgent를 선택합니다.
이 문서의 에이전트 구성 섹션에서 브로커에
kafka.partition.offline
, 소비자에kafka.consumer.fetch.rate
, 생산자에kafka.producer.request-rate
과 같이 언급된 메트릭을 검색합니다. 해당 메트릭에 대한 결과가 표시되면 메트릭은 CloudWatch에 게시 중입니다.
Kafka 솔루션 대시보드 생성
이 대시보드는 Kafka와 기본 JVM에 공통적으로 새로 생성된 메트릭을 표시합니다. 이 대시보드는 생산자, 브로커, 소비자 전반에 걸쳐 Kafka 워크로드의 상태에 대한 상위 기여자 보기를 제공합니다. 상위 기여자 보기에는 메트릭당 상위 10개의 위젯이 표시됩니다. 이를 통해 이상치를 한눈에 식별할 수 있습니다.
솔루션 대시보드에는 EC2 메트릭이 표시되지 않습니다. EC2 메트릭을 보려면 EC2 자동 대시보드를 사용하여 EC2 벤딩 메트릭을 확인하고 EC2 콘솔 대시보드를 사용하여 CloudWatch 에이전트에서 수집한 EC2 메트릭을 확인해야 합니다. AWS 서비스의 자동 대시보드에 대한 자세한 내용은 단일 AWS 서비스에 대한 CloudWatch 대시보드 보기을(를) 참조하세요.
대시보드를 생성하기 위해 사용할 수 있는 옵션은 다음과 같습니다.
CloudWatch 콘솔을 사용하여 대시보드를 생성합니다.
AWS CloudFormation 콘솔을 사용하여 대시보드를 배포합니다.
AWS CloudFormation 인프라를 코드로 다운로드하여 지속적 통합(CI) 자동화에 통합합니다.
CloudWatch 콘솔을 사용하여 대시보드를 생성하면 실제 생성 및 청구 전에 대시보드를 미리 볼 수 있습니다.
참고
이 솔루션에서 AWS CloudFormation(으)로 생성된 대시보드에는 솔루션이 배포된 리전의 메트릭이 표시됩니다. JVM 메트릭과 Kafka 메트릭이 게시되는 리전에서 AWS CloudFormation 스택을 생성해야 합니다.
사용자 지정 네임스페이스를 CloudWatch 에이전트 구성의 CWAgent
이외의 네임스페이스로 지정하는 경우 대시보드의 AWS CloudFormation 템플릿을 변경하여 사용 중인 사용자 지정 네임스페이스로 CWAgent
를 바꿔야 합니다.
CloudWatch 콘솔을 통해 대시보드를 생성하려면
-
https://console.aws.amazon.com/cloudwatch/home?#dashboards?dashboardTemplate=ApacheKafkaOnEc2&referrer=os-catalog
링크를 사용하여 CloudWatch 클라우드의 대시보드 생성을 엽니다. -
콘솔에서 선택한 리전이 Kafka 워크로드가 실행 중인 리전인지 확인합니다.
-
대시보드의 이름을 입력하고 대시보드 생성을 선택합니다.
이 대시보드를 다른 리전의 비슷한 대시보드와 쉽게 구분하려면
KafkaDashboard-us-east-1
처럼 대시보드 이름에 리전 이름을 포함하는 것이 좋습니다. -
대시보드를 미리 보고 저장을 선택하여 대시보드를 생성합니다.
AWS CloudFormation을(를) 통해 대시보드를 생성하려면
-
https://console.aws.amazon.com/cloudformation/home?#/stacks/quickcreate?templateURL=https://aws-observability-solutions.s3.amazonaws.com/Kafka_EC2/CloudWatch/CFN/v1.0.0/dashboard-template-1.0.0.json
링크를 사용하여 AWS CloudFormation 빠른 스택 생성 마법사를 엽니다. -
콘솔에서 선택한 리전이 Kafka 워크로드가 실행 중인 리전인지 확인합니다.
-
스택 이름에 스택의 이름을
KafkaDashboardStack
등과 같이 입력합니다. -
파라미터 섹션에서 DashboardName 파라미터 아래에 대시보드 이름을 지정합니다.
이 대시보드를 다른 리전의 비슷한 대시보드와 쉽게 구분하려면
KafkaDashboard-us-east-1
처럼 대시보드 이름에 리전 이름을 포함하는 것이 좋습니다. -
기능 및 변환에서 변환에 대한 액세스 기능을 확인합니다. CloudFormation은 IAM 리소스를 추가하지 않습니다.
-
설정을 검토한 다음 스택 생성을 선택합니다.
-
스택 상태가 CREATE_COMPLETE가 되면, 생성된 스택에서 리소스 탭을 선택한 다음 물리적 ID의 링크를 선택하여 대시보드로 이동합니다. 콘솔의 왼쪽 탐색 창에서 대시보드를 선택하고 사용자 지정 대시보드에서 대시보드 이름을 찾아 CloudWatch 콘솔의 대시보드에 액세스할 수도 있습니다.
템플릿 파일을 편집하여 범용으로 사용자 지정하려면 스택 생성 마법사의 템플릿 파일 업로드 옵션을 사용하여 편집된 템플릿을 업로드하면 됩니다. 자세한 내용은 AWS CloudFormation 콘솔에서 스택 생성 단원을 참조하세요. https://aws-observability-solutions.s3.amazonaws.com/Kafka_EC2/CloudWatch/CFN/v1.0.0/dashboard-template-1.0.0.json
Kafka 대시보드 시작하기
새 Kafka 대시보드로 시도해 볼 수 있는 작업들 가운데는 다음과 같은 것이 있습니다. 이들 작업을 통해 대시보드가 올바르게 작동하는지 확인하고 이를 사용하여 Kafka 클러스터 모니터링과 관련된 몇 가지 실습 경험을 제공할 수 있습니다. 이들 작업을 직접 실행해 보면 대시보드 탐색 및 시각화된 메트릭 해석에 익숙해질 수 있습니다.
드롭다운 목록 사용
대시보드는 모니터링할 특정 Kafka 클러스터, 생산자 그룹, 소비자 그룹을 필터링하고 선택하는 데 사용할 수 있는 드롭다운 목록을 상단에 제공합니다.
특정 Kafka 클러스터에 대한 메트릭을 표시하려면 Kafka 클러스터 드롭다운 목록에서 해당 클러스터 이름을 선택합니다.
특정 Kafka 생산자 그룹에 대한 메트릭을 표시하려면 Kafka 생산자 드롭다운 목록에서 해당 생산자 그룹 이름을 선택합니다.
특정 Kafka 소비자 그룹에 대한 메트릭을 표시하려면 Kafka 소비자 그룹 드롭다운 목록에서 해당 소비자 그룹 이름을 선택합니다.
클러스터 상태 확인
클러스터 개요 섹션에서 복제된 파티션 위젯과 동기화된 복제 위젯을 찾습니다. 0이거나 값이 작은 것이 이상적입니다. 이들 메트릭 중 값이 큰 것이 있다면 조사가 필요한 Kafka 클러스터 문제가 있다는 의미일 수 있습니다.
브로커 성능 조사
브로커 섹션에서 실패한 가져오기 요청 위젯과 실패한 생산자 요청 위젯을 찾습니다. 이들 위젯에는 각각 가져오기 작업과 생성 작업에 실패한 요청 수가 표시됩니다. 실패율이 높다면 추가 조사가 필요한 브로커 또는 네트워크 연결 문제가 있다는 의미일 수 있습니다.
생산자 성능 모니터링
생산자 그룹 개요 섹션에서 평균 요청 속도 위젯, 평균 요청 지연 시간 위젯, 평균 레코드 전송/오류 속도 위젯을 찾습니다. 이들 위젯에서는 선택한 그룹의 생산자의 작업 수행 정도에 대한 개요를 볼 수 있습니다. 또한 드릴다운하여 생산자 섹션에서 특정 생산자 및 주제에 대한 메트릭을 볼 수 있습니다.
소비자 지연 모니터링
소비자 그룹 개요 섹션에서 소비자 지연 위젯을 찾습니다. 이 위젯에서는 소비자가 구독하는 파티션의 최신 오프셋에서 메시지를 처리하는 데 얼마나 오래 걸리고 있는지 보여줍니다. 소비자 지연은 0이거나 낮은 값일 때 이상적입니다. 소비자 지연 값이 높다는 것은 소비자가 데이터 생산 속도를 따라잡을 수 없어 데이터 손실 또는 처리 지연이 발생할 수 있다는 의미일 수 있습니다. 또한 드릴다운하여 소비자 섹션에서 특정 소비자 및 주제에 대한 메트릭을 볼 수 있습니다.
동일한 인스턴스에서 다양한 Kafka 역할에 대한 에이전트 구성
이 솔루션에 대한 CloudWatch 에이전트 구성에 나열된 개별 Kafka 역할에 대한 구성은 생산자, 소비자, 브로커 역할이 중복 없이 별도의 EC2 인스턴스에 배포되는 경우에만 적용됩니다. 동일한 Amazon EC2 인스턴스에서 다양한 Kafka 역할을 실행하는 경우 사용할 수 있는 옵션에는 두 가지가 있습니다.
해당 인스턴스에 배포된 모든 Kafka 역할에 대한 모든 메트릭을 목록으로 표시하고 구성하는 단일 에이전트 구성 파일을 생성합니다. Systems Manager를 사용하여 에이전트 구성을 관리하려는 경우 이 옵션을 사용하는 것이 좋습니다.
이 옵션을 선택하고 다양한 Kafka 역할이 동일한 JVM 프로세스의 일부인 경우 에이전트 구성의 개별 Kafka 역할에 대해 동일한 엔드포인트를 지정해야 합니다. 다양한 Kafka 역할이 서로 다른 JVM 프로세스의 일부인 경우 개별 역할의 엔드포인트는 해당 프로세스의 JMX 포트 세트에 따라 다를 수 있습니다.
개별 Kafka 역할에 별도의 에이전트 구성 파일을 생성하고 두 구성 파일을 모두 적용하도록 에이전트를 구성합니다. 여러 구성 파일 적용에 대한 지침은 여러 CloudWatch 에이전트 구성 파일을(를) 참조하세요.
다음 예제에서는 생산자 역할과 소비자 역할이 동일한 JVM 프로세스에 포함되어 하나의 인스턴스에서 실행되는 CloudWatch 에이전트 구성을 보여줍니다. 이 경우, 포트 번호는 아래 구성의 생산자 부분과 소비자 부분에서 모두 동일해야 합니다. 이와 달리 두 역할이 서로 다른 JVM 프로세스에 포함되어 실행 중이었다면 개별 JVM 프로세스 각각의 JMX 포트에 따라 각각의 역할에 서로 다른 포트 번호를 지정할 수 있습니다.
{ "metrics": { "namespace": "CWAgent", "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "jmx": [ { "endpoint": "localhost:
port-number
", "kafka-producer": { "measurement": [ "kafka.producer.request-rate", "kafka.producer.byte-rate", "kafka.producer.request-latency-avg", "kafka.producer.response-rate", "kafka.producer.record-error-rate", "kafka.producer.record-send-rate" ] }, "append_dimensions": { "ProducerGroupName": "ProducerGroupName
" } }, { "endpoint": "localhost:port-number
", "kafka-consumer": { "measurement": [ "kafka.consumer.fetch-rate", "kafka.consumer.total.bytes-consumed-rate", "kafka.consumer.records-consumed-rate", "kafka.consumer.bytes-consumed-rate", "kafka.consumer.records-lag-max" ] }, "append_dimensions": { "ConsumerGroupName": "ConsumerGroupName
" } } ] } } }