Journalisation

Fleet Engine propose un service de journalisation simple qui vous permet d'enregistrer requêtes API et charges utiles de réponse. Ils vous permettent de déboguer créer des métriques de surveillance et analyser les tendances du trafic.

Fleet Engine envoie les journaux via la plate-forme les journaux vers Cloud Cloud Logging, ce qui vous permet d'utiliser Logging pour y accéder.

Informations consignées par Fleet Engine

Fleet Engine envoie de nombreuses informations à Cloud Logging, par exemple:

  • Toutes les requêtes et réponses REST et gRPC authentifiées
  • Réponses d'erreur
  • Requêtes, réponses et messages d'erreur liés aux appels initiés par le pilote vers Fleet Engine via le SDK.
  • Divisez les journaux en fonction des types de journaux compatibles:

Consultez la documentation pour connaître les messages de journal et le schéma disponibles dans Logging Documentation de référence.

Utiliser des buckets de journaux restreints et par défaut pour respecter les règles de conservation des données

Utilisation de "restricted" et "par défaut" vous permet d'avoir une idée claire une utilisation restreinte et non restreinte des données. Certaines des données de journal générées par Fleet Engine envoyées à Google Maps Platform ne peuvent être conservées que pendant une période limitée, conformément aux Consignes spécifiques aux services de mobilité Conditions d'utilisation. Pour vous assurer de conserver les données soumises à des restrictions uniquement pendant la durée autorisée, ces données doivent être étiquetées avec l'étiquette TOS_RESTRICTED (le parc de véhicules effectue déjà cette opération). et consignés dans un bucket dédié appelé "restricted".

Vous pouvez alors contrôler leur durée de conservation et les supprimer automatiquement à l'aide des paramètres Cloud Logging. Par exemple, les journaux à usage restreint être conservées pendant 30 jours seulement.

Consigner toutes les données non restreintes restantes avec la valeur "par défaut" dans un bucket Cloud Storage, conservées pendant de plus longues périodes, telles que définies dans les Règles spécifiques aux Conditions d'utilisation (généralement sur un an). Utilisation de "restricted" et "par défaut" permet de s'assurer que une image de votre consommation limitée et non restreinte des données.

Obtenez une vue complète en fusionnant les journaux restreints et non restreints

Ces journaux contiennent les données correspondantes ainsi qu'une référence aux le journal par défaut afin qu'ils puissent être considérés comme ensemble. Le journal à usage limité contient l'insertId du journal par défaut comme référence dans le fichier parent_insert_id. . Vous pouvez utiliser ce champ pour joindre les données des deux journaux et obtenir une image complète.

Consultez la documentation pour connaître tous les messages de journal et schémas disponibles dans la documentation Logging Documentation de référence.

Activer Cloud Logging

Fleet Engine active automatiquement les journaux par défaut pour les nouveaux clients Mobility, en commençant par les projets créés le 10 février 2022. Vous pouvez vérifier si la journalisation est activée à l'aide de la requête suivante dans la section Journaux Explorateur :

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

Si aucun journal ne s'affiche pour cette requête, il est possible que Cloud Logging n'ait pas pour votre projet. Contact de l'assistance si vous souhaitez pour activer la fonctionnalité.

Activer les journaux à utilisation limitée

Les journaux à usage limité sont activés sur demande. Pour activer ces journaux pour votre compte Google Cloud, procédez comme suit:

Préparer votre projet pour recevoir des journaux à usage restreint

  1. Dans la console Google Cloud, ouvrez la page du routeur de journaux.
  2. Mettez à jour le bucket de journalisation _Default pour exclure les journaux à utilisation limitée.
    1. Sélectionnez le bucket de journalisation _Default, puis cliquez sur Modifier le récepteur.
    2. Dans "Sélectionner les journaux à exclure du récepteur" cliquez sur le bouton "Ajouter Exclusion" bouton: <ph type="x-smartling-placeholder">
        </ph>
      1. Nom du filtre d'exclusion: ExcludeRestrictedLogs
      2. Filtre d'exclusion: labels.restriction="TOS_RESTRICTED"
    3. Cliquez sur "Mettre à jour le récepteur".
  3. Mettez à jour le bucket de journalisation restreinte pour stocker les journaux à utilisation limitée.
    1. Sur la page "Routeur de journaux", sélectionnez "Créer un récepteur".
    2. Créez un récepteur avec les paramètres suivants: <ph type="x-smartling-placeholder">
        </ph>
      1. Détails du récepteur: <ph type="x-smartling-placeholder">
          </ph>
        1. Nom: RestrictedLogs
        2. Description: journaux à usage restreint de Routes Fleet Engine
      2. Destination du récepteur: <ph type="x-smartling-placeholder">
          </ph>
        1. Service du récepteur: bucket Logging
        2. Sélectionner un bucket de journaux: créer un bucket de journaux <ph type="x-smartling-placeholder">
            </ph>
          1. Nom: Limité
          2. Description: contient les journaux à usage limité Fleet Engine
        3. Durée de conservation: 30 jours <ph type="x-smartling-placeholder">
            </ph>
          1. Remarque: La durée de conservation ne doit pas dépasser 30 jours.
      3. Journaux à inclure dans le récepteur: laissez ce champ vide
      4. Journaux à exclure du récepteur: cliquez sur "Ajouter une exclusion" <ph type="x-smartling-placeholder">
          </ph>
        1. Nom du filtre d'exclusion: ExcludeNonRestrictedLogs
        2. Filtre d'exclusion: NOT (resource.type = &quot;fleetengine.googleapis.com/Fleet&quot; OU resource.type = "fleetengine.googleapis.com/DeliveryFleet") NOT (labels.restriction = "TOS_RESTRICTED")
      5. Cliquez sur "Créer un récepteur".

