Приемник / маршрутизатор Google Log Stackdriver

#google-analytics #google-cloud-functions #google-cloud-pubsub #google-cloud-stackdriver #google-analytics-firebase

#google-analytics #google-cloud-функции #google-cloud-pubsub #google-cloud-stackdriver #google-analytics-firebase

Вопрос:

Я пытаюсь запустить функцию Google Cloud, когда в BigQuery успешно созданы две таблицы ga_sessions и events (эти таблицы могут быть созданы в любое время в течение 3-4 часов).

Я написал следующий приемник / лог-маршрутизатор log stackdriver, на который подписан Pub / Sub topic (что, в свою очередь, запускает функцию Google cloud). Однако он не работает. Если я использую приемник / маршрутизатор по отдельности для ga_sessions и событий, это работает нормально, но когда я объединяю их вместе, это не работает.

Итак, мой вопрос в том, как мне взять два разных события из log stackdriver, объединить их вместе и передать их в pub / sub topic

    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.datasetId="my_dataset"
    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.projectId="my-project"
    protoPayload.authenticationInfo.principalEmail="firebase-measurement@system.gserviceaccount.com"
    protoPayload.methodName="jobservice.jobcompleted"
    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId:"events"
    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.writeDisposition:"WRITE_TRUNCATE"
    protoPayload.serviceData.jobCompletedEvent.job.jobStatus.state:"DONE"
    NOT protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId:"events_intraday"

    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.datasetId="my_dataset"
    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.projectId="my-project"
    protoPayload.authenticationInfo.principalEmail="analytics-processing-dev@system.gserviceaccount.com"
    protoPayload.methodName="jobservice.jobcompleted"
    protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId:"ga_sessions"
    NOT protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.load.destinationTable.tableId:"ga_sessions_intraday"
 

Заранее спасибо за вашу помощь / рекомендации.

Комментарии:

1. Просто чтобы уточнить, я ищу, как выполнить ПЕРЕСЕЧЕНИЕ двух событий журнала. Итак, в приведенном выше коде два события разделены пробелом. Я хочу отправлять информацию в pub / sub только тогда, когда обе таблицы успешно созданы

2. Можете ли вы предоставить более подробную информацию? Какие вопросы / конфигурация приемника и т. Д.? Что именно вы пробовали?

3. То, что я ищу, это код A, ПЕРЕСЕКАЮЩИЙ код B, где код A — первые 8 строк в моем исходном коде, а код B — следующие 6 строк после пробела, которые я пытался создать Sink ->> PubSub ->> запустить облачную функцию в следующем сценарии a) Весь код целиком (безлюбой оператор) б) Код A и код B (с оператором и) в) Попытка вставить INTERSECT, который не принимается StackDriver, Все три сценария не сработали. Если я использую только код A или код B, тогда он работает нормально, но я хочу, чтобы облачная функция запускалась только после успешного завершения обоих событий

4. См. Документацию по языку запросов для ведения журнала для объяснения доступных операторов. Маршрутизатор журналов проверяет по одному журналу за раз, чтобы определить, следует ли пересылать его в вашу тему PubSub. Итак, я не уверен, что вы сможете обусловить экспорт одного журнала тем, существует ли другое событие в отдельной таблице, используя фильтр журнала. Возможно, вы могли бы использовать (A) ИЛИ (B) для отправки любых журналов, поступающих из любой таблицы, в ваш паблик / подтему, а затем в конце облачных функций выполните какое-либо отслеживание, видели ли вы события из обеих таблиц.

Ответ №1:

Хитрость здесь заключается в том, чтобы создать метрику, которая фактически показывала бы 1 при выполнении обоих условий.

Попробуйте создать новую метрику на основе журналов и перейти к «редактору запросов«. Там вы можете создать свою собственную метрику, используя язык MQL.

Чтобы иметь возможность создавать единую метрику из двух «метрик», вам нужно использовать что-то вроде этого:

   { fetch gce_instance :: compute.googleapis.com/instance/cpu/utilization ;
    fetch gce_instance :: compute.googleapis.com/instance/cpu/reserved_cores
  } | join | div
 

И вот некоторая полезная информация о том, как создать политику оповещения с использованием MQL.
Код для политики оповещения может выглядеть следующим образом:

 { fetch gce_instance :: compute.googleapis.com/instance/cpu/utilization ;
  fetch gce_instance :: compute.googleapis.com/instance/cpu/reserved_cores
} 
| join | div
| condition val() >1 
 

Это всего лишь пример, демонстрирующий, что, скорее всего, возможно создать метрику для мониторинга создания таблиц BigQuery, но вы должны протестировать ее самостоятельно.

Комментарии:

1. Большое спасибо за ваш ответ. Я попробую это и обновлю его здесь. Кроме того, просто для интереса других людей я нашел другой способ. Google сбрасывает все действия в таблицу BigQuery cloudaudit_googleap _com_activity_ *, Можно использовать эту таблицу для расследования событий и т. Д.