흐름 로그 액세스

이 페이지에서는 Cloud Logging을 사용하여 흐름 로그에 액세스하는 방법을 설명합니다.

로그 탐색기에서 흐름 로그 액세스

VPC 흐름 로그는 로그 리포터의 Google Cloud 프로젝트에 로그를 씁니다. 로그 탐색기에서 흐름 로그를 볼 수 있습니다. VPC 흐름 로그는 다음 로그를 사용하여 로그 항목을 수집합니다.

  • compute.googleapis.com/vpc_flows 로그는 서브넷의 로그 항목을 수집합니다. Compute Engine API를 사용하여 VPC 흐름 로그를 사용 설정한 경우 이 로그를 확인하세요.
  • 다른 모든 VPC 흐름 로그 구성의 경우 networkmanagement.googleapis.com/vpc_flows 로그를 확인하세요. 이 로그는 가상 프라이빗 클라우드(VPC) 네트워크(프리뷰), 서브넷(프리뷰), Cloud Interconnect의 VLAN 연결, Cloud VPN 터널의 로그 항목을 수집합니다.

IAM 구성

로깅의 액세스 제어를 구성하려면 Logging에 대한 액세스 제어 가이드를 참조하세요.

리소스 필터를 사용하여 흐름 로그 보기

리소스 필터를 사용하여 Google Cloud 프로젝트에서 흐름 로그를 보려면 다음 섹션을 참고하세요. 또한 쿼리를 사용하여 흐름 로그 필터링에 설명된 것처럼 로그 탐색기 쿼리를 사용하여 이러한 로그를 확인할 수 있습니다.

모든 서브넷의 흐름 로그 보기(compute.googleapis.com/vpc_flows)

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 모든 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 서브네트워크를 클릭한 후 적용을 클릭합니다.

  4. 모든 로그 이름을 클릭합니다.

  5. 로그 이름 선택 목록에서 Compute Engine을 찾아 vpc_flows를 클릭한 후 적용을 클릭합니다.

특정 서브넷의 흐름 로그 보기(compute.googleapis.com/vpc_flows)

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 모든 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 서브네트워크를 클릭합니다.

  4. 서브네트워크 ID 목록에서 서브넷을 선택한 후 적용을 클릭합니다.

  5. 모든 로그 이름을 클릭합니다.

  6. 로그 이름 선택 목록에서 Compute Engine을 찾아 vpc_flows를 클릭한 후 적용을 클릭합니다.

모든 리소스의 흐름 로그 보기(networkmanagement.googleapis.com/vpc_flows)

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 모든 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 VPC 흐름 로그 구성을 클릭한 후 적용을 클릭합니다.

특정 구성(networkmanagement.googleapis.com/vpc_flows)의 흐름 로그 보기

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 모든 리소스를 클릭합니다.

  3. 리소스 선택 목록에서 VPC 흐름 로그 구성을 클릭하고 확인하려는 VPC 흐름 로그 구성을 선택합니다.

  4. 적용을 클릭합니다.

쿼리를 사용하여 흐름 로그 필터링

  1. Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리 창에 쿼리 편집기 필드가 표시되지 않으면 쿼리 표시 전환을 클릭합니다.

  3. 쿼리 편집기 필드에 다음과 같이 쿼리를 입력합니다.

    • Compute Engine API를 사용하여 서브넷에 VPC 흐름 로그를 사용 설정한 경우 흐름 로그를 보려면 쿼리가 compute.googleapis.com을 타겟팅해야 합니다. 예를 들어 다음 쿼리를 입력하면서 PROJECT_ID는 Google Cloud 프로젝트 ID로 바꾸고 SUBNET_NAME은 해당 서브넷으로 바꿉니다.

      resource.type="gce_subnetwork"
      logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
      resource.labels.subnetwork_name="SUBNET_NAME"
      
    • 다른 모든 쿼리의 경우 쿼리가 networkmanagement.googleapis.com을 타겟팅해야 합니다. 예를 들어 특정 소스 Cloud VPN 터널의 흐름 로그를 보려면 다음 쿼리를 입력합니다.

      resource.type="vpc_flow_logs_config"
      logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
      jsonPayload.reporter="src_gateway"
      labels.target_resource_name="projects/PROJECT_ID/regions/REGION/vpnTunnels/NAME"
      

      다음을 바꿉니다.

      • PROJECT_ID: Google Cloud 프로젝트 ID
      • REGION: Cloud VPN 터널의 리전
      • NAME: Cloud VPN 터널의 이름

      흐름 로그를 보기 위해 실행할 수 있는 더 많은 쿼리 예시는 VPC 흐름 로그를 위한 로그 탐색기 쿼리 예시를 참조하세요.

  4. 쿼리 실행을 클릭합니다.

