Logowanie

Fleet Engine oferuje prostą usługę logowania, która umożliwia zapisywanie żądań interfejsu API i ładunków odpowiedzi. Korzystając z tych logów, możesz debugować integrację, tworzyć wskaźniki monitorowania i analizować wzorce ruchu.

Fleet Engine wysyła logi jako logi platformy do Cloud Logging, aby umożliwić Ci dostęp do nich za pomocą narzędzi Cloud Logging.

Co loguje Fleet Engine

Fleet Engine wysyła do Cloud Logging wiele informacji, na przykład:

  • Wszystkie uwierzytelnione żądania i odpowiedzi REST i gRPC
  • Odpowiedzi na błędy
  • Żądania, odpowiedzi i komunikaty o błędach pochodzące z wywołań zainicjowanych przez pakiet SDK sterowników do Fleet Engine.
  • Podziel logi dla obsługiwanych typów logów:

Listę dostępnych komunikatów logu i ich schemat znajdziesz w materiałach dotyczących logowania.

Używaj ograniczonych i domyślnych zasobników logów w celu zapewnienia zgodności z zasadami przechowywania danych

Użycie zasobników „z ograniczeniami” i „domyślnych” daje wyraźny obraz ograniczonego i nieograniczonego wykorzystania danych. Niektóre dane logów wysyłane przez Fleet Engine do Google Maps Platform mogą być przechowywane tylko przez ograniczony czas zgodnie ze szczegółowymi warunkami korzystania z usług mobilnych. Aby dane z ograniczeniami były przechowywane tylko przez dozwolony czas, powinny one być oznaczone jako TOS_RESTRICTED (funkcja Fleet Engine już to robi) i zarejestrowane w dedykowanym zasobniku o nazwie „restricted”,

W ustawieniach Cloud Logging możesz określić, jak długo ma być przechowywana, i automatycznie trwale ją trwale usuwać. Na przykład logi o ograniczonym wykorzystaniu powinny być przechowywane przez 30 dni.

Zapisz wszystkie pozostałe dane bez ograniczeń w „domyślnym” zasobniku, w którym mogą być przechowywane przez dłuższy czas, zgodnie z Szczegółowymi warunkami korzystania z usług mobilnych (zwykle przez 1 rok). Korzystanie z zasobników „z ograniczeniami” i „domyślnych” zapewnia wyraźny obraz ograniczonego i nieograniczonego wykorzystania danych.

Uzyskaj pełny widok, scalając logi ograniczone i nieograniczone

Logi o ograniczonym wykorzystaniu zawierają dane o ograniczonym wykorzystaniu oraz odwołanie do logu domyślnego, dzięki czemu można je traktować razem. Log ograniczonego użycia zawiera w polu parent_insert_id domyślny identyfikator insertId logu jako odwołanie. Za pomocą tego pola możesz złączyć dane z obu logów i uzyskać pełny obraz.

Dokumentację wszystkich dostępnych komunikatów logów i schematu znajdziesz w materiałach dotyczących logowania.

Włączam Cloud Logging

Fleet Engine automatycznie włącza logi domyślne dla nowych klientów Mobility, począwszy od projektów utworzonych 10 lutego 2022 r. Aby sprawdzić, czy logowanie jest włączone, użyj zapytania w Eksploratorze logów :

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

Jeśli nie widzisz żadnych logów dla tego zapytania, być może usługa Cloud Logging nie została włączona w Twoim projekcie. Jeśli chcesz włączyć tę funkcję, skontaktuj się z zespołem pomocy.

Włącz logi o ograniczonym wykorzystaniu

Logi o ograniczonym wykorzystaniu są włączane na żądanie. Aby włączyć te logi w projekcie Google Cloud, wykonaj te czynności:

