Geração de registros

O Fleet Engine oferece um serviço de geração de registros simples que permite salvar as solicitações de API e os payloads de resposta. Com esses registros, é possível depurar sua integração, criar métricas de monitoramento e analisar padrões de tráfego.

O Fleet Engine envia os registros como registros de plataforma para o Cloud Logging para que você possa usar as ferramentas do Cloud Logging para acessá-los.

O que o Fleet Engine registra

O Fleet Engine envia várias informações para o Cloud Logging, como:

  • Todas as solicitações e respostas REST e gRPC autenticadas
  • Respostas de erro
  • Solicitações, respostas e mensagens de erro de chamadas iniciadas pelo SDK do driver para o Fleet Engine.
  • Dividir registros para tipos de registro com suporte:

Consulte a documentação para ver o esquema e as mensagens de registro disponíveis na Referência do Logging.

Use buckets de registros restritos e padrão para obedecer às políticas de retenção de dados

O uso de buckets "restritos" e "padrão" garante uma imagem clara do uso de dados restritos e irrestritos. Alguns dos dados de registro que o Fleet Engine envia à Plataforma Google Maps só podem ser retidos por um período limitado, de acordo com os Termos específicos de serviço de mobilidade. Para garantir que você retenha dados restritos apenas pelo tempo permitido, esses dados precisam ser rotulados como TOS_RESTRICTED (o mecanismo de frota já faz isso) e registrados em um bucket dedicado chamado "restrito".

Com isso, é possível controlar por quanto tempo eles são retidos e fazer a limpeza automática após a expiração usando as configurações do Cloud Logging. Por exemplo, os registros de uso restrito devem ser mantidos por apenas 30 dias.

Registre todos os dados irrestritos restantes no bucket "padrão", em que eles podem ser retidos por períodos mais longos, conforme definido nos Termos Específicos de Serviço de Mobilidade (normalmente por um ano). O uso de buckets "restritos" e "padrão" garante uma visão clara do uso de dados restritos e irrestritos.

Tenha uma visão completa mesclando registros restritos e irrestritos

Os registros de uso restrito contêm os dados de uso restrito e uma referência ao registro padrão para que possam ser considerados juntos. O registro de uso restrito contém o insertId do registro padrão como referência no campo parent_insert_id. É possível usar esse campo para mesclar os dados dos dois registros e ter um panorama completo.

Consulte a documentação de todas as mensagens de registro e esquema disponíveis na Referência do Logging.

Como ativar o Cloud Logging

O Fleet Engine ativa automaticamente os registros padrão para novos clientes de mobilidade, começando com projetos criados em 10 de fevereiro de 2022. É possível confirmar se a geração de registros está ativada usando a seguinte consulta na Análise de registros :

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

Se nenhum registro para essa consulta for exibido, talvez o Cloud Logging não tenha sido ativado para seu projeto. Entre em contato com o suporte se quiser ativar o recurso.

Ativar registros de uso restrito

Os registros de uso restrito são ativados mediante solicitação. Para ativar esses registros no projeto do Google Cloud, conclua as etapas a seguir:

Preparar seu projeto para receber registros de uso restrito

  1. No console do Google Cloud, abra a página do roteador de registros.
  2. Atualize o bucket de geração de registros _Default para excluir registros de uso restrito.
    1. Selecione o bucket de geração de registros _Default e, em seguida, escolha Editar coletor.
    2. Na seção "Escolher os registros para filtrar o coletor", clique no botão "Adicionar exclusão":
      1. Nome do filtro de exclusão: ExcludeRestrictedLogs
      2. Filtro de exclusão: labels.restriction="TOS_RESTRICTED"
    3. Clique em "Atualizar coletor".
  3. Atualize o bucket de registro restrito para armazenar os registros de uso restrito.
    1. Na página Roteador de registros, selecione "Criar coletor".
    2. Crie um coletor com as seguintes configurações:
      1. Detalhes do coletor:
        1. Nome: RestrictedLogs
        2. Descrição: registros de uso restrito do Fleet Engine do Routes
      2. Destino do coletor:
        1. Serviço do coletor: bucket do Logging
        2. Selecionar bucket de registros: criar novo bucket de registros
          1. Nome: Restrito
          2. Descrição: contém registros de uso restrito do Fleet Engine
        3. Período de armazenamento: 30 dias
          1. Observação: o período de armazenamento não pode exceder 30 dias.
      3. Registros a serem incluídos no coletor: deixe em branco
      4. Registros a serem filtrados do coletor: clique em "Adicionar exclusão"
        1. Nome do filtro de exclusão: ExcludeNonRestrictedLogs
        2. Filtro de exclusão: NOT (resource.type = "fleetengine.googleapis.com/Fleet" OR resource.type = "fleetengine.googleapis.com/DeliveryFleet") NOT (labels.restriction = "TOS_RESTRICTED")
      5. Clique em "Criar coletor".

Entre em contato com o suporte para ativar os registros de uso restrito

Em seguida, entre em contato com o suporte e forneça as seguintes informações na solicitação de suporte:

  1. IDs dos projetos a serem ativados:
  2. Endereço de e-mail da pessoa que está solicitando a mudança:
    1. Observação: essa pessoa precisa ter acesso para editar os projetos do Google Cloud listados.
  3. Ao ativar o conteúdo de uso restrito do Google Maps no Cloud Logging, você concorda em obedecer aos termos da Plataforma Google Maps e aos termos específicos do serviço de mobilidade, incluindo os requisitos de armazenamento em cache e de uso permitido relacionados ao conteúdo do Google Maps. Sim / Não

Depois que a equipe de suporte recebe sua solicitação, ela envia a confirmação de que a geração de registros foi ativada para seu projeto.

Dividir registros de nuvem

O Cloud Logging limita o tamanho dos registros de entrada a 256 KB. O serviço descarta registros além desse limite. Para garantir que o Cloud Logging retenha grandes registros, o Fleet Engine pode dividi-los em uma série de registros abaixo do limite de 256 KB. Esses registros têm um prefixo insertId comum para indicar a ordem em que o serviço dividiu o registro menor e o de tamanho excessivo original. Você pode juntá-los novamente com base no insertId deles.

Para acessar o registro não dividido original, mescle os registros divididos por seus insertIds na ordem original em que foram divididos, conforme indicado pelo índice na entrada de registro do Cloud.

A estrutura do registro dividido é a mesma mencionada no guia de entradas de registro de auditoria divididas para os Registros de auditoria do Cloud. A principal diferença para registros divididos no Fleet Logging é que a divisão ocorre no campo jsonPayload, e não no campo protoPayload. Confira o exemplo de divisão mostrado na próxima seção.

Tipos de registro compatíveis

O Fleet Engine é compatível com a divisão de registros apenas para os seguintes tipos de registros com tamanho superior a 256 KB:

Exemplo de estrutura de registro dividido

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

Acessar os registros

Os registros do Cloud são estruturados de acordo com o formato LogEntry. O Fleet Engine envia registros para o Cloud Logging com o resource.type do LogEntry definido como fleetengine.googleapis.com. Use a Análise de registros para gravar consultas e visualizar os registros.

Por exemplo, para ver todas as RPCs do Fleet Engine que retornaram um erro, use a seguinte consulta da Análise de registros:

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

Para visualizar os registros de RPCs feitos no método UpdateDeliveryVehicle do example-project-id do projeto, use a seguinte consulta da Análise de registros:

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

O exemplo a seguir mostra um LogEntry para o registro UpdateDeliveryVehicle. A solicitação e a resposta de RPC estão localizadas dentro do campo 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"
    }

Se um erro de RPC for retornado, o campo responseDeliveryVehicle será limpado e o campo errorResponse será definido e preenchido em 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"
    }

Para saber mais sobre a linguagem de consulta do Logging, consulte Linguagem de consulta do Logging. Para informações sobre como usar os registros para criar métricas, consulte a Visão geral de métricas com base em registros.

