이 주제에서는 GKE on AWS 사용자 클러스터에서 Cloud Logging 및 Cloud Monitoring으로 로그와 측정항목을 내보내는 방법을 보여줍니다.
개요
GKE on AWS에는 여러 가지 로깅 및 모니터링 옵션이 있습니다. GKE는 Cloud Logging 및 Cloud Monitoring과 통합될 수 있습니다. GKE는 오픈소스 Kubernetes를 기반으로 하므로 여러 오픈소스 및 서드 파티 도구가 호환됩니다.
로깅 및 모니터링 옵션
AWS용 GKE 클러스터에는 여러 로깅 및 모니터링 옵션이 있습니다.
- Cloud Logging 및 Cloud Monitoring 에이전트를 배포하여 Google Cloud 콘솔에서 워크로드의 로그를 모니터링하고 확인합니다. 이 주제에서는 이 솔루션을 설명합니다. 
- Prometheus, Grafana, Elasticsearch와 같은 오픈소스 도구를 사용합니다. 이 주제에서는 이 솔루션을 설명하지 않습니다. 
- Datadog과 같은 타사 솔루션을 사용하세요. 이 주제에서는 이 솔루션을 설명하지 않습니다. 
Cloud Logging 및 Cloud Monitoring
Cloud Logging 및 Cloud Monitoring을 사용하면 대시보드를 만들고, 알림을 전송하고, 모니터링하고, 클러스터에서 실행 중인 워크로드의 로그를 검토할 수 있습니다. Google Cloud프로젝트에 로그 및 측정항목을 수집하려면 Cloud Logging 및 Cloud Monitoring 에이전트를 구성해야 합니다. 이러한 에이전트를 구성하지 않으면 GKE on AWS가 로깅 또는 모니터링 데이터를 수집하지 않습니다.
수집되는 데이터
구성되면 에이전트가 클러스터 및 클러스터에서 실행 중인 워크로드에서 로그 및 측정항목 데이터를 수집합니다. 이러한 데이터는Google Cloud 프로젝트에 저장됩니다.  로그 전달자를 설치할 때 구성 파일의 project_id 필드에 프로젝트 ID를 구성합니다.
수집된 데이터에는 다음이 포함됩니다.
- 각 워커 노드의 시스템 서비스 로그
- 클러스터에서 실행되는 모든 워크로드의 애플리케이션 로그
- 클러스터 및 시스템 서비스의 측정항목입니다. 특정 측정항목에 대한 자세한 내용은 Google Distributed Cloud 측정항목을 참고하세요.
- 애플리케이션이 Prometheus 스크레이핑 대상으로 구성되고 prometheus.io/scrape,prometheus.io/path,prometheus.io/port등의 구성으로 주석 처리된 경우 포드의 애플리케이션 측정항목입니다.
에이전트는 언제든지 사용 중지할 수 있습니다. 자세한 내용은 삭제를 참조하세요. Cloud Monitoring 및 Cloud Logging 문서에 설명된 대로 에이전트가 수집한 데이터는 다른 측정항목 및 로그 데이터처럼 관리 및 삭제할 수 있습니다.
로그 데이터는 구성된 보관 규칙에 따라 저장됩니다. 측정항목 데이터 보관은 유형에 따라 다릅니다.
구성요소 로깅 및 모니터링
GKE on AWS에서Google Cloud로 클러스터 수준 원격 분석 정보를 내보내려면 다음 구성요소를 클러스터에 배포합니다.
- Stackdriver 로그 전달자(stackdriver-log-forwarder-*). 각 Kubernetes 노드의 로그를 Cloud Logging으로 전달하는 Fluentbit DaemonSet입니다.
- GKE 측정항목 에이전트(gke-metrics-agent-*). 측정항목 데이터를 수집하여 Cloud Monitoring으로 전달하는 OpenTelemetry 수집기 기반 DaemonSet입니다.
이러한 구성요소의 매니페스트는 GitHub의 anthos-samples 저장소에 있습니다.
기본 요건
- 결제가 사용 설정된 Google Cloud 프로젝트가 있어야 합니다. 비용에 대한 자세한 내용은 Google Cloud Observability 가격을 참조하세요. - 프로젝트에 Cloud Logging 및 Cloud Monitoring API도 사용 설정되어 있어야 합니다. 이러한 API를 사용 설정하려면 다음 명령어를 실행하세요. - gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
- Connect에 등록된 사용자 클러스터를 포함하는 GKE on AWS 환경입니다. 다음 명령어를 실행하여 클러스터가 등록되었는지 확인하세요. - gcloud container fleet memberships list- 클러스터가 등록되면 Google Cloud CLI에서 클러스터 이름과 ID를 출력합니다. - NAME EXTERNAL_ID cluster-0 1abcdef-1234-4266-90ab-123456abcdef- 나열된 클러스터가 표시되지 않으면 Connect로 클러스터에 연결을 참조하세요. 
- 머신에 - git명령줄 도구를 설치합니다.
Google Cloud Observability에 대한 권한 설정
Logging 및 Monitoring 에이전트는 Fleet 워크로드 아이덴티티를 사용하여 Cloud Logging 및 Cloud Monitoring과 통신합니다. ID에는 프로젝트의 로그와 측정항목을 작성할 수 있는 권한이 필요합니다. 권한을 추가하려면 다음 명령어를 실행합니다.
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
  --role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
  --role=roles/monitoring.metricWriter
