Last Mile Fleet Solution is currently available only to select customers. Contact sales to learn more.

로깅

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

Fleet Engine은 플랫폼 로그로 로그를 Cloud Logging에 전송하므로 Cloud Logging 도구를 사용하여 쉽게 액세스할 수 있습니다.

Fleet Engine에서 로깅하는 항목

Fleet Engine은 인증된 모든 REST 및 gRPC 요청, 응답, 심지어 오류 응답을 Cloud Logging으로 전송합니다. 드라이버 SDK에서 Fleet Engine에 시작한 호출도 포함됩니다. 하지만 인증 오류를 로깅하지 않으며 데이터 보호를 위해 요청 및 응답에서 일부 필드를 수정할 수 있습니다.

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

Cloud Logging 사용 설정

2022년 2월 10일 이전에 생성된 프로젝트에는 기본적으로 로깅이 사용 설정되지 않을 수 있습니다. 로그 탐색기에서 다음 쿼리를 사용하여 로깅이 사용 설정되었는지 확인할 수 있습니다. resource.type:"fleetengine.googleapis.com"

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

로그 액세스

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

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

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

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

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

다음 예시는 UpdateDeliveryVehicle 로그의 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.UpdateDeliveryVehicleLog"
      },
      "resource": {
        "type": "fleetengine.googleapis.com/DeliveryFleet",
        "labels": {2}
      },
      "timestamp": "2021-01-01T00:00:00.000000000Z",
      "labels": {2},
      "logName": "projects/example-project-id/logs/fleetengine.googleapis.com%2Fupdate_delivery_vehicle",
      "receiveTimestamp": "2021-01-01T00:00:00.000000000Z"
    }

