Fleet Engine предлагает простую службу ведения журналов, которая позволяет сохранять запросы API и полезные данные ответов. С помощью этих журналов вы можете отлаживать интеграцию, создавать показатели мониторинга и анализировать шаблоны трафика.
Fleet Engine отправляет журналы в виде журналов платформы в Cloud Logging , чтобы вы могли легко получить к ним доступ с помощью инструментов Cloud Logging.
Какие журналы Fleet Engine
Fleet Engine отправляет все аутентифицированные запросы и ответы REST и gRPC, даже ответы об ошибках, в Cloud Logging. К ним также относятся вызовы, инициированные Driver SDK для Fleet Engine. Однако он не регистрирует ошибки аутентификации и может редактировать некоторые поля из запроса и ответа из соображений защиты данных.
См. документацию по доступным сообщениям журнала и схеме в Справочнике по ведению журнала .Включение ведения журнала в облаке
Ведение журнала может быть не включено по умолчанию для проектов, созданных до 10 февраля 2022 г. Вы можете проверить, включено ли ведение журнала, используя следующий запрос в проводнике журналов : resource.type:"fleetengine.googleapis.com"
Если вы не видите никаких журналов для этого запроса, возможно, облачное ведение журнала не включено для вашего проекта. Обратитесь в службу поддержки , если хотите включить эту функцию.
Доступ к вашим журналам
Облачные журналы структурированы в формате LogEntry . Fleet Engine отправляет журналы в Cloud Logging с resource.type
LogEntry, для которого задано значение fleetengine.googleapis.com
. Вы можете использовать Logs Explorer для написания запросов для просмотра ваших журналов.
Например, чтобы просмотреть все RPC для Fleet Engine, которые вернули ошибку, используйте следующий запрос Logs Explorer:
resource.type:"fleetengine.googleapis.com"
severity=ERROR
Чтобы просмотреть журналы RPC, выполненные методом UpdateDeliveryVehicle
для проекта example-project-id, используйте следующий запрос Logs Explorer:
logName="projects/project-id/logs/fleetengine.googleapis.com%2Fupdate_delivery_vehicle"
В следующем примере показан LogEntry для журнала UpdateDeliveryVehicle
. Запрос и ответ 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": "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"
}
Дополнительные сведения о языке запросов ведения журнала см. в разделе Язык запросов ведения журнала . Сведения о том, как можно использовать журналы для создания метрик, см. в разделе Обзор метрик на основе журналов .
Управление затратами на ведение журнала
После того, как ведение журнала включено, вы несете ответственность за настройку маршрутизации, хранения и хранения журналов. С вас может взиматься дополнительная плата за прием и хранение журналов Google Cloud Platform, если вы превысите лимиты использования и хранения бесплатно. Однако вы можете контролировать затраты на ведение журнала, выполнив одно из следующих действий:
Сокращение использования журналов
Вы можете ограничить объем принимаемых данных журнала, исключив определенные записи журнала.
Экспорт или маршрутизация журналов
Вы можете перенаправлять журналы в другие GCP или внешние места назначения, чтобы избежать расходов на прием и хранение по умолчанию. Убедитесь, что вы отключили прием журналов, как описано ниже, чтобы избежать затрат на прием.
Отключение приема журналов
Сокращение использования журналов, экспорт или маршрутизация журналов предпочтительнее, чем отключение приема журналов. Однако, если вы не собираетесь использовать журналы Fleet Engine, вы можете избежать потенциальных расходов на ведение журнала в облаке, отключив прием. По умолчанию журналы Fleet Engine направляются в корзину журналов _Default
.
Следующая команда обновляет корзину журналов _Default
, чтобы она не принимала журналы 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"
'
Дополнительные сведения см. в разделах Исключения облачного ведения журналов и Исключение журналов . Cloud Logging Exports и экспорт журналов
Использование обозревателя журналов
Чтобы использовать Logs Explorer, откройте Cloud Console, выберите Logging , а затем Logs Explorer . Чтобы просмотреть список всех доступных журналов Fleet Engine, щелкните тип ресурса Fleet Engine . Некоторые журналы API доставки помечены идентификатором задачи и идентификатором средства доставки. Вы можете использовать эти метки для выбора журналов для задач или транспортных средств, которые вас интересуют.
Фильтрация журналов по идентификатору транспортного средства доставки
В Logs Explorer вы можете использовать следующий запрос, чтобы ограничить журналы определенным транспортным средством:
resource.type="fleetengine.googleapis.com/DeliveryFleet"
labels.delivery_vehicle_id="delivery_vehicle_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"
Пример метрик на основе журнала
В следующем примере показано, как использовать метрики на основе журнала для отслеживания количества задач, созданных с течением времени.
В Cloud Console выберите Logging , а затем Logs Explorer , чтобы открыть Logs Explorer. Затем примените следующий фильтр:
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")
На панели «Результаты запроса» выберите раскрывающийся список «Действия» , а затем выберите «Создать метрику» .
В диалоговом окне редактора показателей:
- Укажите имя метрики (например, billable_tasks ).
- Укажите описание метрики (например, Количество оплачиваемых поездок ).
- Оставьте параметр «Единицы измерения» пустым. _ Оставьте для параметра Тип значение Счетчик .
Затем нажмите кнопку «Создать метрику» .
На странице Метрики на основе журналов вы должны увидеть сообщение, подтверждающее успешное создание метрики, и новая метрика должна появиться в разделе Пользовательские метрики. Теперь метрика будет заполняться по мере создания соответствующих журналов.
Выберите вертикальное раскрывающееся меню справа от новой метрики, а затем выберите «Просмотр в обозревателе метрик» .
На левой панели в разделе «Создайте свой запрос» установите для параметра «Тип ресурса» значение Fleet Engine и найдите метрику «оплачиваемые_задачи».
На графике справа показана скорость вызовов billable_tasks.
Использование BigQuery
BigQuery — это мощный инструмент для выполнения аналитики. Его можно использовать для хранения долгосрочных журналов и выполнения специальных SQL-запросов к данным.
Перенаправление журналов в BigQuery
Чтобы воспользоваться преимуществами BigQuery, журналы должны быть перенаправлены в хранилище данных BigQuery следующим образом:
В Cloud Console выберите Logging , а затем Logs Explorer .
Создайте фильтр, который изолирует журналы Fleet Engine. В обозревателе полей журналов выберите тип ресурса Fleetengine.googleapis.com/DeliveryFleet .
На панели «Результаты запроса» щелкните раскрывающийся список «Действия» и выберите «Создать приемник» .
В диалоговом окне «Выбрать сервис-приемник» выберите набор данных BigQuery .
В диалоговом окне «Редактировать приемник» укажите следующие параметры:
- Укажите имя приемника (например, FleetEngineLogsSink ).
- Оставьте Sink Service как BigQuery .
- Выберите параметр «Использовать секционированные таблицы» . Это повысит производительность запросов.
- В разделе «Назначение приемника» выберите «Создать новый набор данных BigQuery» , а затем укажите имя набора данных BigQuery (например, FleetEngineLogs ).
- Нажмите кнопку «Создать раковину» .
Теперь ваши журналы должны начать заполнять набор данных BigQuery. Вы можете увидеть данные в разделе BigQuery в Cloud Console.
Несколько таблиц в наборе данных FleetEngineLogs будут заполнены автоматически, по одной для каждого типа журнала:
- СоздатьДоставкуТранспортное средство
- ПолучитьДоставкуАвтомобиля
- СписокДоставкаТранспорт
- ОбновлениеДоставкаТранспортное средство
- Создать задачу
- GetTask
- ОбновлениеТаск
- ListTasks
- ПоискЗадачи
В именах таблиц используется следующий шаблон:
project_id.data_set.log_name
Например, если проект называется test_project , а имя набора данных — FleetEngineLogs , таблица 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
Количество остановок на транспортное средство в час
Следующий запрос генерирует количество остановок, обслуживаемых транспортным средством, с разбивкой по часам.
Например, этот запрос может сообщить нам, что за последний час:
- Автомобиль А совершил 10 остановок за 12 часов и 8 остановок за 13 часов.
- Автомобиль B совершил 5 остановок за 11 часов и 7 остановок за 12 часов.
Автомобиль С совершил 12 остановок за 13 час и 9 остановок за 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
Показатель успешности первой доставки
Следующий запрос, показывающий процент успешных попыток доставки.
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 можно интегрировать с инструментами бизнес-аналитики, а для бизнес-аналитики можно создавать информационные панели.
В следующем примере показано, как создать информационную панель, на которой задачи и движения транспортных средств можно визуализировать на карте.
Запустите новую панель управления Datastudio и выберите BigQuery в качестве подключения к данным.
Выберите «Пользовательский запрос» и выберите облачный проект, для которого он должен быть выставлен.
Введите следующий запрос в поле запроса.
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`
Выберите Тип диаграммы как Пузырьковая карта , а затем выберите поле местоположения.
Выберите Создать поле .
Назовите поле и добавьте следующую формулу: CONCAT(lat, “,, lng) .
Затем установите тип Geo->Latitude, Longitude .
Вы можете добавить элементы управления на панель инструментов для фильтрации данных. Например, выберите фильтр «Диапазон дат».
Отредактируйте поле диапазона дат, чтобы выбрать диапазон дат по умолчанию.
Вы можете добавить дополнительные элементы управления раскрывающимся списком для delivery_vehicle_id.
С помощью этих элементов управления вы можете визуализировать движение автомобиля или движение внутри поездки.