PROJECT_ID를 Google Cloud 프로젝트로 바꿉니다.
배스천 호스트에 연결
GKE on AWS 리소스에 연결하려면 다음 단계를 수행하세요. 기존 AWS VPC가 있거나 VPC에 직접 연결되어 있는지 또는 관리 서비스를 만들 때 전용 VPC를 만들었는지 선택합니다.
기존 VPC
기존 VPC에 직접 또는 VPN으로 연결된 경우 이 주제의 명령어에서 env HTTP_PROXY=http://localhost:8118 줄을 생략합니다.
전용 VPC
전용 VPC에서 관리 서비스를 만들면 GKE on AWS의 공개 서브넷에 배스천 호스트가 포함됩니다.
관리 서비스에 연결하려면 다음 단계를 수행하세요.
- GKE on AWS 구성이 있는 디렉터리로 변경합니다. 이 디렉터리는 관리 서비스를 설치할 때 생성됩니다. - cd anthos-aws 
- bastion-tunnel.sh스크립트를 실행하여 터널을 엽니다. 터널이- localhost:8118로 연결됩니다.- 배스천 호스트에 대한 터널을 열려면 다음 명령어를 실행합니다. - ./bastion-tunnel.sh -N- SSH 터널의 메시지가 이 창에 표시됩니다. 연결을 종료할 준비가 되면 Control+C를 사용하거나 창을 닫아 프로세스를 중지합니다. 
- 새 터미널을 열고 - anthos-aws디렉터리로 변경합니다.- cd anthos-aws 
- kubectl을 사용하여 클러스터에 연결할 수 있는지 확인합니다.- env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info- 출력에는 관리 서비스 API 서버의 URL이 포함됩니다. 
컨트롤 플레인 노드의 Cloud Logging 및 Cloud Monitoring
GKE on AWS 1.8.0 이상부터는 새 사용자 클러스터를 만들 때 컨트롤 플레인 노드에 Cloud Logging 및 Cloud Monitoring을 자동으로 구성할 수 있습니다. Cloud Logging 또는 Cloud Monitoring을 사용 설정하려면 AWSCluster 구성의 controlPlane.cloudOperations 섹션을 채웁니다.
cloudOperations:
  projectID: PROJECT_ID
  location: GC_REGION
  enableLogging: ENABLE_LOGGING
  enableMonitoring: ENABLE_MONITORING
