로깅

Fleet Engine은 API 요청 및 응답 페이로드를 저장할 수 있는 간단한 로깅 서비스를 제공합니다. 이러한 로그를 사용하면 통합을 디버깅하고, 모니터링 측정항목을 만들고, 트래픽 패턴을 분석할 수 있습니다.

Fleet Engine은 사용자가 Cloud Logging 도구를 사용하여 로그에 액세스할 수 있도록 로그를 플랫폼 로그Cloud Logging에 전송합니다.

Fleet Engine 로그

Fleet Engine은 다음과 같은 여러 정보를 Cloud Logging으로 보냅니다.

  • 인증된 모든 REST 및 gRPC 요청 및 응답
  • 오류 응답
  • 드라이버 SDK에서 Fleet Engine에 대해 시작한 호출의 요청, 응답, 오류 메시지.

Logging 참조에서 사용 가능한 로그 메시지 및 스키마에 대한 문서를 참조하세요.

제한된 로그 버킷과 기본 로그 버킷을 사용하여 데이터 보관 정책 준수

'제한됨' 및 '기본' 버킷을 사용하면 제한된 데이터 사용량과 제한되지 않은 데이터 사용량을 명확하게 파악할 수 있습니다. Fleet Engine이 Google Maps Platform에 전송하는 일부 로그 데이터는 모바일 서비스별 약관에 따라 제한된 기간 동안만 보관될 수 있습니다. 허용된 기간 동안만 제한된 데이터를 보관하려면 제한된 데이터에 TOS_RESTRICTED로 라벨을 지정하고 '제한됨'이라는 전용 버킷으로 전송하는 것이 좋습니다. 여기에서 Cloud Logging 설정을 사용하여 보관 기간을 제어하고 만료 시 자동으로 삭제할 수 있습니다. 예를 들어 제한된 사용 로그는 30일 동안만 보관해야 합니다.

남아 있는 제한되지 않은 모든 로그 데이터를 무기한으로 유지할 수 있는 '기본' 버킷으로 전송합니다.

제한된 로그와 제한되지 않은 로그를 병합하여 종합적으로 확인하기

제한된 사용 로그는 함께 고려될 수 있도록 제한된 사용 데이터와 기본 로그에 대한 참조를 포함합니다. 제한된 사용 로그는 parent_insert_id 필드에 기본 로그의 insertId를 참조로 포함합니다. 이 필드를 사용하여 두 로그의 데이터를 조인하고 전체 그림을 파악할 수 있습니다.

Logging 참조에서 사용 가능한 모든 로그 메시지 및 스키마에 대한 문서를 확인하세요.

Cloud Logging 사용 설정

Fleet Engine은 2022년 2월 10일에 생성된 프로젝트부터 신규 Mobility 고객에게 기본 로그를 자동으로 사용 설정합니다. 로그 탐색기에서 다음 쿼리를 사용하여 로깅이 사용 설정되었는지 확인할 수 있습니다.

resource.type:"fleetengine.googleapis.com"

해당 쿼리에 대한 로그가 표시되지 않으면 프로젝트에 Cloud Logging이 사용 설정되지 않았을 수 있습니다. 이 기능을 사용 설정하려면 지원팀에 문의하세요.

제한된 사용 로그 사용 설정

요청 시 제한된 사용 로그가 사용 설정됩니다. GCP 프로젝트에 이러한 로그를 사용 설정하려면 다음 단계를 완료하세요.

제한된 사용 로그를 수신할 프로젝트 준비

  1. Google Cloud 콘솔에서 로그 라우터 페이지를 엽니다.
  2. 제한된 사용 로그를 제외하도록 _Default 로깅 버킷을 업데이트합니다.
    1. _Default 로깅 버킷을 선택한 다음 싱크 수정을 선택합니다.
    2. '싱크를 필터링할 로그 선택' 섹션에서 '제외 추가' 버튼을 클릭합니다.
    3. 제외 필터 이름: ExcludeRestrictedLogs
    4. 제외 필터: labels.restriction="TOS_RESTRICTED"
    5. '싱크 업데이트'를 클릭합니다.
  3. 제한된 사용 로그를 저장하도록 제한된 로깅 버킷을 업데이트합니다.
    1. 로그 라우터 페이지에서 '싱크 만들기'를 선택합니다.
    2. 다음 설정으로 싱크를 만듭니다.
    3. 싱크 세부정보:
      1. 이름: RestrictedLogs
      2. 설명: 경로 Fleet Engine 제한된 사용 로그
    4. 싱크 대상:
      1. 싱크 서비스: Logging 버킷
      2. 로그 버킷 선택: 새 로그 버킷 만들기
      3. 이름: 제한됨
      4. 설명: Fleet Engine 제한된 사용 로그가 포함됨
      5. 보관 기간: 30일
      6. 참고: 보관 기간은 30일을 초과할 수 없습니다.
    5. 싱크에 포함할 로그: 비워 둠
    6. 싱크를 필터링할 로그: '제외 추가'를 클릭합니다.
      1. 제외 필터 이름: ExcludeNonRestrictedLogs
      2. 제외 필터: NOT (resource.type = "fleetengine.googleapis.com/Fleet" OR resource.type = "fleetengine.googleapis.com/DeliveryFleet") NOT (labels.restriction = "TOS_RESTRICTED")
    7. '싱크 만들기'를 클릭합니다.