Gerenciar os custos do Logging

Depois que a geração de registros estiver ativada, você será responsável por configurar o roteamento, o armazenamento e a retenção dos registros. Se você exceder os limites de uso e retenção sem custos financeiros, poderá haver cobranças extras do Google Cloud pela ingestão e retenção de registros. No entanto, é possível controlar os custos de geração de registros de uma destas maneiras:

Reduzir o uso da geração de registros

É possível limitar a quantidade de ingestão de dados de registro excluindo determinadas entradas de registro.

Exportar ou rotear registros

É possível rotear os registros para outros destinos externos ou do Google Cloud a fim de evitar os custos padrão de ingestão e armazenamento. Para evitar custos de ingestão, desative a ingestão de registros, conforme descrito na próxima seção.

Desative a ingestão de registros para evitar cobranças

É preferível reduzir o uso da geração de registros, ou exportar ou encaminhar registros, em vez de desativar a ingestão de registros. No entanto, se você não pretende usar os registros do Fleet Engine, desative a ingestão para evitar possíveis cobranças do Cloud Logging. Por padrão, os registros do Fleet Engine são roteados para o bucket de registros _Default.

O comando a seguir atualiza o bucket de geração de registros _Default para não ingerir registros do 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"''

Para mais informações, consulte Exclusões do Cloud Logging e Como excluir registros. Exportações do Cloud Logging e exportação de registros

Usar o explorador de registros

Para usar a Análise de registros, abra o Console do Cloud, selecione Logging e Análise de registros. Para ver uma lista de todos os registros do Fleet Engine disponíveis, clique no tipo de recurso Fleet Engine. Alguns registros da API Delivery são identificados com um ID da tarefa e um ID do veículo de entrega. Use esses rótulos para selecionar registros para as tarefas ou veículos do seu interesse.

Rótulos de registro

Filtrar registros por ID do veículo de entrega

Na Análise de registros, use a consulta a seguir para restringir os registros a um veículo específico:

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

Filtrar veículo

Filtrar registros por ID de tarefa

Na Análise de registros, use a consulta a seguir para restringir os registros a uma tarefa específica:

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

Filtrar registros de um veículo em um período específico

Na Análise de registros, use a consulta a seguir para restringir os registros a um veículo durante um período específico:

    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"

Exemplo de métricas com base em registros

O exemplo a seguir mostra como usar métricas com base em registros para rastrear o número de tarefas criadas ao longo do tempo.

  1. No Console do Cloud, selecione Logging e, em seguida, Análise de registros para abri-la. Em seguida, aplique o seguinte filtro:

    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. No painel "Resultados da consulta", selecione o menu suspenso Ações e depois Criar métrica.

    Criar métrica

  3. Na caixa de diálogo do Editor de métricas:

    • Especifique um nome de métrica (por exemplo, billable_tasks).
    • Especifique uma descrição da métrica (por exemplo, O número de tarefas faturáveis).
    • Deixe a opção Unidades em branco. Deixe a opção Tipo como Contador.

    Em seguida, selecione o botão Criar métrica.

  4. Na página "Métricas com base em registros", você verá uma mensagem confirmando que a métrica foi criada com sucesso e que a nova métrica aparecerá na seção "Métricas definidas pelo usuário". A métrica será preenchida à medida que os registros correspondentes forem gerados.

  5. Selecione o menu suspenso vertical no lado direito da nova métrica e, em seguida, selecione Visualizar no Metrics Explorer.

    Conferir métrica

  6. No painel esquerdo, em "Criar sua consulta", defina o tipo de recurso como Mecanismo de frota e procure a métrica billable_tasks.

    Métrica de pesquisa

    O gráfico à direita mostra a taxa de chamadas billable_tasks.

Usar o BigQuery

O BigQuery é uma ferramenta poderosa para realizar análises. Ele pode ser usado para armazenar registros de longo prazo e realizar consultas ad hoc semelhantes a SQL nos dados.

Como rotear registros para o BigQuery