다음을 바꿉니다.
- PROJECT_ID: 프로젝트 ID입니다.
- GC_REGION: 로그를 저장할 Google Cloud 리전입니다. AWS 리전과 가까운 리전을 선택합니다. 자세한 내용은 글로벌 위치 - 리전 및 영역을 참고하세요(예:- us-central1).
- ENABLE_LOGGING:- true또는- false(컨트롤 플레인 노드에서 Cloud Logging 사용 설정 여부)
- ENABLE_MONITORING:- true또는- false(컨트롤 플레인 노드에서 Cloud Monitoring 사용 설정 여부)
그런 다음 커스텀 사용자 클러스터 만들기의 단계를 따릅니다.
워커 노드의 Cloud Logging 및 Cloud Monitoring
이전 버전 삭제
stackdriver-log-aggregator(Fluentd) 및 stackdriver-prometheus-k8s(Prometheus)가 포함된 이전 버전의 로깅 및 모니터링 에이전트를 설정한 경우 계속 진행하기 전에 이러한 에이전트를 제거합니다.
로깅 전달자 설치
이 섹션에서는 Stackdriver 로그 전달자를 클러스터에 설치합니다.
- anthos-samples/aws-logging-monitoring/디렉터리에서- logging/디렉터리로 변경합니다.- cd logging/
- 프로젝트 구성에 맞게 - forwarder.yaml파일을 수정합니다.- sed -i "s/PROJECT_ID/PROJECT_ID/g" forwarder.yaml sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" forwarder.yaml sed -i "s/CLUSTER_LOCATION/GC_REGION/g" forwarder.yaml- 다음을 바꿉니다. - PROJECT_ID: 프로젝트 ID입니다.
- CLUSTER_NAME: 클러스터 이름입니다(예:- cluster-0).
- GC_REGION: 로그를 저장할 Google Cloud 리전입니다. AWS 리전과 가까운 리전을 선택합니다. 자세한 내용은 글로벌 위치 - 리전 및 영역을 참고하세요(예:- us-central1).
 
- (선택사항) 워크로드, 클러스터의 노드 수, 노드당 포드 수에 따라 메모리 및 CPU 리소스 요청을 설정해야 할 수 있습니다. 자세한 내용은 권장 CPU 및 메모리 할당을 참조하세요. 
- anthos-aws디렉터리에서- anthos-gke를 사용하여 컨텍스트를 사용자 클러스터로 전환합니다.- cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME 
- stackdriver서비스 계정이 없으면 이 계정을 만들고 로그 전달자를 클러스터에 배포합니다.- env HTTPS_PROXY=http://localhost:8118 \ kubectl create serviceaccount stackdriver -n kube-system env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f forwarder.yaml
- kubectl를 사용하여 포드가 시작되었는지 확인합니다.- env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -n kube-system | grep stackdriver-log- 노드 풀에는 노드당 전달자 포드가 1개 있어야 합니다. 예를 들어 6노드 클러스터에는 6개의 전달자 포드가 있어야 합니다. - stackdriver-log-forwarder-2vlxb 2/2 Running 0 21s stackdriver-log-forwarder-dwgb7 2/2 Running 0 21s stackdriver-log-forwarder-rfrdk 2/2 Running 0 21s stackdriver-log-forwarder-sqz7b 2/2 Running 0 21s stackdriver-log-forwarder-w4dhn 2/2 Running 0 21s stackdriver-log-forwarder-wrfg4 2/2 Running 0 21s
로그 전달 테스트
이 섹션에서는 부하 생성기가 있는 기본 HTTP 웹 서버가 포함된 워크로드를 클러스터에 배포합니다. 그런 다음 Cloud Logging에 로그가 있는지 테스트합니다.
이 워크로드를 설치하기 전에 웹 서버 및 부하 생성기의 매니페스트를 확인할 수 있습니다.
- 클러스터에 웹 서버 및 부하 생성기를 배포합니다. - env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
- Cloud Logging 대시보드에서 클러스터의 로그를 볼 수 있는지 확인하려면 Google Cloud 콘솔의 로그 탐색기로 이동합니다. 
- 아래의 샘플 쿼리를 쿼리 빌더 필드에 복사합니다. - resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"- CLUSTER_NAME을 클러스터 이름으로 바꿉니다. 
- 쿼리 실행을 클릭합니다. 쿼리 결과 아래에 최근 클러스터 로그가 표시됩니다.  
- 쿼리 결과에 로그가 나타나는지 확인한 후 부하 생성기 및 웹 서버를 삭제합니다. - env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
측정항목 수집기 설치
이 섹션에서는 Cloud Monitoring으로 데이터를 전송하는 에이전트를 설치합니다.
- anthos-samples/aws-logging-monitoring/logging/디렉터리에서- anthos-samples/aws-logging-monitoring/monitoring/디렉터리로 변경합니다.- cd ../monitoring
- 프로젝트 구성에 맞게 - gke-metrics-agent.yaml파일을 수정합니다.- sed -i "s/PROJECT_ID/PROJECT_ID/g" gke-metrics-agent.yaml sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" gke-metrics-agent.yaml sed -i "s/CLUSTER_LOCATION/GC_REGION/g" gke-metrics-agent.yaml- 다음을 바꿉니다. - PROJECT_ID: 프로젝트 ID입니다.
- CLUSTER_NAME: 클러스터 이름입니다(예:- cluster-0).
- GC_REGION: 로그를 저장할 Google Cloud 리전입니다. AWS 리전과 가까운 리전을 선택합니다. 자세한 내용은 글로벌 위치 - 리전 및 영역을 참고하세요(예:- us-central1).
 
- (선택사항) 워크로드, 클러스터의 노드 수, 노드당 포드 수에 따라 메모리 및 CPU 리소스 요청을 설정해야 할 수 있습니다. 자세한 내용은 권장 CPU 및 메모리 할당을 참조하세요. 
- stackdriver서비스 계정이 없는 경우 계정을 만들고 클러스터에 측정항목 에이전트를 배포합니다.- env HTTPS_PROXY=http://localhost:8118 \ kubectl create serviceaccount stackdriver -n kube-system env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f gke-metrics-agent.yaml
- kubectl도구를 사용하여- gke-metrics-agent포드가 실행 중인지 확인합니다.- env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -n kube-system | grep gke-metrics-agent- 노드 풀에는 노드당 하나의 에이전트 포드가 있어야 합니다. 예를 들어 3노드 클러스터에는 3개의 에이전트 포드가 있어야 합니다. - gke-metrics-agent-gjxdj 2/2 Running 0 102s gke-metrics-agent-lrnzl 2/2 Running 0 102s gke-metrics-agent-s6p47 2/2 Running 0 102s 
- 클러스터 측정항목을 Cloud Monitoring으로 내보내고 있는지 확인하려면 Google Cloud 콘솔의 측정항목 탐색기로 이동합니다. 
- 측정항목 탐색기에서 쿼리 편집기를 클릭한 후 다음 명령어를 복사합니다. - fetch k8s_container | metric 'kubernetes.io/anthos/otelcol_exporter_sent_metric_points' | filter resource.project_id == 'PROJECT_ID' && (resource.cluster_name =='CLUSTER_NAME') | align rate(1m) | every 1m- 다음을 바꿉니다. - PROJECT_ID: 프로젝트 ID입니다.
- CLUSTER_NAME: 사용자 클러스터를 생성할 때 사용한 클러스터 이름입니다(예:- cluster-0).
 
- 쿼리 실행을 클릭합니다. 클러스터의 각 - gke-metrics-agent포드에서 Cloud Monitoring으로 전송된 측정항목 포인트의 비율이 표시됩니다. - 시도해 볼 만한 측정항목에는 다음과 같은 것들이 있으며 이에 국한되는 것은 아닙니다. - kubernetes.io/anthos/container_memory_working_set_bytes: 컨테이너 메모리 사용량입니다.
- kubernetes.io/anthos/container_cpu_usage_seconds_total: 컨테이너 CPU 사용량입니다.
- kubernetes.io/anthos/apiserver_aggregated_request_total: kube-apiserver 요청 수입니다. 컨트롤 플레인에서 Cloud Monitoring이 사용 설정된 경우에만 사용할 수 있습니다.
 - 사용 가능한 전체 측정항목 목록은 Anthos 측정항목을 참조하세요. 사용자 인터페이스 사용 방법에 대한 자세한 내용은 측정항목 탐색기를 참조하세요. 
Cloud Monitoring에서 대시보드 만들기
이 섹션에서는 클러스터의 컨테이너 상태를 모니터링하는 Cloud Monitoring 대시보드를 만듭니다.
- anthos-samples/aws-logging-monitoring/monitoring/디렉터리에서- anthos-samples/aws-logging-monitoring/monitoring/dashboards디렉터리로 변경합니다.- cd dashboards
- pod-status.json의- CLUSTER_NAME문자열 인스턴스를 클러스터 이름으로 바꿉니다.- sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json- CLUSTER_NAME을 클러스터 이름으로 바꿉니다.
- 다음 명령어를 실행하여 구성 파일로 커스텀 대시보드를 만듭니다. - gcloud monitoring dashboards create --config-from-file=pod-status.json
- 대시보드가 생성되었는지 확인하려면 Google Cloud 콘솔의 Cloud Monitoring 대시보드로 이동합니다. - CLUSTER_NAME (Anthos cluster on AWS) pod status형식으로 이름을 지정하여 새로 만든 대시보드를 엽니다.
삭제
이 섹션에서는 클러스터에서 로깅 및 모니터링 구성요소를 삭제합니다.
- 대시보드 이름과 연결된 삭제 버튼을 클릭하여Google Cloud 콘솔의 대시보드 목록 보기에서 모니터링 대시보드를 삭제합니다. 
- anthos-samples/aws-logging-monitoring/디렉터리로 변경합니다.- cd anthos-samples/aws-logging-monitoring
- 이 가이드에서 만든 모든 리소스를 삭제하려면 다음 명령어를 실행합니다. - env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f logging/ env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f monitoring/
권장 CPU 및 메모리 할당
이 섹션에는 로깅 및 모니터링에 사용되는 개별 구성요소에 대해 권장되는 CPU 및 할당이 포함되어 있습니다. 다음 각 표에는 노드 크기의 범위 내의 클러스터에 대한 CPU 및 메모리 요청이 나와 있습니다. 테이블에 나열된 파일에서 구성요소에 대한 리소스 요청을 설정합니다.
자세한 내용은 Kubernetes 권장사항: 리소스 요청 및 한도 및 컨테이너의 리소스 관리를 참조하세요.
노드 1-10개
| 파일 | 리소스 | CPU 요청 | CPU 한도 | 메모리 요청 | 메모리 한도 | 
|---|---|---|---|---|---|
| monitoring/gke-metrics-agent.yaml | gke-metrics-agent | 30m | 100m | 50Mi | 500Mi | 
| logging/forwarder.yaml | stackdriver-log-forwarder | 50m | 100m | 100Mi | 600Mi | 
노드 10-100개
| 파일 | 리소스 | CPU 요청 | CPU 한도 | 메모리 요청 | 메모리 한도 | 
|---|---|---|---|---|---|
| monitoring/gke-metrics-agent.yaml | gke-metrics-agent | 50m | 100m | 50Mi | 500Mi | 
| logging/forwarder.yaml | stackdriver-log-forwarder | 60m | 100m | 100Mi | 600Mi | 
노드 100개 이상
| 파일 | 리소스 | CPU 요청 | CPU 한도 | 메모리 요청 | 메모리 한도 | 
|---|---|---|---|---|---|
| monitoring/gke-metrics-agent.yaml | gke-metrics-agent | 50m | 100m | 100Mi | 해당 사항 없음 | 
| logging/forwarder.yaml | stackdriver-log-forwarder | 60m | 100m | 100Mi | 600Mi |