VPC 흐름 로그를 위한 로그 탐색기 쿼리 예시

다음 표에서는 Google Cloud 프로젝트에서 흐름 로그를 보기 위해 실행할 수 있는 로그 탐색기 쿼리 예시를 보여줍니다.

networkmanagement.googleapis.com/vpc_flows 쿼리 섹션의 예에서는 각 리소스가 단일 VPC 흐름 로그 구성에 의해 로깅된다고 가정합니다. 리소스당 여러 VPC 흐름 로그 구성을 사용하는 경우 쿼리할 구성을 지정하여 쿼리 결과에서 중복 로그를 제외합니다. 쿼리에서 여러 구성을 지정할 수도 있습니다.

확인할 로그 쿼리
모든 흐름 로그
resource.type=("gce_subnetwork" OR "vpc_flow_logs_config")
logName=("projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" OR
"projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows")
compute.googleapis.com/vpc_flows 로그 쿼리
모든 서브넷의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
특정 서브넷의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
resource.labels.subnetwork_name="SUBNET_NAME"
특정 가상 머신(VM) 인스턴스의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
(jsonPayload.src_instance.vm_name="VM_NAME" OR
jsonPayload.dest_instance.vm_name="VM_NAME")
특정 서브넷 범위로 가는 트래픽의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
ip_in_net(jsonPayload.connection.dest_ip, SUBNET_RANGE)
특정 Google Kubernetes Engine(GKE) 클러스터의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
(jsonPayload.src_gke_details.cluster.cluster_name="CLUSTER_NAME" OR
jsonPayload.dest_gke_details.cluster.cluster_name="CLUSTER_NAME")
서브넷의 이그레스 전용 트래픽의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND
jsonPayload.reporter="SRC" AND
jsonPayload.src_vpc.subnetwork_name="SUBNET_NAME" AND
(jsonPayload.dest_vpc.subnetwork_name!="SUBNET_NAME"
 OR NOT jsonPayload.dest_vpc.subnetwork_name:*)
Virtual Private Cloud(VPC) 네트워크의 모든 이그레스 트래픽에 대한 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows" AND
jsonPayload.reporter="SRC" AND
jsonPayload.src_vpc.vpc_name="VPC_NAME" AND
(jsonPayload.dest_vpc.vpc_name!="VPC_NAME" OR NOT jsonPayload.dest_vpc:*)
개별 목적지 포트의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
jsonPayload.connection.dest_port=PORT
jsonPayload.connection.protocol=PROTOCOL
여러 대상 포트의 로그
resource.type="gce_subnetwork"
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fvpc_flows"
jsonPayload.connection.dest_port=(PORT1 OR PORT2)
jsonPayload.connection.protocol=PROTOCOL
networkmanagement.googleapis.com/vpc_flows 로그 쿼리
모든 VPC 흐름 로그 구성의 로그
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
특정 VPC 흐름 로그 구성의 로그
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
resource.labels.name="CONFIG_NAME"
특정 소스 Cloud VPN 터널의 로그
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
jsonPayload.reporter="src_gateway"
labels.target_resource_name="projects/PROJECT_ID/regions/REGION/vpnTunnels/NAME"
모든 대상 VLAN 연결의 로그
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
jsonPayload.reporter="dest_gateway"
jsonPayload.dest_gateway.type="INTERCONNECT_ATTACHMENT"
특정 리전의 모든 대상 VLAN 연결 로그
resource.type="vpc_flow_logs_config"
logName="projects/PROJECT_ID/logs/networkmanagement.googleapis.com%2Fvpc_flows"
jsonPayload.reporter="dest_gateway"
jsonPayload.dest_gateway.type="INTERCONNECT_ATTACHMENT"
jsonPayload.dest_gateway.location="REGION"

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID
  • SUBNET_NAME: 서브넷의 이름
  • VM_NAME: VM의 이름
  • SUBNET_RANGE: CIDR 범위(예: 192.168.1.0/24)
  • CLUSTER_NAME: GKE 클러스터의 이름
  • VPC_NAME: VPC 네트워크의 이름
  • PORT1PORT2: 목적지 포트
  • PROTOCOL: 통신 프로토콜
  • CONFIG_NAME: VPC 흐름 로그 구성의 이름
  • REGION: VLAN 연결 또는 Cloud VPN 터널의 리전
  • NAME: Cloud VPN 터널의 이름

