Stackdriver Alerting Policy - Need To Filter On JSON Payload

瘦欲@ 提交于 2021-01-28 05:25:09

问题


I have a Python script set up under App Engine that runs through all of the projects within our organisation that collects data on:

  • The disks not associated with snapshot policies
  • The snapshot policies that do not have "daily" or "weekly" in their name (and are thus outside our naming convention)

Taking the former as the example, the JSON payload within the Stackdriver log is like:

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

When I go to create the Alerting Policy, Metrics Explorer only allows me to filter on the log's resource labels (listed here: https://cloud.google.com/monitoring/api/resources):

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

Can Metrics Explorer filter on the JSON payload, so I can therefore see the 'diskId', 'diskName' and 'project'?

If not, is there any other way of achieving what I need?


回答1:


You can create your own user-defined metrics in Stackdriver Logging. This way, you can capture all logs matching a particular filter and expose the fields that you want as metric labels.

For example, I navigate to Stackdriver Logging -> Logs-based Metrics -> Create Metric and select a filter for a GAE application:

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"

Requests contain a generic jsonPayload such as:

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

On the metric editor (right panel) under Labels there is a Field name dropdown selector that includes our jsonPayload fields:

In our case we select jsonPayload.trace and now we can filter our custom metric by trace label in the Metrics Explorer:

Note that you can create a Stackdriver Monitoring alert directly from the list of user-defined metrics (Create alert from metric):



来源:https://stackoverflow.com/questions/59755930/stackdriver-alerting-policy-need-to-filter-on-json-payload

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!