Anthos clusters on AWS 로깅 및 모니터링

이 주제에서는 Anthos clusters on AWS 사용자 클러스터에서 Cloud Logging 및 Cloud Monitoring으로 로그와 측정항목을 내보내는 방법을 보여줍니다.

개요

Anthos clusters on AWS에서 로깅 및 모니터링을 하기 위한 여러가지 옵션이 있습니다. Anthos는 Cloud Logging 및 Cloud Monitoring과 통합될 수 있습니다. Anthos는 오픈소스 Kubernetes를 기반으로 하므로 여러 오픈소스 및 타사 도구는 호환됩니다.

로깅 및 모니터링 옵션

Anthos 클러스터에 대한 여러 로깅 및 모니터링 옵션이 있습니다.

  1. Cloud Logging 및 Cloud Monitoring 에이전트를 배포하여 Google Cloud Console에서 워크로드의 로그를 모니터링하고 확인합니다. 이 주제에서는 이 솔루션을 설명합니다.

  2. Prometheus, Grafana, Elasticsearch와 같은 오픈소스 도구를 사용합니다. 이 주제에서는 이 솔루션을 설명하지 않습니다.

  3. Datadog과 같은 타사 솔루션을 사용하세요. 이 주제에서는 이 솔루션을 설명하지 않습니다.

Cloud Logging 및 Cloud Monitoring

Anthos, Cloud Logging, Cloud Monitoring을 사용하면 대시보드를 만들고, 알림을 전송하고, 모니터링하고, 클러스터에서 실행 중인 워크로드의 로그를 검토할 수 있습니다. Google Cloud 프로젝트에 로그 및 측정항목을 수집하려면 Cloud Logging 및 Cloud Monitoring 에이전트를 구성해야 합니다. 이 에이전트를 구성하지 않으면 Anthos clusters on AWS가 로깅 또는 모니터링 데이터를 수집하지 않습니다.

수집되는 데이터

구성되면 에이전트가 클러스터 및 클러스터에서 실행 중인 워크로드에서 로그 및 측정항목 데이터를 수집합니다. 이러한 데이터는 Google Cloud 프로젝트에 저장됩니다. 로그 전달자를 설치할 때 구성 파일의 project_id 필드에 프로젝트 ID를 구성합니다.

수집된 데이터에는 다음이 포함됩니다.

  • 각 워커 노드의 시스템 서비스 로그
  • 클러스터에서 실행되는 모든 워크로드의 애플리케이션 로그
  • 클러스터 및 시스템 서비스의 측정항목입니다. 특정 측정항목에 대한 자세한 내용은 Anthos 측정항목을 참조하세요.
  • 애플리케이션이 Prometheus 스크레이핑 대상으로 구성되고 prometheus.io/scrape, prometheus.io/path, prometheus.io/port 등의 구성으로 주석 처리된 경우 포드의 애플리케이션 측정항목입니다.

에이전트는 언제든지 사용 중지할 수 있습니다. 자세한 내용은 삭제를 참조하세요. Cloud MonitoringCloud Logging 문서에 설명된 대로 에이전트가 수집한 데이터는 다른 측정항목 및 로그 데이터처럼 관리 및 삭제할 수 있습니다.

로그 데이터는 구성된 보관 규칙에 따라 저장됩니다. 측정항목 데이터 보관은 유형에 따라 다릅니다.

구성요소 로깅 및 모니터링

Anthos clusters on AWS에서 Google Cloud로 클러스터 수준 원격 분석 정보를 내보내려면 다음 구성요소를 클러스터에 배포합니다.

  • Stackdriver 로그 전달자(stackdriver-log-forwarder-*). 각 Kubernetes 노드의 로그를 Cloud Logging으로 전달하는 Fluentbit DaemonSet입니다.
  • GKE 측정항목 에이전트(gke-metrics-agent-*). 측정항목 데이터를 수집하여 Cloud Monitoring으로 전달하는 OpenTelemetry 수집기 기반 DaemonSet입니다.

이러한 구성요소의 매니페스트는 GitHub의 anthos-samples 저장소에 있습니다.

기본 요건

  1. 결제가 사용 설정된 Google Cloud 프로젝트. 비용에 대한 자세한 내용은 Google Cloud 운영 제품군 가격 책정을 참조하세요.

    프로젝트에 Cloud Logging 및 Cloud Monitoring API도 사용 설정되어 있어야 합니다. 이러한 API를 사용 설정하려면 다음 명령어를 실행하세요.

    gcloud services enable logging.googleapis.com
    gcloud services enable monitoring.googleapis.com
    
  2. Connect에 등록된 사용자 클러스터를 포함하는 Anthos clusters on AWS 환경입니다. 다음 명령어를 실행하여 클러스터가 등록되었는지 확인하세요.

    gcloud container fleet memberships list
    

    클러스터가 등록되면 Google Cloud CLI에서 클러스터 이름과 ID를 출력합니다.

    NAME       EXTERNAL_ID
    cluster-0  1abcdef-1234-4266-90ab-123456abcdef
    

    나열된 클러스터가 표시되지 않으면 Connect로 클러스터에 연결을 참조하세요.

  3. 머신에 git 명령줄 도구를 설치합니다.

Google Cloud 운영 제품군에 대한 권한 설정

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로 바꿉니다.

배스천 호스트에 연결

Anthos clusters on AWS 리소스에 연결하려면 다음 단계를 수행하세요. 기존 AWS VPC가 있거나 VPC에 직접 연결되어 있는지 또는 관리 서비스를 만들 때 전용 VPC를 만들었는지 선택합니다.

기존 VPC

기존 VPC에 직접 또는 VPN으로 연결된 경우 이 주제의 명령어에서 env HTTP_PROXY=http://localhost:8118 줄을 생략합니다.

