Stackdriver 警报政策 - 需要过滤 JSON 负载
Stackdriver Alerting Policy - Need To Filter On JSON Payload
我在 App Engine 下设置了一个 Python 脚本,它运行在我们组织内收集数据的所有项目中:
- 未与快照策略关联的磁盘
- 名称中没有 "daily" 或 "weekly" 的快照策略(因此不在我们的命名约定范围内)
以前者为例,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 警报:
我在 App Engine 下设置了一个 Python 脚本,它运行在我们组织内收集数据的所有项目中:
- 未与快照策略关联的磁盘
- 名称中没有 "daily" 或 "weekly" 的快照策略(因此不在我们的命名约定范围内)
以前者为例,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 警报: