Google Log Stackdriver 接收器/路由器

Posted

技术标签:

【中文标题】Google Log Stackdriver 接收器/路由器【英文标题】:Google Log Stackdriver Sink/Router 【发布时间】:2021-06-02 00:10:09 【问题描述】:

我正在尝试在 BigQuery 中成功创建两个表 ga_sessionsevents 后启动 Google Cloud Function(这些表可以在 3- 4 小时)。

我已经编写了以下日志堆栈驱动程序接收器/日志路由器,订阅了 Pub/Sub 主题(这反过来又启动了谷歌云功能)。但是,它不起作用。如果我为 ga_sessionsevents 单独使用接收器/路由器,它可以正常工作,但是当我将它们组合在一起时,它就不起作用了。

所以我的问题是如何从日志堆栈驱动程序中获取两个不同的事件,将它们组合在一起并将它们传递给发布/订阅主题

   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"

提前感谢您的帮助/指导。

【问题讨论】:

只是为了澄清我正在寻找如何执行 INTERSECT 两个日志事件。所以在上面的代码中,两个事件用空格隔开。我只想在两个表都成功创建后才向 pub/sub 发送信息 你能提供更多细节吗?什么查询/接收器配置等?你到底尝试了什么? 我正在寻找的是代码 A INTERSECT Code B 其中代码 A 是我原始代码中的前 8 行代码 B 是我尝试创建 Sink 的空格后的下 6 行 --> > PubSub -->> 在以下场景中启动云功能 a) 完全代码(没有任何运算符) b) 代码 A AND 代码 B(带有 AND 运算符) c) 尝试插入 StackDriver 不接受的 INTERSECT 所有三个场景都做了不行。如果我只使用代码 A 或代码 B,那么它可以正常工作,但我只希望云功能在两个事件发生/成功完成后启动 请参阅Logging Query Language documentation 了解可用运算符的说明。日志路由器一次检查一个日志以确定是否将其转发到您的 PubSub 主题。因此,我不确定您是否能够使用日志过滤器根据另一个事件是否存在于单独的表中来确定一个日志的导出。也许您可以使用 (A) 或 (B) 将来自任一表的任何日志发送到您的 Pub/Sub 主题,然后在 Cloud Functions 端,进行某种跟踪,您是否已经看到来自两个表的事件。 【参考方案1】:

这里的技巧是创建一个当两个条件都满足时实际显示为 1 的指标。

尝试创建一个新的基于日志的指标并将其切换为“query editor”。在那里,您可以使用 MQL language 创建自己的指标。

要能够从两个“指标”创建单个指标,您需要使用something like this:

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

这里有一些关于如何创建alerting policy using MQL 的有用信息。 alerting policy 的代码如下所示:

 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 表的创建,但您必须自己进行测试。

【讨论】:

非常感谢您的回复。我会试试这个并在这里更新它。另外,只是为了其他人的利益,我找到了另一种方法。 Google 将所有活动转储到 BigQuery 表 cloudaudit_googleapis_com_activity_*,可以利用此表调查事件等。

以上是关于Google Log Stackdriver 接收器/路由器的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Container Engine (GKE) 和 Stackdriver 监控和提醒 Pod 状态或重启

Stackdriver Logging 可以接收 syslog 协议吗?

如何清除 Google Cloud Platform 中的 Stackdriver 日志?

Stackdriver Trace 与 Google Cloud Run

Google StackDriver:如何将其他日志与跟踪日志关联(和嵌套)?

google cloud Stackdriver Metrics 以扩展管理实例组 - 区域