애플리케이션 모니터링을 위한 패킷 모니터링 자동 실행

이 가이드에서는 Virtual Private Cloud(VPC) 네트워크에서 트래픽 흐름을 모니터링하고 문제를 해결할 수 있도록 Cloud Logging, Pub/Sub, Cloud Functions를 사용하여 패킷 미러링을 자동으로 사용 설정하는 방법을 보여줍니다. 이 가이드는 네트워크, 보안, DevOps팀을 대상으로 합니다. 여기에서는 사용자가 Cloud Logging, Pub/Sub, Cloud Functions, 패킷 미러링, Compute Engine, Terraform에 익숙하다고 가정합니다.

소개

패킷 미러링은 VPC 트래픽 흐름을 실시간으로 모니터링할 수 있는 기능입니다. 패킷 미러링을 사용하여 DevOps팀은 성능 저하 또는 오류 메시지를 생성하는 트래픽 문제를 해결하거나 보안에 민감한 기업은 악의적일 수 있는 트래픽 패턴을 관찰하고 대응할 수 있습니다. 조직에서는 위협을 감지하고 완화하는 데 도움이 되도록 패킷 미러링을 침입 감지 시스템(IDS)과 함께 사용하는 경우가 많습니다.

패킷 미러링은 모든 인그레스 및 이그레스 트래픽과 패킷 데이터(예: 페이로드 및 헤더)를 캡처한 다음 트래픽을 내보내서 네트워크 시각화를 완벽하게 제공합니다. 미러링된 트래픽을 대역 외 보안 및 모니터링 어플라이언스로 전송하여 위협을 감지하고 네트워크 성능을 모니터링하고 애플리케이션 문제를 해결할 수 있습니다.

서브넷 수준, 네트워크 태그, 특정 VPC 인스턴스에서 패킷 미러링을 사용 설정할 수 있습니다. 연속 패킷 미러링을 실행하거나 사전 정의된 트리거를 기반으로 패킷 미러링을 사용 설정 또는 사용 중지할 수 있습니다.

이 가이드에서는 다음 다이어그램에서 아키텍처를 구성합니다.

인터넷 트래픽은 전역 부하 분산기를 통해 패킷 미러링 VPC로 라우팅됩니다.

이 아키텍처에는 다음과 같은 워크플로가 있습니다.

  1. 잘못된 요청이 부하 분산기로 전송되어 웹 서버에서 HTTP 500 Internal Server Error 상태 코드가 트리거됩니다.
  2. Cloud Monitoring은 이벤트를 생성하고 Cloud Logging은 오류 메시지를 로깅합니다.
  3. Cloud Monitoring에서 싱크로 구성된 Pub/Sub는 오류 메시지를 수신합니다.
  4. Cloud Monitoring은 이벤트를 Pub/Sub로 푸시하여 패킷 미러링을 사용 설정하도록 클라우드 기능을 트리거합니다.
  5. 패킷 미러링이 사용 설정되었으며 트래픽이 수집기 VM으로 미러링되어 적절한 담당자 또는 팀이 오류 메시지를 추가로 조사할 수 있습니다. 이 가이드에서는 tcpdump 유틸리티를 사용하여 캡처된 패킷을 확인합니다.

이 가이드를 완료하려면 HashiCorp의 Terraform을 사용하여 VPC, 서브넷, 전역 부하 분산기, 웹 서버, 수집기 VM을 만듭니다. 그런 다음 미러링된 트래픽을 수신하도록 패킷 미러링 정책 및 관련 수집기 VM을 수동으로 구성합니다. 마지막으로 Cloud Logging, Cloud Functions, Pub/Sub를 구성하여 패킷 미러링을 트리거합니다.

이 가이드에서는 오류 메시지 코드(HTTP 500)를 사용하여 이벤트를 트리거할 때 가능한 작업을 보여 주지만 다른 사용 사례 및 환경에 맞게 이 솔루션을 맞춤설정할 수 있습니다. 예를 들어 패턴(예: 특정 정규식 패턴) 또는 애플리케이션 측정항목(예: CPU 및 메모리 사용량)을 확인할 수 있도록 로깅을 트리거할 수 있습니다.

Cloud Monitoring 및 Cloud Logging을 구성하는 방법에 대한 자세한 내용은 Cloud LoggingCloud Monitoring 문서를 참조하세요.