Contactez l'assistance pour activer les journaux à utilisation limitée

Ensuite, contactez de l'assistance Google Cloud et de fournir les informations suivantes dans votre demande d'assistance:

  1. ID des projets à activer:
  2. Adresse e-mail de la personne à l'origine de la demande de modification: <ph type="x-smartling-placeholder">
      </ph>
    1. Remarque: Cette personne doit disposer d'un accès en modification aux projets Google Cloud dans la liste.
  3. En activant l'utilisation limitée du contenu Google Maps dans Cloud Logging, vous acceptez pour respecter Google Maps Platform conditions d'utilisation et Services de mobilité spécifiques conditions d'utilisation, y compris les exigences concernant la mise en cache et l'utilisation autorisée Contenu Maps. Oui/Non

Une fois que l'équipe d'assistance reçoit votre demande, elle vous envoie une confirmation indiquant que la journalisation a été activée pour votre projet

Diviser les journaux cloud

Cloud Logging limite la taille des journaux entrants à 256 Ko. Le service supprime les journaux au-delà de ce seuil. Pour s'assurer que Cloud Logging conserve des journaux volumineux, le parc Compute Engine peut les diviser en une série de journaux en dessous du seuil de 256 Ko. Ces journaux ont en commun insertId pour indiquer l'ordre dans lequel le service a divisé le journal le plus petit du un journal surdimensionné d'origine. Vous pouvez ensuite les réassocier insertId.

Pour accéder au journal non fractionné d'origine, fusionnez les journaux fractionnés en fonction de leur insertIds dans l'ordre d'origine dans lequel elles ont été divisées, comme l'indique leur index dans l'entrée de journal cloud.

La structure du journal fractionné est identique à celle mentionnée dans la section Audit fractionné des entrées de journal Cloud Audit Logs. La principale différence entre les journaux fractionnés et la journalisation de parc la division se produit dans le champ jsonPayload, et non dans protoPayload. . Consultez l'exemple de fractionnement présenté dans la section suivante.

Types de journaux compatibles

Fleet Engine n'accepte le fractionnement des journaux que pour les types de journaux suivants. dont la taille de journal dépasse 256 Ko:

Exemple de structure de journal fractionné

// 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
  }
}

Accéder à vos journaux

Les journaux Cloud sont structurés autour LogEntry . Fleet Engine envoie des journaux à Cloud Logging avec l'objet LogEntry resource.type définie sur fleetengine.googleapis.com. Vous pouvez utiliser la page Journaux de l'explorateur vers écrire des requêtes pour afficher les journaux.

Par exemple, pour afficher tous les RPC vers Fleet Engine qui ont renvoyé une erreur, utilisez la méthode requête de l'Explorateur de journaux suivante:

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

Pour afficher les journaux des RPC effectués dans la méthode UpdateDeliveryVehicle pour la project example-project-id, utilisez la requête suivante de l'explorateur de journaux:

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

L'exemple suivant montre une entrée LogEntry pour UpdateDeliveryVehicle journal. La requête et la réponse RPC se trouvent dans le champ 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"
    }

Si une erreur RPC est renvoyée, le champ responseDeliveryVehicle est effacé, et le champ errorResponse est défini et renseigné dans 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"
    }

Pour en savoir plus sur le langage de requête Logging, consultez la section Requête Logging langue. Pour savoir comment créer des métriques à l'aide de vos journaux, consultez la section Présentation basée sur les journaux métriques.