전용 VPC

전용 VPC에서 관리 서비스를 만들면 AWS용 Anthos 클러스터 공개 서브넷에 배스천 호스트가 포함됩니다.

관리 서비스에 연결하려면 다음 단계를 수행하세요.

  1. AWS용 Anthos 클러스터 구성이 있는 디렉터리로 변경합니다. 이 디렉터리는 관리 서비스를 설치할 때 생성됩니다.

    cd anthos-aws

  2. bastion-tunnel.sh 스크립트를 실행하여 터널을 엽니다. 터널이 localhost:8118로 연결됩니다.

    배스천 호스트에 대한 터널을 열려면 다음 명령어를 실행합니다.

    ./bastion-tunnel.sh -N
    

    SSH 터널의 메시지가 이 창에 표시됩니다. 연결을 종료할 준비가 되면 Control+C를 사용하거나 창을 닫아 프로세스를 중지합니다.

  3. 새 터미널을 열고 anthos-aws 디렉터리로 변경합니다.

    cd anthos-aws
  4. kubectl을 사용하여 클러스터에 연결할 수 있는지 확인합니다.

    env HTTPS_PROXY=http://localhost:8118 \
    kubectl cluster-info
    

    출력에는 관리 서비스 API 서버의 URL이 포함됩니다.

제어 영역 노드의 Cloud Logging 및 Cloud Monitoring

Anthos clusters 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 로그 전달자를 클러스터에 설치합니다.

  1. anthos-samples/aws-logging-monitoring/ 디렉터리에서 logging/ 디렉터리로 변경합니다.

    cd logging/
    
  2. 프로젝트 구성에 맞게 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입니다.
  3. (선택사항) 워크로드, 클러스터의 노드 수, 노드당 포드 수에 따라 메모리 및 CPU 리소스 요청을 설정해야 할 수 있습니다. 자세한 내용은 권장 CPU 및 메모리 할당을 참조하세요.

  4. anthos-aws 디렉터리에서 anthos-gke를 사용하여 컨텍스트를 사용자 클러스터로 전환합니다.

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME을 사용자 클러스터 이름으로 바꿉니다.

  5. 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
    
  6. 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에 로그가 있는지 테스트합니다.

이 워크로드를 설치하기 전에 웹 서버부하 생성기의 매니페스트를 확인할 수 있습니다.

  1. 클러스터에 웹 서버 및 부하 생성기를 배포합니다.

    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
    
  2. Cloud Logging 대시보드에서 클러스터의 로그를 볼 수 있는지 확인하려면 Google Cloud Console의 로그 탐색기로 이동합니다.

    로그 탐색기로 이동

  3. 아래의 샘플 쿼리를 쿼리 빌더 필드에 복사합니다.

    resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

  4. 쿼리 실행을 클릭합니다. 쿼리 결과 아래에 최근 클러스터 로그가 표시됩니다.

    Google Cloud 운영 제품군의 클러스터 로그

  5. 쿼리 결과에 로그가 나타나는지 확인한 후 부하 생성기 및 웹 서버를 삭제합니다.

    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으로 데이터를 전송하는 에이전트를 설치합니다.

  1. anthos-samples/aws-logging-monitoring/logging/ 디렉터리에서 anthos-samples/aws-logging-monitoring/monitoring/ 디렉터리로 변경합니다.

    cd ../monitoring
    
  2. 프로젝트 구성에 맞게 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입니다.
  3. (선택사항) 워크로드, 클러스터의 노드 수, 노드당 포드 수에 따라 메모리 및 CPU 리소스 요청을 설정해야 할 수 있습니다. 자세한 내용은 권장 CPU 및 메모리 할당을 참조하세요.

  4. 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
    
  5. 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
    
  6. 클러스터 측정항목을 Cloud Monitoring으로 내보내고 있는지 확인하려면 Google Cloud Console의 측정항목 탐색기로 이동합니다.

    측정항목 탐색기로 이동

  7. 측정항목 탐색기에서 쿼리 편집기를 클릭한 후 다음 명령어를 복사합니다.

    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
    

    다음을 바꿉니다.

  8. 쿼리 실행을 클릭합니다. 클러스터의 각 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 대시보드를 만듭니다.

  1. anthos-samples/aws-logging-monitoring/monitoring/ 디렉터리에서 anthos-samples/aws-logging-monitoring/monitoring/dashboards 디렉터리로 변경합니다.

    cd dashboards
    
  2. pod-status.jsonCLUSTER_NAME 문자열 인스턴스를 클러스터 이름으로 바꿉니다.

    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

  3. 다음 명령어를 실행하여 구성 파일로 커스텀 대시보드를 만듭니다.

    gcloud monitoring dashboards create --config-from-file=pod-status.json
    
  4. 대시보드가 생성되었는지 확인하려면 Google Cloud Console의 Cloud Monitoring 대시보드로 이동합니다.

    대시보드로 이동

    CLUSTER_NAME (Anthos cluster on AWS) pod status 형식으로 이름을 지정하여 새로 만든 대시보드를 엽니다.

삭제

이 섹션에서는 클러스터에서 로깅 및 모니터링 구성요소를 삭제합니다.

  1. 대시보드 이름과 연결된 삭제 버튼을 클릭하여 Google Cloud Console의 대시보드 목록 뷰에서 모니터링 대시보드를 삭제하세요.

  2. anthos-samples/aws-logging-monitoring/ 디렉터리로 변경합니다.

    cd anthos-samples/aws-logging-monitoring
    
  3. 이 가이드에서 만든 모든 리소스를 삭제하려면 다음 명령어를 실행합니다.

    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

다음 단계

Cloud Logging 자세히 알아보기

Cloud Monitoring 자세히 알아보기