목표

  • Terraform을 사용하여 기본 환경을 배포합니다.
  • 패킷 미러링 인프라를 구성합니다.
  • 애플리케이션 오류 메시지를 트리거합니다.
  • 패킷 미러링이 사용 설정되었는지 확인합니다.
  • 수집기 Compute Engine 인스턴스에 패킷 캡처를 표시합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 가이드를 마치면 만든 리소스를 삭제하여 비용이 계속 청구되지 않게 할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Cloud Console에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    이 가이드의 작업 대부분은 Terraform 및 Cloud SDK를 사용하여 Cloud Shell 터미널에서 완료합니다.

  2. Cloud Shell에서 로컬 작업 디렉터리를 변경하고 GitHub 저장소를 클론합니다.

    cd $HOME
    git clone https://github.com/GoogleCloudPlatform/terraform-gce-packetmirror.git packetMirror
    

    저장소에는 이 가이드를 완료하는 데 필요한 모든 파일이 있습니다. 각 파일에 대한 자세한 설명은 저장소의 README.md 파일을 참조하세요.

  3. 모든 셸 스크립트를 실행 가능하게 만듭니다.

    cd $HOME/packetMirror
    sudo chmod 755 *.sh
    
  4. 이 가이드에서 사용하는 사용자 계정에 가이드를 완료하는 데 필요한 ID 및 액세스 관리(IAM) 권한이 있는지 확인합니다.

환경 준비

이 섹션에서는 환경 변수를 설정하고 지원 인프라를 배포합니다.

Terraform 설정

  1. HashiCorp 문서의 단계를 따라 Terraform을 설치합니다.
  2. Cloud Shell에서 Terraform을 초기화합니다.

    terraform init
    

    출력은 다음과 비슷합니다.

    ...
    Initializing provider plugins...
    The following providers do not have any version constraints in configuration, so the latest version was installed.
    ...
    Terraform has been successfully initialized!
    ...
    

환경 변수 설정

  1. Google Cloud 사용자 계정이 Google Cloud 조직의 일부인 경우 Cloud Shell에서 다음 명령어를 실행합니다.

    1. TF_VAR_org_id 변수를 Google Cloud 조직의 이름으로 설정합니다.

      export TF_VAR_org_id=$(gcloud organizations list \
          --format="value(ID)" \
          --filter="DISPLAY_NAME:YOUR_ORGANIZATION_NAME")
      

      YOUR_ORGANIZATION_NAME을 이 가이드에서 사용할 Google Cloud 조직 이름으로 바꿉니다.

    2. Terraform 변수 org_id를 프로젝트 리소스에 추가합니다.

      sed -i "s/#org_id          = var.org_id/org_id          = var.org_id/" main.tf
      
    3. 환경 변수를 올바르게 설정했는지 확인합니다.

      echo $TF_VAR_org_id
      

      결과에는 다음과 같이 숫자로 된 조직 ID가 나열됩니다.

      ...
      123123123123
      ...
      
  2. 결제 계정 이름을 설정합니다.

    1. 활성 결제 계정을 나열합니다.

      gcloud beta billing accounts list
      

      가이드에 사용할 결제 계정 이름의 이름을 복사합니다. 다음 단계에서 이 이름이 필요합니다.

    2. 결제 계정 환경 변수를 설정합니다.

      TF_VAR_billing_name="YOUR_BILLING_ACCOUNT_NAME"
      export TF_VAR_billing_name
      

      YOUR_BILLING_ACCOUNT_NAME을 이전 단계에서 복사한 결제 계정 이름으로 바꿉니다.

  3. 나머지 환경 변수를 설정합니다.

    source $HOME/packetMirror/set_variables.sh
    
  4. 환경 변수를 올바르게 설정했는지 확인합니다.

    env | grep TF_
    

    출력은 다음과 비슷합니다.

    ...
    TF_VAR_billing_account=YOUR_BILLING_ACCOUNT_NAME
    TF_VAR_org_id=YOUR_ORGANIZATION_NAME
    TF_VAR_region=YOUR_REGION
    TF_VAR_user_account=YOUR_USER_ACCOUNT
    TF_VAR_pid=YOUR_PROJECT_ID
    TF_VAR_zone=YOUR_ZONE
    ...
    

    이 출력에서 각 항목의 의미는 다음과 같습니다.

    • YOUR_REGION: Google Cloud 프로젝트의 리전입니다(예: us-west1).
    • YOUR_USER_ACCOUNT: 계정 ID입니다.(예: user@example)
    • YOUR_PROJECT_ID: 클라우드 프로젝트 ID입니다.
    • YOUR_ZONE: 클라우드 프로젝트의 영역입니다(예: us-west1-b).
  5. TF_VAR_billing_account 변수가 올바르게 설정되지 않은 경우 Cloud Console에서 결제 계정 관리 페이지의 결제 계정 개요 페이지로 이동하여 결제 계정 ID 번호를 복사한 후 다음 환경 변수를 설정합니다.

    export TF_VAR_billing_account=BILLING_ACCOUNT_ID
    

    BILLING_ACCOUNT_ID를 이 단계의 이전 단계에서 복사한 계정 ID 번호로 바꿉니다.

  6. 환경 변수 파일을 만듭니다.

    $HOME/packetMirror/saveVars.sh
    

    이 명령어는 개발자가 만든 환경 변수를 TF_ENV_VARS 파일로 리디렉션합니다. 각 변수 앞에 export 명령어가 추가됩니다. Cloud Shell 세션이 종료된 경우 이 파일을 사용하여 변수를 재설정할 수 있습니다. 이러한 변수는 Terraform 스크립트, Cloud Shell 스크립트, gcloud 명령줄 도구에서 사용됩니다.

    나중에 변수를 다시 초기화해야 할 경우 다음 명령어를 실행할 수 있습니다.

    source $HOME/packetMirror/TF_ENV_VARS
    