제한된 사용 로그를 사용 설정하려면 지원팀에 문의하세요.

그런 다음 지원팀에 문의하여 지원 요청에 다음 정보를 제공하세요.

  1. 사용 설정할 프로젝트 ID:
  2. 변경을 요청하는 사람의 이메일 주소:
    1. 참고: 이 사용자는 위에 나열된 GCP 프로젝트에 대한 수정 액세스 권한이 있어야 합니다.
  3. Cloud Logging에서 사용이 제한된 Google 지도 콘텐츠를 사용 설정하면 Google 지도 콘텐츠와 관련된 캐싱 및 허용 사용 요구사항을 비롯한 Google Maps Platform 약관모바일 서비스별 약관을 준수하는 데 동의하는 것으로 간주됩니다. 예/아니요

지원팀에서 요청을 받으면 프로젝트에 로깅이 사용 설정되었다는 확인을 전송합니다.

로그 액세스

Cloud 로그는 LogEntry 형식을 중심으로 구성됩니다. Fleet Engine은 LogEntry의 resource.typefleetengine.googleapis.com로 설정하여 Cloud Logging으로 로그를 전송합니다. 로그 탐색기를 사용하면 로그를 보기 위한 쿼리를 작성할 수 있습니다.

예를 들어 오류를 반환한 Fleet Engine에 대한 모든 RPC를 보려면 다음 로그 탐색기 쿼리를 사용합니다.

resource.type:"fleetengine.googleapis.com"
severity=ERROR

프로젝트 example-project-id의 UpdateVehicle 메서드에 대한 RPC 로그를 보려면 다음 로그 탐색기 쿼리를 사용합니다.

logName="projects/project-id/logs/fleetengine.googleapis.com%2Fupdate_vehicle"

다음 예는 UpdateVehicle 로그의 LogEntry를 보여줍니다. RPC 요청 및 응답은 jsonPayload 필드 내에 있습니다.

    {
      "insertId": "c6b85fbc927343fc8a85338c57a65733",
      "jsonPayload": {
        "request": {
          "header": {4},
          "updateMask": "deviceSettings",
          "vehicleId": "uniqueVehicleId",
          "vehicle": {2}
        },
        "response": {
          "name": "providers/example-project-id/vehicles/uniqueVehicleId",
          "availableCapacity": 2,
          "state": "VEHICLE_STATE_OFFLINE",
          "maximumCapacity": 2,
          "vehicleType": {1},
          "supportedTrips": {1}
        },
        "@type": "type.googleapis.com/maps.fleetengine.v1.UpdateVehicleLog"
      },
      "resource": {
        "type": "fleetengine.googleapis.com/Fleet",
        "labels": {2}
      },
      "timestamp": "2021-01-01T00:00:00.000000000Z",
      "labels": {2},
      "logName": "projects/example-project-id/logs/fleetengine.googleapis.com%2Fupdate_vehicle",
      "receiveTimestamp": "2021-01-01T00:00:00.000000000Z"
    }