Gérer les coûts de journalisation

Une fois la journalisation activée, vous êtes responsable de la configuration pour acheminer, stocker et conserver vos journaux. Des frais supplémentaires de Google Cloud charges pour les journaux et la conservation des données si vous dépassez les limites d'utilisation et de conservation charge. Toutefois, vous pouvez contrôler les coûts de journalisation en effectuant l'une des opérations suivantes:

Réduire l'utilisation de la journalisation

Vous pouvez limiter la quantité de données de journaux ingérées en excluant certaines entrées de journal.

Exporter ou acheminer les journaux

Vous pouvez acheminer les journaux vers d'autres destinations Google Cloud ou des destinations externes pour éviter d'ingestion et de stockage par défaut. Désactivez l'ingestion de journaux, décrites dans la section suivante, afin d'éviter les coûts d'ingestion.

Désactivez l'ingestion de journaux pour éviter des frais

Il est préférable de réduire l'utilisation des journaux, ou de les exporter ou de les router, plutôt que de les de l'ingestion de journaux. Toutefois, si vous n'avez pas l'intention d'utiliser les journaux Fleet Engine, vous pouvez éviter des frais Cloud Logging potentiels en désactivant l'ingestion. Par défaut, Les journaux Fleet Engine sont acheminés vers le bucket de journaux _Default.

La commande suivante met à jour le bucket de journalisation _Default pour qu'il n'ingère pas le parc les journaux du moteur de recherche.

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"''

Pour en savoir plus, consultez la page Cloud Logging Exclusions et Exclusion journaux. Cloud Logging Exportations et exportation journaux

Utiliser l'explorateur de journaux

Pour utiliser l'explorateur de journaux, ouvrez la console Cloud, sélectionnez Journalisation, puis Explorateur de journaux : Pour afficher la liste de tous les journaux Fleet Engine disponibles, cliquez sur le type de ressource Moteur du parc. Certains journaux de l'API Delivery sont associés à un libellé ID de la tâche et ID du véhicule de livraison. Vous pouvez utiliser ces étiquettes pour sélectionner les journaux les tâches ou les véhicules qui vous intéressent.

Libellés de journaux

Filtrer les journaux par ID de véhicule de livraison

Dans l'explorateur de journaux, vous pouvez utiliser la requête suivante pour limiter les journaux à un véhicule spécifique:

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

Filtrer les véhicules

Filtrer les journaux par ID de tâche

Dans l'explorateur de journaux, vous pouvez utiliser la requête suivante pour limiter les journaux à un tâche spécifique:

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

Filtrer les journaux d'un véhicule sur une période spécifique

Dans l'explorateur de journaux, vous pouvez utiliser la requête suivante pour limiter les journaux à ceux pour un véhicule sur une période donnée:

    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"

Exemple de métriques basées sur les journaux

L'exemple suivant montre comment utiliser les métriques basées sur les journaux pour suivre le nombre des tâches créées au fil du temps.

  1. Dans la console Cloud, sélectionnez Journalisation, puis Explorateur de journaux pour ouvrir l'explorateur de journaux. Appliquez ensuite le filtre suivant:

    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. Dans le volet "Résultats de la requête", sélectionnez le menu déroulant Actions, puis sélectionnez Créer une métrique.

    Créer une métrique

  3. Dans la boîte de dialogue de l'éditeur de métriques:

    • Spécifiez un nom de métrique (par exemple, billable_tasks).
    • Spécifiez une description de métrique (par exemple, Le nombre de Tasks).
    • Laissez l'option Units (Unités) vide. _ Laissez l'option Type définie sur Compteur.

    Sélectionnez ensuite le bouton Create Metric (Créer une métrique).

  4. Sur la page "Métriques basées sur les journaux", un message doit confirmer que a bien été créée et doit apparaître dans la Section "Métriques définies par l'utilisateur" La métrique est alors renseignée les journaux sont générés.

  5. Sélectionnez le menu déroulant vertical situé à droite de la nouvelle métrique, puis sélectionnez Afficher dans l'explorateur de métriques.

    Afficher la métrique

  6. Dans le volet de gauche, sous "Créer votre requête", définissez le type de ressource sur Parc Google Cloud et recherchez la métrique billable_tasks.

    Rechercher une statistique

    Le graphique de droite montre le taux d'appels billable_tasks.

Utiliser BigQuery

BigQuery est un outil puissant pour effectuer des analyses. Il peut être utilisé pour stocker des journaux à plus long terme et d’exécuter des requêtes de type SQL ad hoc sur les données.