기본 인프라 배포

  1. Cloud Shell에서 Terraform 지원 인프라를 배포합니다.

    cd $HOME/packetMirror
    terraform apply
    
  2. 메시지가 표시되면 yes를 입력하여 두 구성 중 하나를 적용합니다.

    terraform apply 명령어는 Terraform에 프로젝트, 네트워크, 서브네트워크, 전역 부하 분산기, 웹 서버를 배포하도록 지시합니다. 선언을 통한 인프라 정의 방식을 이해하려면 Terraform 매니페스트(.tf 확장자가 있는 파일)를 참조하세요.

    Terraform에서 구성요소를 배포하는 데 몇 분 정도 걸릴 수 있습니다. 다음과 같은 객체가 생성됩니다.

    • VPC
    • 방화벽 규칙
    • 서브넷
    • 웹 서버용 인스턴스 템플릿
    • 웹 서버용 관리형 인스턴스 그룹
    • 수집기 VM의 비관리형 인스턴스 그룹
    • Cloud NAT
    • 전역 부하 분산기 및 관련 상태 확인

    Cloud Console을 통해 또는 gcloud 명령어를 사용하여 프로젝트를 탐색하여 이러한 항목을 볼 수 있습니다.

패킷 미러링 리소스 만들기

다음 단계에서는 패킷 미러링 인프라를 만들고 확인합니다.