RPC 오류가 반환되면 responseVehicle 필드가 삭제되고 errorResponse 필드가 설정되고 jsonPayload 내에 채워집니다.

    {
      "insertId": "c6b85fbc927343fc8a85338c57a65733",
      "jsonPayload": {
        "errorResponse": {
          "httpStatusCode": 404,
          "code": "NOT_FOUND",
          "message": "No entity with id invalidVehicleId exists"
        },
        "@type": "type.googleapis.com/maps.fleetengine.v1.UpdateVehicleLog",
        "request": {
          "vehicle": {3},
          "updateMask": "deviceSettings",
          "vehicleId": "fakeVehicleId",
          "header": {4}
        }
      },
      "resource": {
        "type": "fleetengine.googleapis.com/Fleet",
        "labels": {2}
      },
      "timestamp": "2021-01-01T00:00:00.000000000Z",
      "severity": "ERROR",
      "labels": {2}
      "logName": "projects/example-project-id/logs/fleetengine.googleapis.com%2Fupdate_vehicle",
      "receiveTimestamp": "2021-01-01T00:00:00.000000000Z"
    }

로깅 쿼리 언어에 대한 자세한 내용은 Logging 쿼리 언어를 참조하세요. 로그를 사용하여 측정항목을 만드는 방법에 대한 자세한 내용은 로그 기반 측정항목 개요를 참조하세요.

로깅 비용 관리

로깅이 사용 설정된 후 사용자는 로그를 라우팅, 저장, 보관하는 방법을 설정해야 합니다. 무료 사용량 및 보관 한도를 초과하면 로그 수집 및 보관에 대한 Google Cloud Platform 요금이 추가로 발생할 수 있습니다. 그러나 다음 중 하나를 수행하여 로깅 비용을 제어할 수 있습니다.

로깅 사용량 줄이기

특정 로그 항목을 제외하여 로그 데이터 수집량을 제한할 수 있습니다.

로그 내보내기 또는 라우팅

로그를 다른 GCP 또는 외부 대상으로 라우팅하면 기본 수집 및 스토리지 비용을 방지할 수 있습니다. 수집 비용을 방지하려면 아래에 설명된 대로 로그 수집을 사용 중지해야 합니다.

요금이 청구되지 않도록 로그 수집을 사용 중지하세요.

로그 수집을 사용 중지하는 것보다 로깅 사용량을 줄이거나 로그를 내보내거나 라우팅하는 것이 좋습니다. 하지만 Fleet Engine 로그를 사용하지 않으려는 경우 수집을 사용 중지하여 잠재적인 Cloud Logging 요금이 청구되지 않도록 할 수 있습니다. 기본적으로 Fleet Engine 로그는 _Default 로그 버킷으로 라우팅됩니다.

다음 명령어는 Fleet Engine 로그를 수집하지 않도록 _Default 로깅 버킷을 업데이트합니다.

gcloud logging sinks update _Default \
--log-filter='NOT LOG_ID("cloudaudit.googleapis.com/activity") \
AND NOT LOG_ID("externalaudit.googleapis.com/activity") \
AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") \
AND NOT LOG_ID("externalaudit.googleapis.com/system_event") \
AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") \
AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency") \
AND NOT resource.type:"fleetengine.googleapis.com"''

자세한 내용은 Cloud Logging 제외로그 제외를 참조하세요. Cloud Logging 내보내기로그 내보내기

로그 탐색기 사용

로그 탐색기를 사용하려면 Cloud Console을 열고 Logging을 선택한 다음 로그 탐색기를 선택합니다. 사용 가능한 모든 Fleet Engine 로그 목록을 보려면 Fleet Engine 리소스 유형을 클릭하세요. 일부 API 로그에는 이동 ID와 차량 ID 라벨이 지정됩니다. 이러한 라벨을 사용하여 관심 있는 이동 또는 차량의 로그를 선택할 수 있습니다.

로그 라벨

차량 ID로 로그 필터링

로그 탐색기에서 다음 쿼리를 사용하여 로그를 특정 차량으로 제한할 수 있습니다. none resource.type="fleetengine.googleapis.com/Fleet" labels.vehicle_id="vehicle_id" 차량 필터링

이동 ID별 로그 필터링

로그 탐색기에서 다음 쿼리를 사용하여 로그를 특정 이동으로 제한할 수 있습니다. none resource.type="fleetengine.googleapis.com/Fleet" labels.trip_id=~"trip_id" 참고: 쿼리 필터가 모든 로그를 캡처하도록 하려면 쿼리에 =~ 연산자를 사용하세요. 차량에 할당된 이동이 여러 개인 경우 이동 ID는 쉼표로 구분됩니다. 이 필터는 엄격한 동등 검사가 아닌 라벨의 값이 포함된 모든 로그와 일치합니다.

특정 기간의 차량 로그 필터링

로그 탐색기에서 다음 쿼리를 사용하여 특정 기간 동안의 차량 관련 로그로 로그를 제한할 수 있습니다. none resource.type="fleetengine.googleapis.com/Fleet" labels.vehicle_id="vehicle_id" timestamp>="2020-09-24T20:00:00.000Z" timestamp<"2020-09-24T21:00:00.000Z" 참고: 이 예시의 시간 값은 협정 세계시 (UTC) 형식입니다. 시간대를 지정하려면 타임스탬프 끝에 있는 문자 Z를 +hh:mm 또는 -hh:mm으로 바꿉니다. 자세한 내용은 클라우드 문서를 참조하세요.

로그 기반 측정항목 예시

다음 예시는 로그 기반 측정항목을 사용하여 시간 경과에 따라 생성된 이동 수를 추적하는 방법을 보여줍니다.

  1. Cloud Console에서 Logging을 선택한 후 로그 탐색기를 선택하여 로그 탐색기를 엽니다. 그런 다음 아래 필터를 적용합니다.

    resource.type="audited_resource"
    resource.labels.method="maps.fleetengine.v1.TripService.ReportBillableTrip"
    
  2. 쿼리 결과 창에서 작업 드롭다운을 선택한 후 측정항목 만들기를 선택합니다.

    측정항목 만들기

  3. 측정항목 편집기 대화상자에서 다음 안내를 따르세요.

    • 측정항목 이름 (예: billable_trips)을 지정합니다.
    • 측정항목 설명 (예: 청구 가능한 이동 호출 수)을 지정합니다.
    • 단위 옵션은 비워둡니다. _ 유형 옵션을 카운터로 둡니다.

    그런 다음 측정항목 만들기 버튼을 선택합니다.

  4. 로그 기반 측정항목 페이지에 측정항목이 성공적으로 생성되었음을 확인하는 메시지가 표시되고 새 측정항목이 사용자 정의 측정항목 섹션에 표시됩니다. 이제 일치하는 로그가 생성될 때 측정항목이 채워집니다.

  5. 새 측정항목의 오른쪽에 있는 세로 드롭다운을 선택한 후 측정항목 탐색기에서 보기를 선택합니다.

    측정항목 보기

  6. 쿼리 빌드 아래의 왼쪽 창에서 리소스 유형을 Fleet Engine으로 설정하고 billingable_trips 측정항목을 검색합니다.

    검색 측정항목

    오른쪽 그래프는 billingable_trips 호출의 비율을 보여줍니다.

BigQuery 사용

BigQuery는 분석을 수행하는 강력한 도구입니다. 장기 로그를 저장하고 데이터에 대해 임시 SQL과 유사한 쿼리를 수행하는 데 사용할 수 있습니다.

BigQuery로 로그 라우팅

BigQuery를 활용하려면 다음과 같이 로그를 BigQuery 데이터 저장소로 라우팅해야 합니다.

  1. Cloud Console에서 Logging을 선택한 다음 로그 탐색기를 선택합니다.

  2. Fleet Engine 로그를 격리하는 필터를 만듭니다. 로그 필드 탐색기에서 Fleetengine.googleapis.com/Fleet 리소스 유형을 선택합니다.

    필터 만들기

  3. 쿼리 결과 창에서 작업 드롭다운을 클릭하고 싱크 만들기를 선택합니다.

    싱크 만들기

  4. 싱크 서비스 선택 대화상자에서 BigQuery 데이터 세트를 선택합니다.

    싱크 선택

  5. 싱크 수정 대화상자에서 다음 옵션을 지정합니다.

    • 싱크 이름 (예: FleetEngineLogsSink)을 지정합니다.
    • 싱크 서비스를 BigQuery로 둡니다.
    • 파티션을 나눈 테이블 사용 옵션을 선택합니다. 이렇게 하면 쿼리 성능이 향상됩니다.
    • 싱크 대상에서 새 BigQuery 데이터 세트 만들기를 선택한 다음 BigQuery 데이터 세트 이름 (예: FleetEngineLogs)을 지정합니다.
    • 싱크 만들기 버튼을 클릭합니다.

    싱크 수정

이제 로그가 BigQuery 데이터 세트를 채우기 시작합니다. Cloud Console의 BigQuery 섹션에서 데이터를 확인할 수 있습니다.

BigQuery 섹션