BigQuery, Pub/Sub, 커스텀 대상에 로그 라우팅

Logging 문서의 라우팅 및 스토리지 개요에 설명된 대로 Logging에서 원하는 대상으로 흐름 로그를 라우팅할 수 있습니다. 이전의 필터 예 섹션을 참조하세요.

문제 해결

Logging의 gce_subnetwork 리소스에 vpc_flows가 표시되지 않음

  • 지정된 서브넷에 Logging이 사용 설정되어 있는지 확인합니다.
  • VPC 흐름은 VPC 네트워크에서만 지원됩니다. 기존 네트워크를 사용하는 경우 로그가 표시되지 않습니다.
  • 공유 VPC 네트워크에서 로그는 서비스 프로젝트가 아닌 호스트 프로젝트에만 표시됩니다. 호스트 프로젝트에서 로그를 찾아야 합니다.
  • Logging 제외 필터는 지정된 로그를 차단합니다. VPC 흐름 로그를 삭제하는 제외 규칙이 없는지 확인하세요.
    1. 로그 라우터로 이동.
    2. Logging 버킷의 추가 작업 메뉴에서 싱크 세부정보 보기를 클릭합니다.
    3. VPC 흐름 로그를 삭제할 수 있는 제외 규칙이 없는지 확인합니다.
  • Google Cloud CLI 또는 API를 사용하여 로그 필터링 구성이 지정된 서브넷의 모든 트래픽을 필터링하는지 확인합니다. 예를 들어 filterExprfalse로 설정된 경우 로그가 표시되지 않습니다.

일부 로그에 RTT 또는 바이트 값이 없음

  • 샘플링된 패킷이 RTT를 캡처하기에 부족한 경우 RTT 측정이 누락될 수 있습니다. 이 현상은 소량 연결에서 발생할 가능성이 높습니다.
  • RTT 값은 VM에서 보고된 TCP 흐름에서만 사용할 수 있습니다.
  • 일부 패킷은 페이로드 없이 전송됩니다. 헤더만 있는 패킷이 샘플링된 경우 바이트 값은 0이 됩니다.

일부 흐름이 누락됨

  • 인그레스 패킷은 인그레스 VPC 방화벽 규칙 이후에 샘플링됩니다. 로깅할 것으로 예상하는 패킷을 거부하는 인그레스 방화벽 규칙이 없는지 확인합니다. VPC 방화벽 규칙이 인그레스 패킷을 차단하는지 확실하지 않으면 방화벽 규칙 로깅을 사용 설정하여 로그를 검사할 수 있습니다.
  • TCP, UDP, ICMP, ESP GRE 프로토콜만 지원됩니다. VPC 흐름 로그는 다른 프로토콜을 지원하지 않습니다.
  • 로그가 샘플링됩니다. 극소량 흐름의 일부 패킷이 누락될 수 있습니다.

일부 로그에 GKE 주석 누락됨

GKE 클러스터가 지원되는 버전인지 확인합니다.

일부 GKE 흐름의 로그 누락됨

클러스터에 노드 내 공개 상태가 사용 설정되어 있는지 확인합니다. 사용 설정되어 있지 않으면 동일 노드에서 포드 간의 흐름은 로깅되지 않습니다.

다음 단계