ロギング

Fleet Engine が提供するシンプルなロギング サービスを使用すると、 API リクエストとレスポンス ペイロード。これらのログを使用すると、 モニタリング指標の作成、トラフィック パターンの分析といったタスクが含まれます。

Fleet Engine はログをプラットフォーム ログ からクラウドへ Cloud Logging を使用し、 アクセスするためのロギングツール。

Fleet Engine が記録する内容

Fleet Engine は、複数の情報をクラウド 次のようなロギング:

  • 認証済みのすべての REST および gRPC リクエストとレスポンス
  • エラー レスポンス
  • ドライバが開始した呼び出しからのリクエスト、レスポンス、エラー メッセージ Fleet Engine に統合します。
  • サポートされているログタイプでログを分割:

利用可能なログメッセージとスキーマについては、Logging で リファレンスをご覧ください。

制限付きのログバケットとデフォルトのログバケットを使用してデータ保持ポリシーに準拠する

「制限付き」の使用「default」を指定Google Cloud Storage バケットにより、 データの使用が制限されます。Fleet Engine が収集するログデータには、 Google Maps Platform に送信されるデータは、限られた期間のみ保持できます。 モビリティ サービス仕様に準拠 利用規約。 制限付きデータを許可された期間のみ保持するには、 このようなデータには TOS_RESTRICTED というラベルを付ける必要があります(Fleet Engine はすでにこれを行っています)。 「restricted」という専用バケットに記録されます。

ここで、保持期間を指定したり、 Cloud Logging の設定を使用して有効にします。たとえば、使用制限のあるログは、 30 日間しか保持されません。

制限のない残りのデータはすべて「デフォルト」として記録する保存したり、バケット内で モビリティ サービス固有の条項で定義されているように、長期間保持される) 利用規約 (通常は 1 年間)。「制限付き」の使用「default」を指定バケットは 制限ありと無制限のデータ使用の状況を把握できます

制限付きログと制限なしログを結合して全体像を把握

制限付き使用ログには、使用制限データと、 まとめて検討できるようにします。使用制限のログ 参照としてデフォルトログの insertId を parent_insert_id に含む 表示されます。このフィールドを使用して、両方のログのデータを結合し、 可視化できます。

利用可能なすべてのログメッセージとスキーマについては、Logging で リファレンスをご覧ください。

Cloud Logging の有効化