Przygotowywanie projektu do otrzymywania logów o ograniczonym wykorzystaniu

  1. W konsoli Google Cloud otwórz stronę Router logów.
  2. Zaktualizuj zasobnik logowania _Default, aby wykluczyć logi o ograniczonym wykorzystaniu.
    1. Wybierz zasobnik logowania _Default, a następnie kliknij Edytuj ujście.
    2. W sekcji „Wybierz logi, które mają być odfiltrowywane z ujścia” kliknij przycisk „Dodaj wykluczenie”:
      1. Nazwa filtra wykluczeń: WykluczRestrictedLogs
      2. Filtr wykluczeń: label.restriction="TOS_RESTRICTED"
    3. Kliknij „Zaktualizuj ujście”.
  3. Zaktualizuj zasobnik logowania z ograniczonym dostępem, aby przechowywać logi o ograniczonym wykorzystaniu.
    1. Na stronie Router logów wybierz „Utwórz ujście”.
    2. Utwórz ujście z następującymi ustawieniami:
      1. Szczegóły ujścia:
        1. Nazwa: RestrictedLogs
        2. Opis: logi ograniczonego użycia Fleet Engine
      2. Miejsce docelowe ujścia:
        1. Usługa ujścia: zasobnik Logging
        2. Wybierz zasobnik logów: utwórz nowy zasobnik logów
          1. Nazwa: Zastrzeżony
          2. Opis: zawiera logi o ograniczonym wykorzystaniu Fleet Engine
        3. Okres przechowywania: 30 dni
          1. Uwaga: okres przechowywania nie może przekraczać 30 dni.
      3. Logi do uwzględnienia w ujścia: pozostaw puste
      4. Logi, które mają być odfiltrowywane z ujścia: kliknij „Dodaj wykluczenie”.
        1. Nazwa filtra wykluczeń: ExcludeNonRestrictedLogs
        2. Filtr wykluczania: NOT (resource.type = "fleetengine.googleapis.com/Fleet" OR resource.type = "fleetengine.googleapis.com/DeliveryFleet") NOT (labels.restriction = "TOS_RESTRICTED")
      5. Kliknij „Utwórz ujście”

Aby włączyć logi o ograniczonym wykorzystaniu, skontaktuj się z zespołem pomocy

Następnie skontaktuj się z zespołem pomocy i podaj w zgłoszeniu te informacje:

  1. Identyfikatory projektów do włączenia:
  2. Adres e-mail osoby, która prosi o zmianę:
    1. Uwaga: ta osoba powinna mieć uprawnienia do edycji wymienionych projektów Google Cloud.
  3. Włączając Treści z Map Google objęte ograniczeniami w usłudze Cloud Logging, Użytkownik zgadza się przestrzegać warunków korzystania z Google Maps Platform oraz warunków dotyczących usług mobilnych, w tym dotyczących buforowania i dozwolonego użytkowania, w odniesieniu do Treści Map Google. Tak/nie

Gdy zespół pomocy otrzyma Twoją prośbę, wyśle potwierdzenie, że logowanie zostało włączone w projekcie

Podziel logi chmury

Cloud Logging ogranicza rozmiar logów przychodzących do 256 KB. Usługa usuwa logi przekraczające ten próg. Aby mieć pewność, że Cloud Logging będzie przechowywać duże logi, Fleet Engine może podzielić je na serię logów poniżej progu 256 KB. Takie logi mają wspólny prefiks insertId, który wskazuje kolejność, w jakiej usługa dzieli mniejszy log od pierwotnego logu zbyt dużego. Możesz potem połączyć je ponownie na podstawie identyfikatora insertId.

Aby uzyskać dostęp do pierwotnego logu niepodzielnego, scal logi podzielone według ich identyfikatorów insertId w pierwotnej kolejności, w jakiej zostały podzielone, zgodnie z indeksem we wpisie logu chmury.

Struktura logów podzielonych jest taka sama jak struktura omówiona w przewodniku po wpisach logów kontrolnych podzielonych. Główna różnica w przypadku logów podzielonych we flocie Logging polega na tym, że podział ma miejsce w polu jsonPayload, a nie w polu protoPayload. Przykładowy podział jest przedstawiony w następnej sekcji.

Obsługiwane typy logów

Fleet Engine obsługuje dzielenie logów tylko w przypadku tych typów logów, których rozmiar przekracza 256 KB:

Przykładowa struktura logów podziału

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

Dostęp do dzienników

Struktura logów Cloud opiera się na formacie LogEntry. Fleet Engine wysyła logi do Cloud Logging z wartością resource.type logEntry ustawioną na fleetengine.googleapis.com. Do zapisywania zapytań wyświetlania logów możesz użyć eksploratora logów.

Aby na przykład wyświetlić wszystkie wywołania RPC we Fleet Engine, które zwróciły błąd, użyj tego zapytania eksploratora logów:

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

Aby wyświetlić logi RPC wysłane do metody UpdateDeliveryVehicle dla example-project-id projektu, użyj tego zapytania eksploratora logów:

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

Poniższy przykład pokazuje wpis logu dla logu UpdateDeliveryVehicle. Żądanie i odpowiedź RPC znajdują się w polu 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"
    }

Jeśli zostanie zwrócony błąd RPC, pole responseDeliveryVehicle jest czyszczone, a pole errorResponse zostaje ustawione i uzupełnione w 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"
    }

Więcej informacji o języku zapytań dotyczących logów znajdziesz w sekcji Język zapytań dotyczących logowania. Informacje o tym, jak możesz używać logów do tworzenia wskaźników, znajdziesz w artykule Omówienie wskaźników opartych na logach.