Acheminer les journaux vers BigQuery

Pour tirer parti de BigQuery, les journaux doivent être acheminés vers un datastore BigQuery, ce qui suit:

  1. Dans la console Cloud, sélectionnez Journalisation, puis Explorateur de journaux.

  2. Créez un filtre qui isole les journaux Fleet Engine. Dans l'explorateur de champs de journaux, sélectionnez le type de ressource Fleetengine.googleapis.com/DeliveryFleet.

    Créer
filtre

  3. Dans le volet "Résultats de la requête", cliquez sur le menu déroulant "Actions" et sélectionnez Créer Récepteur.

    Créer
évier

  4. Dans la boîte de dialogue "Sélectionner le service de récepteur", sélectionnez Ensemble de données BigQuery.

    Sélectionner
lavabo

  5. Dans la boîte de dialogue "Modifier le récepteur", spécifiez les options suivantes:

    • Spécifiez un nom de récepteur (par exemple, FleetEngineLogsSink).
    • Laissez le service du récepteur défini sur BigQuery.
    • Sélectionnez l'option Utiliser des tables partitionnées. Cela augmentera le nombre de requêtes des performances.
    • Sous "Destination du récepteur", sélectionnez Créer un ensemble de données BigQuery. Spécifiez un nom d'ensemble de données BigQuery (par exemple, FleetEngineLogs).
    • Cliquez sur le bouton Créer un récepteur.

    Modifier
    lavabo

Vos journaux devraient maintenant commencer à remplir l'ensemble de données BigQuery. Vous pouvez voir dans la section "BigQuery" de la console Cloud.

BigQuery
section

Plusieurs tables de l'ensemble de données FleetEngineLogs seront renseignées automatiquement, un pour chaque type de journal:

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

Les noms de table utilisent le format suivant:

project_id.data_set.log_name

Par exemple, si le projet s'appelle test_project et que le nom de l'ensemble de données est FleetEngineLogs, la table CreateTask porte le nom suivant:

test_project.FleetEngineLogs.fleetengine_googleapis_com_create_task

Exemples de requêtes

Cette section présente des exemples de requêtes que vous pouvez créer.

Tâches créées par heure

La requête suivante compte le nombre de journaux CreateTasks et les regroupe par heure.

    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

Nombre d'arrêts par véhicule et par heure

La requête suivante génère le nombre d'arrêts desservis par un véhicule, toutes les heures.

Par exemple, cette requête peut indiquer que dans la dernière heure:

  • Le véhicule A a effectué 10 arrêts au cours de l'heure 12 et 8 arrêts au cours de l'heure 13.
  • Le véhicule B a effectué 5 arrêts au cours de l'heure 11 et 7 arrêts au cours de l'heure 12.
  • Le véhicule C a effectué 12 arrêts au cours de l'heure 13 et 9 arrêts au cours de l'heure 14.

    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
    

Taux de réussite de la première distribution

La requête suivante, qui indique le pourcentage de réussite lors de la première diffusion le taux de tentatives.

    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

Tableaux de bord Data Studio

BigQuery peut être intégré aux outils d'informatique décisionnelle, et les tableaux de bord peuvent être créées pour l'analyse commerciale.

L'exemple suivant montre comment créer un tableau de bord sur lequel les tâches et les véhicules les déplacements peuvent être visualisés sur une carte.

  1. Lancer un nouveau tableau de bord Data Studio et sélectionner BigQuery comme données .

    Données
connexion

  2. Sélectionnez "Requête personnalisée", puis le projet Cloud auquel la requête doit être facturés.

    Sélectionner
projet

  3. Saisissez la requête suivante dans la zone de requête.

    Entrée
requête

    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. Sélectionnez le type de graphique Carte à bulles, puis sélectionnez le champ "Emplacement".

    Graphique
Type

  2. Sélectionnez Créer un champ.

    Créer
champ

  3. Attribuez un nom au champ et ajoutez la formule suivante: CONCAT(lat, ",", lng).

    Définissez ensuite le type sur Géo->Latitude, Longitude.

    Définir
Type

  4. Vous pouvez ajouter des commandes au tableau de bord pour filtrer les données. Par exemple, sélectionnez et utilisez le filtre "Plage de dates".

    Ajouter
commandes

  5. Modifiez la zone de sélection de la plage de dates pour sélectionner une plage de dates par défaut.

    Date
plage

  6. Vous pouvez ajouter d'autres commandes dans la liste déroulante pour delivery_vehicle_id.

    Menu déroulant
liste

Ces commandes vous permettent de visualiser le mouvement du véhicule lors d'une livraison.