수집기 내부 부하 분산 리소스 만들기

  • Cloud Shell에서 백엔드 서비스 및 전달 규칙을 만듭니다.

    gcloud compute backend-services create collector-ilb \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --health-checks=http-basic-check
    
    gcloud compute backend-services add-backend collector-ilb \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --instance-group=collector-ig \
        --instance-group-zone="$TF_VAR_zone"
    
    gcloud compute forwarding-rules create fr-ilb-packet-mirroring \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --load-balancing-scheme=internal \
        --network=packet-mirror-vpc \
        --subnet=collectors \
        --ip-protocol=TCP \
        --ports=all \
        --backend-service=collector-ilb \
        --backend-service-region="$TF_VAR_region" \
        --is-mirroring-collector
    

    출력은 다음과 비슷합니다.

    ...
    Created [https://www.googleapis.com/compute/v1/projects/pm-pid-1357261223/regions/us-west1/backendServices/collector-ilb].
    NAME           BACKENDS  PROTOCOL
    collector-ilb            TCP
    ...
    Updated [https://www.googleapis.com/compute/v1/projects/pm-pid-1357261223/regions/us-west1/backendServices/collector-ilb].
    ...
    Created [https://www.googleapis.com/compute/projects/pm-pid-1357261223/regions/us-west1/forwardingRules/fr-ilb-packet-mirroring].
    ...
    

패킷 미러링 정책 만들기 및 사용 중지

  1. Cloud Shell에서 패킷 미러링 정책을 만들고 사용 중지합니다.

    gcloud compute packet-mirrorings create pm-mirror-subnet1 \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --network=packet-mirror-vpc \
        --collector-ilb=fr-ilb-packet-mirroring \
        --mirrored-subnets=webservers \
        --no-enable
    
    gcloud compute packet-mirrorings describe pm-mirror-subnet1 \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region"
    

    출력은 다음과 비슷합니다.

    ...
    Created [https://www.googleapis.com/compute/projects/pm-pid-1357261223/regions/us-west1/packetMirrorings/pm-mirror-subnet1].
    ...
    collectorIlb:
    ...
    enable: 'FALSE'
    ...
    

    패킷 미러링 정책은 기본적으로 사용 설정됩니다. 이 단계에서는 Cloud Logging이 문제를 감지할 때까지 패킷 미러링을 사용 중지하려고 하므로 정책을 사용 중지합니다.

패킷 미러링을 트리거하는 자동화 만들기

  1. Cloud Shell에서 Cloud Logging 싱크에 사용할 Pub/Sub 주제를 만듭니다.

    gcloud pubsub topics create stackdriver_logging \
        --project="$TF_VAR_pid"
    

    출력은 다음과 비슷합니다.

    ...
    Created topic [projects/pm-pid-1357261223/topics/stackdriver_logging].
    ...
    
  2. Cloud Logging 싱크를 만듭니다.

    gcloud logging sinks create stackdriver_logging pubsub.googleapis.com/projects/"$TF_VAR_pid"/topics/stackdriver_logging \
        --log-filter='resource.type="http_load_balancer" \
            AND http_request.status>=500' \
        --project=$TF_VAR_pid
    

    Cloud Logging 싱크는 500 범위(예: 500, 501, 502)에서 전역 HTTP 상태 코드를 필터링하고 이벤트를 Pub/Sub 주제로 전송합니다.

    출력은 다음과 비슷합니다.

    Created [https://logging.googleapis.com/v2/projects/pm-pid-1357261223/sinks/stackdriver_logging].
    Please remember to grant `serviceAccount:p422429379846-984011@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
    More information about sinks can be found at https://cloud.oogle.com/logging/docs/export/configure_export
    

    출력에서 serviceAccount 값을 복사합니다. 다음 단계에서 이 값이 필요합니다.

  3. 서비스 계정에 Pub/Sub 게시자 IAM 역할(roles/pubsub.publisher)을 부여합니다.

    gcloud pubsub topics add-iam-policy-binding stackdriver_logging \
        --project="$TF_VAR_pid" \
        --member serviceAccount:UPDATE_ACCOUNT \
        --role roles/pubsub.publisher
    

    UPDATE_ACCOUNT를 이전 단계의 serviceAccount 값으로 바꿉니다.

    출력은 다음과 비슷합니다.

    ...
    Updated IAM policy for topic [stackdriver_logging].
    bindings:
    - members:
      - serviceAccount:UPDATE_ACCOUNT
      role: roles/pubsub.publisher
    etag: notuCRmpoyI=
    version: 1
    ...
    
  4. main.py 파일을 업데이트합니다.

    net_id="$(gcloud compute networks describe packet-mirror-vpc --project="$TF_VAR_pid" --format='value(id)')"
    sed -i "s/PROJECT-ID/"$TF_VAR_pid"/g" main.py
    sed -i "s/REGION/"$TF_VAR_region"/g" main.py
    sed -i "s/NETWORK-ID/"$net_id"/g" main.py
    

    저장소의 main.py 파일에는 Cloud 함수를 만드는 데 사용할 packet_mirror_pubsub 함수가 포함되어 있습니다. Cloud 함수를 만들기 전에 위의 명령어는 Python 파일의 Google Cloud 프로젝트 ID, 리전, 네트워크 정보를 업데이트합니다.

  5. Cloud 함수를 만듭니다.

    gcloud functions deploy packet_mirror_pubsub \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --runtime python37 \
        --trigger-topic stackdriver_logging
    

    다음 경고가 표시되면 N을 입력합니다.

    Allow unauthenticated invocations of new function
    [packet_mirror_pubsub]? (y/N)?
    

    출력은 다음과 비슷합니다.

    ...
    availableMemoryMb: 256
    entryPoint: packet_mirror_pubsub
    eventTrigger:
      eventType: google.pubsub.topic.publish
      failurePolicy: {}
      resource: projects/pm-pid--1517226903/topics/stackdriver_logging
      service: pubsub.googleapis.com
    ingressSettings: ALLOW_ALL
    labels:
      deployment-tool: cli-gcloud
    name: projects/pm-pid--1517226903/locations/europe-west1/functions/packet_mirror_pubsub
    runtime: python37
    serviceAccountEmail: pm-pid--1517226903@appspot.gserviceaccount.com
    ...
    status: ACTIVE
    ...
    

    Cloud 함수 배포를 완료하는 데 몇 분 정도 걸릴 수 있습니다.

  6. 오류가 발생하면 다음을 수행합니다.

    • Cloud Build API를 사용 설정하는 방법에 대한 오류가 발생하면 API를 사용 설정합니다.

      gcloud services enable cloudbuild.googleapis.com
      

      5단계를 다시 시도합니다.

    • Cloud Storage 액세스에 대한 오류 메시지가 나타나면 5단계를 다시 시도합니다. 이 오류는 명령어를 연속적으로 빠르게 실행할 때 발생할 수 있습니다.

솔루션 확인

다음 단계에서는 솔루션을 트리거하고 확인합니다.

  1. Cloud Shell에서 새 Pub/Sub 구독을 확인합니다.

    gcloud pubsub subscriptions list --project="$TF_VAR_pid"
    

    출력은 다음과 비슷합니다.

    ...
    ---
    ackDeadlineSeconds: 600
    expirationPolicy: {}
    messageRetentionDuration: 604800s
    name: projects/pm-pid--1517226903/subscriptions/gcf-packet_mirror_pubsub-europe-west1-stackdriver_logging
    pushConfig:
      attributes:
        x-goog-version: v1
      pushEndpoint: https://e147a3acbd9a5314f553d1710671be9c-dot-efdbf9529ce1147d5p-tp.appspot.com/_ah/push-handlers/pubsub/projects/pm-pid--1517226903/topics/stackdriver_logging?pubsub_trigger=true
    topic: projects/pm-pid--1517226903/topics/stackdriver_logging
    ...
    
  2. 수집기 VM에 로그인합니다.

    gcloud compute ssh collector \
        --tunnel-through-iap \
        --project="$TF_VAR_pid" \
        --zone="$TF_VAR_zone"
    
  3. 수집기 VM에 로그인한 후 tcpdump 유틸리티를 설치하고 사용 설정합니다.

    sudo apt-get install tcpdump -y
    sudo tcpdump -n not net 172.16.21.0/24
    

    출력은 다음과 비슷합니다.

    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    이 Cloud Shell 세션을 열어 둡니다.

  4. 새 Cloud Shell 터미널 창을 연 다음 HTTP 500 오류를 생성하여 Cloud 함수를 트리거합니다.

    cd $HOME/packetMirror
    source TF_ENV_VARS
    lb_ip=$(gcloud compute forwarding-rules describe packet-mirror-gfr --project=$TF_VAR_pid --global --format="value(IPAddress)")
    curl http://"$lb_ip"/error500
    

    출력은 다음과 비슷합니다.

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>500 Internal Server Error</title>
    </head><body>
    <h1>Internal Server Error</h1>
    <p>The server encountered an internal error or
    misconfiguration and was unable to complete
    your request.</p>
    <p>Please contact the server administrator at
     webmaster@localhost to inform them of the time this error occurred,
     and the actions you performed just before this error.</p>
    <p>More information about this error may be available
    in the server error log.</p>
    <hr>
    <address>Apache/2.4.25 (Debian) Server at 35.241.40.217 Port 80</address>
    
  5. 수집기 VM의 Cloud Shell 세션으로 돌아가서 tcpdump 명령어의 출력을 관찰합니다. 수집기 VM은 웹 서버 인스턴스의 상태 확인 프로브인 트래픽을 수신하고 있습니다.

    출력은 다음과 비슷합니다.

    ...
    07:33:41.131992 IP 130.211.2.146.53702 > 172.16.20.2.80: Flags [S], seq 4226031116, win 65535, options [mss 1420,sackOK,TS val 2961711820 ecr 0,nop,wscale 8], length 0
    07:33:41.132149 IP 130.211.2.146.53702 > 172.16.20.2.80: Flags [.], ack 3978158577, win 256, options [nop,nop,TS val 2961711821 ecr 4348156], length 0
    ...
    
  6. tcpdump 명령어의 출력을 중지하려면 Control+C를 누릅니다.

  7. 수집기 VM을 종료하려면 exit를 입력합니다.

  8. Cloud Shell에서 로그를 확인하여 Cloud 함수가 실행되었는지 확인합니다.

    gcloud functions logs read \
        --limit 50 \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region"
    

    출력은 다음과 비슷합니다.

    LEVEL  NAME                  EXECUTION_ID     TIME_UTC                 LOG
    D      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:39.206  Function execution started
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:39.222  HTTP 500 Error Detected in: {"httpRequest":{"remoteIp":"136.27.39.107","requestMethod":"GET","requestSize":"85","requestUrl":"http://35.241.40.217/error500","responseSize":"801","serverIp":"172.16.20.2","status":500,"userAgent":"curl/7.52.1"},"insertId":"nb4g1sfdrpm04","jsonPayload":{"@type":"type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry","enforcedSecurityPolicy":{"configuredAction":"ACCEPT","name":"policy","outcome":"ACCEPT","priority":2147483647},"statusDetails":"response_sent_by_backend"},".............
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:39.222  Activating Packet Mirroring For Analysis
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:39.329  ya29.c.KqUBvwfoZ5z88EmHKPXkgd1Gwqwwca88wWsyqjxrEFdhK8HjJDwmBWBIX_DAnC4wOO5W2B6EOQArgHQ03AIVwFnQMawXrB2tLGIkBYFuP3Go5Fylo6zZAvgtXF3LvrXiarwaASkfAM73lXfQiT20PYn4ML4E2Kli9WmhZDu6AdAe1aH-FK2MEoca84zgG65tirRGe04EJGY_hYHejlG_xrRWeaojVlc3
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:40.100  {
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:40.100    "id": "1924200601229605180",
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:40.100    "name": "operation-1582270419413-59f110a49a878-b68f2d26-c8f66a7b",
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:40.100    "operationType": "patch",
    I      packet_mirror_pubsub  999875368753102  2020-02-21 07:33:40.100    …..
     Function execution took 900 ms, finished with status: 'ok'
    

    로그는 웹 서버 인스턴스에서 생성된 HTTP 500 오류 코드를 기반으로 패킷 미러링이 트리거되었음을 보여줍니다.

  9. 패킷 미러링 기능 상태를 확인합니다.

    gcloud compute packet-mirrorings describe pm-mirror-subnet1 \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region"
    

    출력은 다음과 비슷합니다.

    ...
    collectorIlb:
    ...
    enable: 'TRUE'
    ...
    

정리

이 가이드에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

인프라 삭제

  1. Cloud Shell에서 자동화 리소스를 삭제합니다.

    gcloud functions delete packet_mirror_pubsub \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --quiet
    gcloud logging sinks delete stackdriver_logging \
        --project="$TF_VAR_pid" \
        --quiet
    gcloud pubsub topics delete stackdriver_logging \
        --project="$TF_VAR_pid" \
        --quiet
    gcloud compute packet-mirrorings delete  pm-mirror-subnet1  \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --quiet
    gcloud compute forwarding-rules delete fr-ilb-packet-mirroring \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --quiet
    gcloud compute backend-services delete collector-ilb \
        --project="$TF_VAR_pid" \
        --region="$TF_VAR_region" \
        --quiet
    
  2. 가이드의 모든 구성요소를 삭제합니다.

    pushd $HOME/packetMirror
    terraform destroy
    popd
    

    메시지가 표시되면 yes를 입력하여 구성을 삭제합니다.

  3. Git 저장소를 삭제합니다.

    rm -rf $HOME/packetMirror
    

다음 단계