Para aproveitar o BigQuery, os registros precisam ser roteados para um armazenamento de dados do BigQuery da seguinte maneira:

  1. No console do Cloud, selecione Logging e depois Análise de registros.

  2. Criar um filtro que isole os registros do Fleet Engine. No explorador de campos de registros, selecione o tipo de recurso Fleetengine.googleapis.com/DeliveryFleet.

    Criar filtro

  3. No painel "Resultados da consulta", clique no menu suspenso "Ações" e escolha Criar coletor.

    Criar
coletor

  4. Na caixa de diálogo "Selecionar serviço do coletor", escolha Conjunto de dados do BigQuery.

    Selecionar
coletor

  5. Na caixa de diálogo "Editar coletor", especifique as seguintes opções:

    • Especifique um nome de coletor (por exemplo, FleetEngineLogsSink).
    • Deixe "Serviço do coletor" como BigQuery.
    • Selecione a opção Usar tabelas particionadas. Isso vai melhorar o desempenho das consultas.
    • Em "Destino do coletor", selecione Criar novo conjunto de dados do BigQuery e especifique o nome dele (por exemplo, FleetEngineLogs).
    • Clique no botão Criar coletor.

    Editar coletor

Seus registros vão começar a preencher o conjunto de dados do BigQuery. É possível ver os dados na seção do BigQuery do Console do Cloud.

Seção &quot;BigQuery&quot;

Várias tabelas do conjunto de dados FleetEngineLogs serão preenchidas automaticamente, uma para cada tipo de registro:

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

Os nomes das tabelas usam o seguinte padrão:

project_id.data_set.log_name

Por exemplo, se o nome do projeto for test_project e o nome do conjunto de dados for FleetEngineLogs, a tabela CreateTask terá o seguinte nome:

test_project.FleetEngineLogs.fleetengine_googleapis_com_create_task

Exemplos de consultas

Esta seção mostra exemplos de consultas que podem ser criadas.

Tarefas criadas por hora

A consulta a seguir conta o número de registros CreateTasks e os agrupa por hora.

    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

Número de paradas por veículo a cada hora

A consulta a seguir gera uma contagem das paradas que um veículo atendeu por hora.

Por exemplo, esta consulta pode indicar que, na última hora:

  • O veículo A fez 10 paradas na 12a hora e 8 paradas na 13a hora.
  • O veículo B completou 5 paradas na 11h e 7 paradas na 12h.
  • O veículo C fez 12 paradas na 13a hora e 9 paradas na 14h.

    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
    

Taxa de sucesso da primeira entrega

A consulta a seguir mostra a porcentagem de sucesso na primeira taxa de tentativa de entrega.

    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

Painéis do Data Studio

É possível integrar o BigQuery a ferramentas de Business Intelligence e criar painéis para análise de negócios.

O exemplo a seguir mostra como criar um painel com as tarefas e os movimentos do veículo que podem ser visualizados em um mapa.

  1. Inicie um novo painel do Data Studio e selecione o BigQuery como a conexão de dados.

    Conexão
de dados

  2. Selecione "Consulta personalizada" e escolha o projeto do Cloud em que a cobrança será feita.

    Selecionar
projeto

  3. Digite a consulta abaixo na caixa de consulta.

    Insira a consulta

    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. Selecione o tipo de gráfico como Mapa de círculos e, em seguida, selecione o campo de local.

    Tipo de gráfico

  2. Selecione Criar campo.

    Criar campo

  3. Dê um nome ao campo e adicione a seguinte fórmula: CONCAT(lat, ",", lng).

    Em seguida, defina o tipo como Geográfico->Latitude, Longitude.

    Definir tipo

  4. É possível adicionar controles ao painel para filtrar dados. Por exemplo, selecione o filtro "Período".

    Adicionar
controles

  5. Edite a caixa "Período" para selecionar um período padrão.

    Período

  6. Você pode adicionar outros controles da lista suspensa para delivery_vehicle_id.

    Lista suspensa

Com esses controles, é possível visualizar o movimento do veículo ou dentro de uma entrega.