RPC 오류가 반환되면 responseDeliveryVehicle 필드가 지워지고 jsonPayloaderrorResponse 필드로 설정되고 채워집니다.

    {
      "insertId": "c6b85fbc927343fc8a85338c57a65733",
      "jsonPayload": {
        "errorResponse": {
          "httpStatusCode": 404,
          "code": "NOT_FOUND",
          "message": "No entity with id invalidVehicleId exists"
        },
        "@type": "type.googleapis.com/maps.fleetengine.v1.UpdateDeliveryVehicleLog",
        "request": {
          "vehicle": {3},
          "updateMask": "deviceSettings",
          "vehicleId": "fakeVehicleId",
          "header": {4}
        }
      },
      "resource": {
        "type": "fleetengine.googleapis.com/DeliveryFleet",
        "labels": {2}
      },
      "timestamp": "2021-01-01T00:00:00.000000000Z",
      "severity": "ERROR",
      "labels": {2}
      "logName": "projects/example-project-id/logs/fleetengine.googleapis.com%2Fupdate_delivery_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을 열고 로깅을 선택한 다음 로그 탐색기를 선택합니다. 사용 가능한 모든 Fleet Engine 로그 목록을 보려면 Fleet Engine 리소스 유형을 클릭합니다. 일부 Delivery API 로그에는 태스크 ID와 전송 차량 ID 라벨이 지정됩니다. 이 라벨을 사용하여 관심 있는 작업 또는 차량에 대한 로그를 선택할 수 있습니다.

로그 라벨

배송 차량 ID로 로그 필터링

로그 탐색기에서 다음 쿼리를 사용하여 로그를 특정 차량으로 제한할 수 있습니다.

resource.type="fleetengine.googleapis.com/DeliveryFleet"
labels.delivery_vehicle_id="delivery_vehicle_id"

차량 필터링

태스크 ID로 로그 필터링

로그 탐색기에서 다음 쿼리를 사용하여 로그를 특정 작업으로 제한할 수 있습니다.

resource.type="fleetengine.googleapis.com/DeliveryFleet"
labels.task_id=~"task_id"

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

로그 탐색기에서 다음 쿼리를 사용하여 특정 기간에 차량의 로그로 로그를 제한할 수 있습니다.

resource.type="fleetengine.googleapis.com/DeliveryFleet"
labels.delivery_vehicle_id="delivery_vehicle_id"
timestamp>="2020-09-24T20:00:00.000Z"
timestamp<"2020-09-24T21:00:00.000Z"

로그 기반 측정항목의 예

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

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

    resource.type="fleetengine.googleapis.com/DeliveryFleet" resource.labels.location="global"
    logName="projects/ProjectID/logs/fleetengine.googleapis.com%2Fupdate_task"
    jsonPayload.request.task.taskOutcome="TASK_OUTCOME_LOG_SUCCEEDED"
    jsonPayload.request.updateMask="taskOutcome"
    jsonPayload.response.type= ("TASK_TYPE_LOG_PICKUP" OR "TASK_TYPE_LOG_DELIVERY")
    
  2. 쿼리 결과 창에서 작업 드롭다운을 선택한 후 측정항목 만들기를 선택합니다.

    측정항목 만들기

  3. 측정항목 편집기 대화상자에서 다음을 수행합니다.

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

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

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

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

    측정항목 보기

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

    검색 측정항목

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

BigQuery 사용

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

BigQuery로 로그 라우팅

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

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

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

    필터 만들기

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

    싱크 만들기

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

    싱크 선택

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

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

    싱크 수정

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

BigQuery 섹션

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

  • 배송 차량 만들기
  • 배송 차량 가져오기
  • 목록 전송 차량
  • 차량 배포 업데이트
  • CreateTask
  • GetTask
  • UpdateTask
  • ListTasks
  • 검색 작업

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

project_id.data_set.log_name

예를 들어 프로젝트 이름이 test_project이고 데이터 세트 이름이 FleetEngine Logs인 경우 CreateTask 테이블의 이름은 다음과 같습니다.

test_project.FleetEngineLogs.fleetengine_googleapis_com_create_task

쿼리 예시

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

시간당 생성된 태스크

다음 쿼리는 CreateTasks 로그 수를 계산하고 시간을 기준으로 그룹화합니다.

SELECT TIMESTAMP_TRUNC(timestamp, HOUR) as hour,
       count(*) as num_tasks_created
FROM
`ProjectId.FleetEngineLogs.fleetengine_googleapis_com_create_task`
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_updatedeliveryvehiclelog.request.deliveryvehicleid AS vehicle,
      TIMESTAMP_TRUNC(timestamp, HOUR) AS hour,
      COUNT(*) AS num_stops
    FROM
      `ProjectId.FleetEngineLogs.fleetengine_googleapis_com_update_delivery_vehicle`
    WHERE
    ARRAY_LENGTH(jsonpayload_v1_updatedeliveryvehiclelog.request.deliveryvehicle.remainingvehiclejourneysegments) > 0
      AND jsonpayload_v1_updatedeliveryvehiclelog.request.deliveryvehicle.remainingvehiclejourneysegments[
    OFFSET
      (0)].stop.state = 'VEHICLE_STOP_STATE_LOG_ARRIVED'
    GROUP BY
      1,
      2
    ORDER BY
      2
    

첫 번째 전송 성공률

다음 쿼리는 첫 번째 전송 시도 성공률 비율을 보여줍니다.

SELECT
 vehicle_id,
 COUNTIF(outcome = "TASK_OUTCOME_LOG_SUCCEEDED") AS num_success,
 COUNT(*) AS total_deliveries,
 COUNTIF(outcome = "TASK_OUTCOME_LOG_SUCCEEDED") * 100/ COUNT(*) AS success_rate
FROM (
 SELECT
   labels.delivery_vehicle_id AS vehicle_id,
   jsonpayload_v1_updatetasklog.response.trackingid AS trackingid,
   ARRAY_AGG(jsonpayload_v1_updatetasklog.response.taskoutcome
   ORDER BY
     timestamp ASC)[ORDINAL(1)] AS outcome,
 FROM
 `ProjectId.FleetEngineLogsfleetengine_googleapis_com_update_task`
 WHERE
  jsonpayload_v1_updatetasklog.response.type = "TASK_TYPE_LOG_DELIVERY"
 GROUP BY 1, 2
 ORDER BY 1, 2)
GROUP BY 1
ORDER BY 1

데이터 스튜디오 대시보드

BigQuery는 비즈니스 인텔리전스 도구와 통합될 수 있으며 비즈니스 분석을 위해 대시보드를 만들 수 있습니다.

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

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

    데이터 연결

  2. 커스텀 쿼리를 선택하고 비용을 청구할 Cloud 프로젝트를 선택합니다.

    프로젝트 선택

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

    쿼리 입력

    SELECT
     timestamp,
     labels.delivery_vehicle_id,
    jsonpayload_v1_updatedeliveryvehiclelog.response.lastlocation.rawlocation.latitude AS lat,
    jsonpayload_v1_updatedeliveryvehiclelog.response.lastlocation.rawlocation.longitude AS lng
    FROM
    `ProjectId.FleetEngineLogs.fleetengine_googleapis_com_update_delivery_vehicle`
    
  4. 차트 유형을 풍선 지도로 선택한 다음 위치 입력란을 선택합니다.

    차트 유형

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

    필드 만들기

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

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

    세트 유형

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

    컨트롤 추가

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

    기간

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

    드롭다운 목록

이러한 컨트롤을 사용하면 차량의 이동 또는 이동 내 이동을 시각화할 수 있습니다.