Zarządzanie kosztami logowania

Po włączeniu logowania odpowiadasz za skonfigurowanie sposobu kierowania, przechowywania i przechowywania logów. W przypadku bezpłatnego przekroczenia limitów wykorzystania i przechowywania w Google Cloud mogą zostać naliczone dodatkowe opłaty za przetwarzanie i przechowywanie logów. Możesz jednak kontrolować koszty rejestrowania, wykonując jedną z tych czynności:

Ogranicz użycie logowania

Możesz ograniczyć ilość przetwarzanych danych logu, wykluczając określone wpisy.

Eksportuj lub kieruj logi

Aby uniknąć domyślnych kosztów przetwarzania i przechowywania, możesz kierować logi do innych miejsc docelowych Google Cloud lub zewnętrznych miejsc docelowych. Aby uniknąć kosztów pozyskiwania, wyłącz pozyskiwanie logów w sposób opisany w następnej sekcji.

Wyłącz pozyskiwanie logów, aby uniknąć opłat

Zmniejszenie wykorzystania logowania lub eksportowanie bądź routing logów jest lepszym rozwiązaniem niż wyłączenie pozyskiwania logów. Jeśli jednak nie chcesz używać logów Fleet Engine, możesz uniknąć potencjalnych opłat za Cloud Logging, wyłączając pozyskiwanie danych. Domyślnie logi Fleet Engine są kierowane do zasobnika logów _Default.

Poniższe polecenie aktualizuje zasobnik logowania _Default tak, aby nie przetwarzał logów Fleet 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"''

Więcej informacji znajdziesz w artykułach Wykluczenia Cloud Logging i Wykluczanie logów. Eksporty Cloud Logging i eksportowanie logów

Korzystanie z eksploratora logów

Aby użyć eksploratora logów, otwórz konsolę Cloud, wybierz Logowanie, a następnie Eksplorator logów. Aby wyświetlić listę wszystkich dostępnych logów Fleet Engine, kliknij typ zasobu Fleet Engine. Niektóre logi interfejsu Delivery API są oznaczone identyfikatorem zadania i identyfikatorem pojazdu dostawy. Możesz użyć tych etykiet, aby wybrać logi z zadaniami lub pojazdami, które Cię interesują.

Etykiety logów

Filtruj dzienniki według identyfikatora pojazdu dostawy

W eksploratorze logów możesz użyć tego zapytania, aby ograniczyć logi do konkretnego pojazdu:

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

Filtruj pojazd

Filtruj logi według identyfikatora zadania

W eksploratorze logów możesz użyć tego zapytania, aby ograniczyć logi do konkretnego zadania:

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

Filtrowanie dzienników dotyczących pojazdu w wybranym okresie

W eksploratorze logów możesz użyć tego zapytania, aby ograniczyć logi do danych pojazdu w wybranym przedziale czasu:

    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"

Przykład wskaźników opartych na logach

Poniższy przykład pokazuje, jak za pomocą wskaźników opartych na logach śledzić liczbę zadań utworzonych w czasie.

  1. W konsoli Cloud wybierz Logowanie, a następnie Eksplorator logów, aby otworzyć eksplorator logów. Następnie zastosuj ten filtr:

    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. W panelu Wyniki zapytania kliknij menu Działania, a następnie Utwórz wskaźnik.

    Utwórz wskaźnik

  3. W oknie edytora wskaźników:

    • Podaj nazwę danych (np. billable_tasks).
    • Określ opis wskaźnika (np. Liczba zadań podlegających rozliczeniu).
    • Pozostaw opcję Units (Jednostki) pustą. W polu Typ pozostaw Licznik.

    Następnie kliknij przycisk Utwórz wskaźnik.

  4. Na stronie Wskaźniki oparte na logach powinien pojawić się komunikat potwierdzający utworzenie wskaźnika, a nowy wskaźnik powinien pojawić się w sekcji wskaźników definiowanych przez użytkownika. Wskaźnik będzie teraz wypełniany w miarę generowania pasujących logów.

  5. Wybierz pionowe menu po prawej stronie nowych danych, a następnie wybierz Wyświetl w narzędziu Metrics Explorer.

    Wyświetl dane

  6. W panelu po lewej stronie w sekcji Utwórz zapytanie ustaw typ zasobu na Fleet Engine i wyszukaj wskaźnik billable_tasks.

    Wyszukaj dane

    Wykres po prawej stronie pokazuje współczynnik wywołań płatnych_zadań.

Korzystanie z BigQuery

