Stackdriver 警报政策 - 需要过滤 JSON 负载

Stackdriver Alerting Policy - Need To Filter On JSON Payload

我在 App Engine 下设置了一个 Python 脚本,它运行在我们组织内收集数据的所有项目中:

以前者为例,Stackdriver日志中的JSON payload如下:

jsonPayload: {
  DiskWithoutPolicy: "True"   
  diskId: "1234567891234567891"   
  diskName: "server-disk3"   
  project: "projectID"   
}

当我创建警报策略时,Metrics Explorer 只允许我过滤日志的资源标签(此处列出:https://cloud.google.com/monitoring/api/resources):

resource: {
  labels: {
   module_id: "get_googlecloud_snapshotstatus"    
   project_id: "projectID"    
   version_id: ""    
   zone: "europe-west1-d"    
  }

Metrics Explorer 能否过滤 JSON 负载,以便我可以看到 'diskId'、'diskName' 和 'project'?

如果没有,是否有其他方法可以实现我的需求?

您可以在 Stackdriver Logging 中创建自己的 user-defined metrics。这样,您可以捕获与特定过滤器匹配的所有日志,并将您想要的字段公开为指标标签。

例如,我导航到 Stackdriver Logging -> Logs-based Metrics -> Create Metric 和 select GAE 应用程序的过滤器:

resource.type="gae_app" 
logName=("projects/REDACTED/logs/appengine.googleapis.com%2Fstdout" 
OR "projects/REDACTED/logs/appengine.googleapis.com%2Fstderr" 
OR "projects/REDACTED/logs/appengine.googleapis.com%2Fnginx.request" 
OR "projects/REDACTED/logs/appengine.googleapis.com%2Frequest_log") 
resource.labels.module_id="image-demo"
httpRequest.requestMethod="GET"

请求包含通用 jsonPayload 例如:

jsonPayload: {
  appLatencySeconds: "0.000"   
  latencySeconds: "0.001"   
  trace: "4ff777572199f23f4fc97388e75c0acc"   
 }

Labels 下的指标编辑器(右侧面板)上有一个 Field name 下拉列表 select 或者包含我们的 jsonPayload 字段:

在我们的例子中,我们 select jsonPayload.trace 现在我们可以通过 Metrics Explorer 中的 trace 标签过滤我们的自定义指标:

请注意,您可以直接从用户定义的指标列表 (Create alert from metric) 中创建 Stackdriver Monitoring 警报: