이 주제에서는 GKE on AWS 사용자 클러스터에서 Cloud Logging 및 Cloud Monitoring으로 로그와 측정항목을 내보내는 방법을 보여줍니다.
개요
GKE on AWS에는 여러 가지 로깅 및 모니터링 옵션이 있습니다. GKE Enterprise는 Cloud Logging 및 Cloud Monitoring과 통합될 수 있습니다. GKE Enterprise는 오픈소스 Kubernetes를 기반으로 하므로 여러 오픈소스 및 타사 도구가 호환됩니다.
로깅 및 모니터링 옵션
GKE Enterprise 클러스터에는 여러 로깅 및 모니터링 옵션이 있습니다.
Cloud Logging 및 Cloud Monitoring 에이전트를 배포하여 Google Cloud Console에서 워크로드의 로그를 모니터링하고 확인합니다. 이 주제에서는 이 솔루션을 설명합니다.
Prometheus, Grafana, Elasticsearch와 같은 오픈소스 도구를 사용합니다. 이 주제에서는 이 솔루션을 설명하지 않습니다.
Datadog과 같은 타사 솔루션을 사용하세요. 이 주제에서는 이 솔루션을 설명하지 않습니다.
Cloud Logging 및 Cloud Monitoring
GKE Enterprise, Cloud Logging, Cloud Monitoring을 사용하면 대시보드를 만들고, 알림을 전송하고, 모니터링하고, 클러스터에서 실행 중인 워크로드의 로그를 검토할 수 있습니다. Google Cloud 프로젝트에 로그 및 측정항목을 수집하려면 Cloud Logging 및 Cloud Monitoring 에이전트를 구성해야 합니다. 이러한 에이전트를 구성하지 않으면 GKE on AWS가 로깅 또는 모니터링 데이터를 수집하지 않습니다.
수집되는 데이터
구성되면 에이전트가 클러스터 및 클러스터에서 실행 중인 워크로드에서 로그 및 측정항목 데이터를 수집합니다. 이러한 데이터는 Google Cloud 프로젝트에 저장됩니다. 로그 전달자를 설치할 때 구성 파일의 project_id
필드에 프로젝트 ID를 구성합니다.
수집된 데이터에는 다음이 포함됩니다.
- 각 워커 노드의 시스템 서비스 로그
- 클러스터에서 실행되는 모든 워크로드의 애플리케이션 로그
- 클러스터 및 시스템 서비스의 측정항목입니다. 특정 측정항목에 대한 자세한 내용은 GKE Enterprise 측정항목을 참조하세요.
- 애플리케이션이 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 프로젝트 ID로 바꿉니다.
배스천 호스트에 연결
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
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 Console의 로그 탐색기로 이동합니다.
아래의 샘플 쿼리를 쿼리 빌더 필드에 복사합니다.
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 Console의 측정항목 탐색기로 이동합니다.
측정항목 탐색기에서 쿼리 편집기를 클릭한 후 다음 명령어를 복사합니다.
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 Console의 Cloud Monitoring 대시보드로 이동합니다.
CLUSTER_NAME (Anthos cluster on AWS) pod status
형식으로 이름을 지정하여 새로 만든 대시보드를 엽니다.
삭제
이 섹션에서는 클러스터에서 로깅 및 모니터링 구성요소를 삭제합니다.
대시보드 이름과 연결된 삭제 버튼을 클릭하여 Google Cloud Console의 대시보드 목록 뷰에서 모니터링 대시보드를 삭제하세요.
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 | N/A |
logging/forwarder.yaml |
stackdriver-log-forwarder | 60m | 100m | 100Mi | 600Mi |