FleetEngineLogs 데이터 세트에 있는 여러 테이블은 로그 유형마다 하나씩 자동으로 채워집니다.

  • CreateVehicle
  • GetVehicle
  • ListVehicles
  • SearchVehicles
  • UpdateVehicle
  • CreateTrip
  • GetTrip
  • UpdateTrip
  • ListTrips

테이블 이름은 다음 패턴을 사용합니다.

project_id.data_set.log_name

예를 들어 프로젝트 이름이 test_project이고 데이터 세트 이름이 FleetEngineLogs이면 CreateTrip 테이블의 이름은 다음과 같습니다.

test_project.FleetEngineLogs.fleetengine_googleapis_com_create_trip

쿼리 예

이 섹션에서는 만들 수 있는 쿼리의 예를 보여줍니다.

시간당 생성된 이동

다음 쿼리는 CreateTrips 로그 수를 계산하고 이를 시간별로 그룹화합니다. sql SELECT TIMESTAMP_TRUNC(timestamp, HOUR) as hour, count(*) as num_trips_created FROM `ProjectId.FleetEngineLogs.fleetengine_googleapis_com_create_trip` GROUP BY hour ORDER by hour

차량 1대 시간당 정류장 수

다음 쿼리는 차량이 운행한 정류장 수를 시간별로 세분화하여 생성합니다.

예를 들어, 다음 쿼리는 지난 1시간 동안 다음과 같은 정보를 제공할 수 있습니다.

  • 차량 A는 12시간에 10개 정차를 완료했고 13시간에 8개 정차를 완료했습니다.
  • 차량 B는 11시간에 5회 정차를 완료했고 12시간에는 7회 정차를 완료했습니다.
  • 차량 C는 13시간에 12개 정차를 완료했고 14시간에 9개 정차를 완료했습니다.

    SELECT
      jsonpayload_v1_updatevehiclelog.request.vehicleid AS vehicle,
      TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
      COUNT(*) AS num_stops
    FROM
      `ProjectId.FleetEngineLogs.fleetengine_googleapis_com_update__vehicle`
    WHERE
    ARRAY_LENGTH(jsonpayload_v1_updatevehiclelog.request.vehicle.remainingvehiclejourneysegments) > 0
      AND jsonpayload_v1_updatevehiclelog.request.vehicle.remainingvehiclejourneysegments[
    OFFSET
      (0)].stop.state = 'VEHICLE_STOP_STATE_LOG_ARRIVED'
    GROUP BY
      1,
      2
    ORDER BY
      2
    

데이터 스튜디오 대시보드

BigQuery는 비즈니스 인텔리전스 도구와 통합할 수 있고, 비즈니스 분석을 위한 대시보드를 만들 수 있습니다.

다음 예에서는 지도에 트립 및 차량 이동을 시각화할 수 있는 대시보드를 빌드하는 방법을 보여줍니다.

  1. 새 데이터 스튜디오 대시보드를 실행하고 데이터 연결로 BigQuery를 선택합니다.

    데이터 연결

  2. 커스텀 쿼리를 선택하고 요금이 청구될 Cloud 프로젝트를 선택합니다.

    프로젝트 선택

  3. 쿼리 상자에 다음 쿼리를 입력합니다.

    쿼리 입력

    SELECT
     timestamp,
     labels.vehicle_id,
    jsonpayload_v1_updatevehiclelog.response.lastlocation.location.latitude AS lat,
    jsonpayload_v1_updatevehiclelog.response.lastlocation.location.longitude AS lng
    FROM
    `ProjectId.FleetEngineLogs.fleetengine_googleapis_com_update_vehicle`
    
  4. 차트 유형을 풍선 지도로 선택한 후 위치 필드를 선택합니다.

    차트 유형

  5. 필드 만들기를 선택합니다.

    필드 만들기

  6. 필드 이름을 지정하고 CONCAT(lat, ",", lng) 수식을 추가합니다.

    그런 다음 유형을 지역->위도, 경도로 설정합니다.

    세트 유형

  7. 대시보드에 컨트롤을 추가하여 데이터를 필터링할 수 있습니다. 예를 들어 기간 필터를 선택합니다.

    제어 기능 추가

  8. 기간 상자를 수정하여 기본 기간을 선택합니다.

    기간

  9. 차량_id에 드롭다운 목록 컨트롤을 추가할 수 있습니다.

    드롭다운 목록

이러한 컨트롤을 사용하여 차량의 움직임 또는 이동 중의 이동을 시각화할 수 있습니다.