Fleet Engine は、モビリティの新規のお客様に対して自動的にデフォルトのログを有効にします。 2022 年 2 月 10 日に作成されたプロジェクトから始まります。新しい P-MAX キャンペーンを ロギングを有効にするには、[ログ エクスプローラ :

resource.type:"fleetengine.googleapis.com/DeliveryFleet"

そのクエリのログが表示されない場合は、Cloud Logging が 有効にする必要がありますお問い合わせ サポート(ご希望の場合) 有効にします。

制限付き使用ログを有効にする

使用制限付きログは、リクエストに応じて有効になります。Google Cloud コンソールでこれらのログを有効にするには、 次の手順を完了します。

使用制限のあるログを受信できるようにプロジェクトを準備する

  1. Google Cloud コンソールで、[ログルーター] ページを開きます。
  2. _Default ロギング バケットを更新して、制限付き使用ログを除外する。
    1. _Default ロギング バケットを選択し、[シンクを編集] を選択します。
    2. [シンクに含めないログの選択] で、[追加] をクリックし、 除外」ボタン: <ph type="x-smartling-placeholder">
        </ph>
      1. 除外フィルタ名: ExcludeRestrictedLogs
      2. 除外フィルタ: labels.restriction="TOS_RESTRICTED"
    3. [シンクを更新] をクリックします。
  3. 制限付き使用のログを保存するように制限付きロギング バケットを更新する。
    1. [ログルーター] ページで [シンクの作成] を選択します。
    2. 次の設定でシンクを作成します。 <ph type="x-smartling-placeholder">
        </ph>
      1. シンクの詳細: <ph type="x-smartling-placeholder">
          </ph>
        1. 名前: RestrictedLogs
        2. 説明: Routes Fleet Engine の制限付き使用ログ
      2. シンクの宛先: <ph type="x-smartling-placeholder">
          </ph>
        1. シンクサービス: Logging バケット
        2. ログバケットの選択: 新しいログバケットの作成 <ph type="x-smartling-placeholder">
            </ph>
          1. 名前: 制限付き
          2. 説明: Fleet Engine の制限付き使用ログが含まれます。
        3. 保持期間: 30 日 <ph type="x-smartling-placeholder">
            </ph>
          1. 注: 保持期間は 30 日以内にする必要があります。
      3. シンクに含めるログ: 空白のままにします
      4. シンクに含めないログ: [除外を追加] をクリックします。 <ph type="x-smartling-placeholder">
          </ph>
        1. 除外フィルタ名: ExcludeNonRestrictedLogs
        2. 除外フィルタ: NOT(resource.type = &quot;fleetengine.googleapis.com/Fleet&quot;OR resource.type = "fleetengine.googleapis.com/DeliveryFleet") NOT (labels.restriction = "TOS_RESTRICTED")
      5. [シンクを作成] をクリックします

使用制限のログを有効にするには、サポートにお問い合わせください

その後、 サポートし、 サポート リクエストに以下の情報を含めてください。

  1. 有効にするプロジェクト ID:
  2. 変更をリクエストしているユーザーのメールアドレス: <ph type="x-smartling-placeholder">
      </ph>
    1. 注: このユーザーには、Google Cloud プロジェクトの編集権限が必要です。 表示されます。
  3. Cloud Logging で Google マップ コンテンツの使用制限を有効にすると、同意したものとみなされます Google Maps Platform 利用規約モビリティ サービス 利用規約 (Google に関連するキャッシュや許可された使用要件を含む) マップのコンテンツ。○ / ×

サポートチームがリクエストを受信すると、サポートチームは、 プロジェクトで有効になっている

クラウドログの分割

Cloud Logging では、受信ログのサイズが 256 KB に制限されます。サービスはログを 超えていますCloud Logging でサイズの大きいログを保持できるように、フリート 256 KB のしきい値を下回る一連のログに分割できます。このようなログ 共通する insertId 分割する順序を示す接頭辞は、サービスが新しい 元の特大ログ。元のルールに基づいて再度結合できます。 insertId

元の分割されていないログにアクセスするには、分割されたログを insertIds 元の順序で分割されます。これは、 Cloud Logging に記録されます。

分割ログの構造は、分割の監査で説明した構造と同じです。 ログエントリ ガイド Cloud Audit Logs です。フリート ロギングの分割ログの主な違いは、 分割は protoPayload ではなく jsonPayload フィールドで行われます。 表示されます。次のセクションに示す分割例をご覧ください。

サポートされているログタイプ

Fleet Engine は、次のログタイプに対してのみログ分割をサポートします。 ログサイズが 256 KB を超える場合:

分割ログの構造の例

// First Split Log
{
  // insertId appended with an increasing number
  "insertId": "ABCDE-1",
  "jsonPayload": {
    "request": {
      "filter": "tracking_id=tracking-test-splitting-task"
    },
    "@type": "type.googleapis.com/maps.fleetengine.delivery.log.v1.ListTasksLog",
    "response": {
      "tasks": [
        {
          "name": "providers/providers-123/tasks/test-splitting-task-id-0",
          // ...
        },
        {
          "name": "providers/providers-123/tasks/test-splitting-task-id-1",
          // ...
        },
        {
          "name": "providers/providers-123/tasks/test-splitting-task-id-2"
          // ...
        },
        {
          "name": "providers/providers-123/tasks/test-splitting-task-id-3",
          // ...
        },
      ]
    },
    "header": {}
  },
  "resource": {
    "type": "fleetengine.googleapis.com/DeliveryFleet",
    "labels": {
      "resource_container": "projects/providers-123",
      "location": "global"
    }
  },
  // Same timestamp
  "timestamp": "2024-01-29T23:35:58.076515Z",
  "labels": {
  },
  "logName": "projects/providers-123/logs/fleetengine.googleapis.com%2Flist_tasks",
  "receiveTimestamp": "2024-01-29T23:35:59.278858322Z",
  "split": {
    // UID for this logical log entry (same across splits)
    "uid": "ABCDE",
    "totalSplits": 2
  }
}
// Second Split Log
{
  // insertId appended with an increasing number
  "insertId": "ABCDE-2",
  "jsonPayload": {
    "request": {
      "filter": "tracking_id=tracking-test-splitting-task"
    },
    "@type": "type.googleapis.com/maps.fleetengine.delivery.log.v1.ListTasksLog",
    "response": {
      "tasks": [
         // Previous tasks appear as empty objects in subsequent splits
        {}, {}, {}, {},
        {
          "name": "providers/providers-123/tasks/test-splitting-task-id-4",
          // ...
        }
      ]
    },
    "header": {}
  },
  "resource": {
    "type": "fleetengine.googleapis.com/DeliveryFleet",
    "labels": {
      "resource_container": "projects/providers-123",
      "location": "global"
    }
  },
  // Same timestamp
  "timestamp": "2024-01-29T23:35:58.076515Z",
  "labels": {
  },
  "logName": "projects/providers-123/logs/fleetengine.googleapis.com%2Flist_tasks",
  "receiveTimestamp": "2024-01-29T23:35:59.278858322Z",
  "split": {
    // UID for this logical log entry (same across splits)
    "uid": "ABCDE",
    // Subsequent logs after the original will have a zero based index
    "index": 1,
    "totalSplits": 2
  }
}

ログにアクセスする

Cloud ログは、 LogEntry 使用できます。Fleet Engine は、LogEntry を使用して Cloud Logging にログを送信します。 resource.typefleetengine.googleapis.com に設定しました。[ログ エクスプローラ ログを表示するためのクエリを作成します

たとえば、エラーを返した Fleet Engine へのすべての RPC を表示するには、次のコマンドを使用します。 ログ エクスプローラのクエリを実行します。

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

UpdateDeliveryVehicle メソッドに対して行われた RPC のログを表示するには、 project example-project-id を表示するには、次のログ エクスプローラ クエリを使用します。

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 フィールド クリアされ、errorResponse フィールドが設定され、jsonPayload 内に値が入力されます。

    {
      "insertId": "2ead60bdec561836a1bb84a90e9915cd",
      "jsonPayload": {
        "@type": "type.googleapis.com/maps.fleetengine.delivery.log.v1.UpdateDeliveryVehicleLog",
        "header": {
          "languageCode": "en",
          "osVersion": "11",
          "platform": "PLATFORM_LOG_ANDROID",
          "regionCode": "US",
          "sdkType": "SDK_TYPE_LOG_DRIVER",
          "sdkVersion": "4.4.3"
        },
        "request": {
          "deliveryVehicle": {4},
          "deliveryVehicleId": "uniqueDeliveryVehicleId",
          "updateMask": "lastLocation"
        },
        "response": {
          "lastLocation": {14},
          "name": "providers/example-project-id/deliveryVehicles/uniqueDeliveryVehicleId",
          "navigationStatus": "NAVIGATION_STATUS_ARRIVED_AT_DESTINATION",
          "remainingDistanceMeters": "430",
          "remainingDuration": "10s"
        }
      },
      "labels": {
        "delivery_vehicle_id": "uniqueDeliveryVehicleId"
      },
      "logName": "projects/example-project-id/logs/fleetengine.googleapis.com%2Fupdate_delivery_vehicle",
      "receiveTimestamp": "2023-07-14T22:57:51.156515110Z",
      "resource": {
        "labels": {2},
        "type": "fleetengine.googleapis.com/DeliveryFleet"
      },
      "timestamp": "2023-07-14T22:57:51.018045Z"
    }

ロギングクエリ言語の詳細については、ロギングクエリをご覧ください language。 ログを使用して指標を作成する方法については、概要 ログベースの指標を 指標をご覧ください。

ロギングの費用を管理する

ロギングを有効にしたら、組織でロギング方法を設定する必要があります。 ログのルーティング、保存、保持を行います追加の Google Cloud リソースへの ログに対する料金 使用量と保持の上限を超過した場合に、取り込みと保持の 。ただし、ロギングの費用は、次のいずれかの方法で制御できます。

ロギングの使用量を減らす

特定のログエントリを除外することで、ログデータの取り込み量を制限できます。

ログをエクスポートまたはルーティングする

ログを他の Google Cloud または外部の宛先にルーティングして、 取り込みと保存の費用を抑えることができます必ずログ取り込みをオフにしてください。 これについては、次のセクションで説明するとおり、取り込み費用の発生を回避する必要があります。

ログの取り込みを無効にして課金が発生しないようにする

ロギングの使用量を減らすこと、またはログをエクスポートまたはルーティングするほうが、 使用できます。ただし、Fleet Engine ログを使用する予定がない場合は、 取り込みをオフにすることで、Cloud Logging の課金が発生しないようにできます。デフォルトでは Fleet Engine ログは _Default ログバケットにルーティングされます。

次のコマンドは、フリートを取り込みないように _Default ロギング バケットを更新します Engine のログ。

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 コンソールを開き、[ロギング] を選択してから、 ログ エクスプローラ。利用可能なすべての 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 コンソールで、[ロギング]、[ログ エクスプローラ] の順に選択して開きます。 表示されます。次に、以下のフィルタを適用します。

    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)。
    • 指標の説明を指定します(例: 課金対象の数 ToDo リストをご覧ください)。
    • [単位] オプションは空白のままにします。_ [タイプ] オプションは、 カウンタ

    次に、[指標を作成] ボタンを選択します。

  4. [ログベースの指標] ページに、 作成され、新しい指標は ユーザー定義指標のセクション。指標が一致するものとして 生成されます。

  5. 新しい指標の右側にあるプルダウンを選択して、 [Metrics Explorer で表示する] を選択します。

    指標を表示

  6. 左側のペインの [クエリの作成] で、リソースタイプを [フリート Engine で billingable_tasks 指標を検索します。

    指標を検索

    右側のグラフは、billingable_tasks 呼び出しの割合を示しています。

BigQuery の使用

BigQuery は分析を行うための強力なツールです。データの保存と SQL のようなアドホックなクエリを実行できます。

BigQuery へのログのルーティング

BigQuery を活用するには、次のように、ログを BigQuery データストアにルーティングする必要があります。 次のようになります。

  1. Cloud コンソールで、[ロギング]、[ログ エクスプローラ] の順に選択します。

  2. Fleet Engine ログを分離するフィルタを作成します。ログのフィールドエクスプローラで Fleetengine.googleapis.com/DeliveryFleet リソースタイプを選択します。

    作成
フィルタ

  3. [クエリ結果] ペインで、[アクション] プルダウンをクリックし、[作成 シンク

    作成
シンク

  4. [シンクサービスの選択] ダイアログで、[BigQuery データセット] を選択します。

    選択
シンク

  5. [シンクの編集] ダイアログで、次のオプションを指定します。

    • シンク名を指定します(例: FleetEngineLogsSink)。
    • シンクサービスは [BigQuery] のままにします。
    • [パーティション分割テーブルを使用する] オプションを選択します。クエリが増加し 向上します
    • [シンクの宛先] で [新しい BigQuery データセットを作成する] を選択し、 BigQuery データセット名(FleetEngineLogs など)を指定します。
    • [シンクを作成] ボタンをクリックします。

    編集
    シンク

これで、BigQuery データセットへのログの記録が開始されます。詳しくは、 Cloud コンソールの [BigQuery] セクションで確認できます。

BigQuery
セクション

FleetEngineLogs データセットの複数のテーブルにデータが入力されます。 ログタイプごとに 1 つずつ自動的に作成されます。

  • CreateDeliveryVehicle
  • GetDeliveryVehicle
  • ListDeliveryVehicle
  • UpdateDeliveryVehicle
  • CreateTask
  • GetTask
  • UpdateTask
  • ListTasks

テーブル名は次のパターンを使用します。

project_id.data_set.log_name

たとえば、プロジェクトの名前が test_project で、データセット名が FleetEngineLogs の場合、CreateTask テーブルの名前は次のとおりです。

test_project.FleetEngineLogs.fleetengine_googleapis_com_create_task

クエリの例

このセクションでは、作成できるクエリの例を示します。

1 時間あたりに作成されるタスク

次のクエリは、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 時間あたりの経由地数

次のクエリは、車両が運行、または運行停止した停車地の数を生成します。 削減できます

たとえば、このクエリは過去 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`
  1. [グラフの種類] で [バブルマップ] を選択し、位置フィールドを選択します。

    グラフ
種類

  2. [フィールドを作成] を選択します。

    作成
フィールド

  3. フィールドに名前を付け、数式 CONCAT(lat, ",", lng) を追加します。

    タイプを [Geo] -> [Latitude, Longitude] に設定します。

    セット
種類

  4. ダッシュボードにコントロールを追加して、データをフィルタできます。たとえば、 期間フィルタを使用します。

    追加
設定

  5. 期間ボックスを編集して、デフォルトの期間を選択します。

    日付
範囲

  6. delivery_vehicle_id については、プルダウン リスト コントロールを追加できます。

    プルダウン
リスト

これらのコントロールにより、車両の動きや 配信内の動作を表します。