BigQuery to zaawansowane narzędzie do przeprowadzania analiz. Może służyć do przechowywania logów o dłuższym okresie i wykonywania doraźnych zapytań w języku SQL na podstawie danych.

Kieruję logi do BigQuery

Aby korzystać z BigQuery, logi muszą być kierowane do magazynu danych BigQuery w następujący sposób:

  1. W konsoli Cloud wybierz Logowanie, a następnie Eksplorator logów.

  2. Utwórz filtr, który izoluje logi Fleet Engine. W Eksploratorze pól logów wybierz typ zasobu Fleetengine.googleapis.com/DeliveryFleet.

    Utwórz
filtr

  3. W panelu Wyniki zapytania kliknij menu Działania i wybierz Utwórz ujście.

    Utwórz ujście

  4. W oknie Wybierz usługę ujścia wybierz Zbiór danych BigQuery.

    Wybierz
ujście

  5. W oknie dialogowym Edytuj ujście określ następujące opcje:

    • Podaj nazwę ujścia (na przykład FleetEngineLogsSink).
    • Pozostaw usługę ujścia jako BigQuery.
    • Wybierz opcję Użyj tabel partycjonowanych. Zwiększy to wydajność zapytań.
    • W sekcji Miejsce docelowe ujścia wybierz Utwórz nowy zbiór danych BigQuery, a następnie podaj nazwę zbioru danych BigQuery (na przykład FleetEngineLogs).
    • Kliknij przycisk Utwórz ujście.

    Edytuj ujście

Logi powinny teraz zacząć wypełniać zbiór danych BigQuery. Dane można zobaczyć w sekcji BigQuery w konsoli Cloud.

Sekcja BigQuery

Kilka tabel w zbiorze danych FleetEngineLogs zostanie automatycznie uzupełnionych, po 1 dla każdego typu logu:

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

Nazwy tabel mają następujący wzorzec:

project_id.data_set.log_name

Jeśli na przykład projekt nazywa się test_project, a zbiór danych to test_project, tabela CreateTask ma tę nazwę:

test_project.FleetEngineLogs.fleetengine_googleapis_com_create_task

Przykładowe zapytania

W tej sekcji znajdziesz przykłady zapytań, które możesz utworzyć.

Zadania utworzone na godzinę

To zapytanie zlicza liczbę logów CreateTasks i grupuje je według godzin.

    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

Liczba przesiadek na pojazd na godzinę

Zapytanie poniżej generuje liczbę przystanków obsługiwanych przez pojazd z podziałem na godziny.

To zapytanie może na przykład wskazywać, że w ciągu ostatniej godziny:

  • Pojazd A pokonał 10 przesiadek w godziny 12 i 8 przesiadkach w godziny 13.
  • Pojazd B zatrzymał się 5 przesiadek w godziny 11 i 7 przesiadkach w godzinie 12.
  • Pojazd C ma 12 przesiadek w godziny 13 i 9 przesiadek w godziny 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
    

Wskaźnik sukcesu pierwszego dostarczenia

Zapytanie poniżej, które pokazuje odsetek sukcesu w przypadku pierwszej próby wyświetlenia.

    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

Panele Studia danych

BigQuery można zintegrować z narzędziami do analityki biznesowej, a na potrzeby analityki biznesowej można tworzyć panele.

Poniższy przykład pokazuje, jak utworzyć panel, który pozwala zwizualizować na mapie zadania i ruch pojazdów.

  1. Uruchomić nowy panel Studia danych i wybrać BigQuery jako połączenie danych.

    Połączenie danych

  2. Wybierz zapytanie niestandardowe i wskaż projekt Cloud, który ma być obciążany opłatami.

    Wybierz projekt

  3. Wpisz podane niżej zapytanie w polu zapytania.

    Wpisz zapytanie

    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. Jako typ wykresu wybierz Mapa bąbelkowa, a następnie wybierz pole lokalizacji.

    Typ wykresu

  2. Wybierz Utwórz pole.

    Utwórz pole

  3. Nazwij to pole i dodaj tę formułę: CONCAT(lat, ",", lng).

    Następnie ustaw typ na Geo->szerokość geograficzna, długość geograficzna.

    Ustaw typ

  4. Do panelu możesz dodać elementy sterujące, aby filtrować dane. Na przykład wybierz filtr Zakres dat.

    Dodaj elementy sterujące

  5. Aby wybrać domyślny zakres dat, edytuj pole zakresu dat.

    Zakres dat

  6. Możesz dodać kolejne elementy sterujące rozwijaną listą dla pola delivery_vehicle_id.

    Lista

Za pomocą tych elementów sterujących możesz wizualizować ruch pojazdu lub ruch w dostawie.