使用 gcloud 创建 Stackdriver 警报策略? (不从文件加载)

Create a Stackdriver Alert Policy using gcloud? (without loading from file)

所以我设置了一个通知渠道:

gcloud alpha monitoring channels create \
    --description='test notification' \
    --display-name='test_channel' \
    --type=email \
    --channel-labels=email_address=example@gmail.com

但我似乎无法获得与 command line 一起使用的警报策略(尽量避免使用从文件加载,因为我需要使用模板)。这似乎应该有效:

gcloud alpha monitoring policies create \
    --notification-channels=test_channel \
    --aggregation='{"alignmentPeriod": "60s","perSeriesAligner": "ALIGN_MEAN"}' \
    --condition-display-name='CPU Utilization >0.80 for 10m'\
    --condition-filter='metric.type="appengine.googleapis.com/flex/instance/cpu/utilization" resource.type="gae_instance"' \
    --duration='1min' \
    --if='> 0.80' \
    --display-name='test alert'

但是 returns:

Invalid value for [--aggregation]: Should only be specified if --condition-filter is also specified.

但是,如您所见,上面有一个 --condition-filter 标志。我尝试对其重新排序,以便 --condition-filter 出现在 --aggregation 之前,但这会导致持续时间错误,尽管它已经与文档匹配,并且会进行一些细微的编辑,例如 =60s=1min 或在 --aggregation 中添加引号似乎没有帮助:

gcloud alpha monitoring policies create \
    --notification-channels=test_channel \
    --condition-filter='metric.type=appengine.googleapis.com/flex/instance/cpu/utilization resource.type=gae_instance' \
    --aggregation='{"alignmentPeriod": "20s","perSeriesAligner": "ALIGN_MEAN"}' \
    --condition-display-name='CPU Utilization >0.80 for 1m'\
    --duration='1min' \
    --if='> 0.80' \
    --display-name='test alert'

怎么了?为什么我会收到这些错误?

经过一些刻意的试错,我设法通过一些更改让它工作。

首先,我强烈建议您使用最新的 Cloud SDK 版本 - 如果您还没有使用 gcloud components update,请将其更新到最新版本。就我而言,我使用了 Cloud SDK v275.0.0.

您提供的第一个命令片段可以正确创建通知渠道,因此应该保持不变:

gcloud alpha monitoring channels create \
    --description='test notification' \
    --display-name='test_channel' \
    --type=email \
    --channel-labels=email_address=example@gmail.com

不过,为了创建 Stackdriver Monitoring 政策,我不得不进行一些更改:

  • --duration标志指定的时长好像没有 认清单位;我不得不从 --duration='1min' 更改为 --duration='1m' 为了不抛出错误。

  • 需要警报策略的组合器,因此我在这种情况下添加了一个 --combiner 选项设置为 AND 的组合器:--combiner='AND'.

  • 指定的通知渠道 --notification-channels 标志要求和 ID 或完全 限定标识符 - 它不解析显示名称,所以我 将其更改为 --notification-channels=13234113421234567.

    您可以找到 ID 或完全限定的标识符 您之前创建的通知渠道:

    gcloud alpha monitoring channels list \
       --filter='displayName="test_channel"' \
       --format='value(name)'
    

最后,用于创建警报策略的 gcloud 命令应该与此类似:

gcloud alpha monitoring policies create \
    --notification-channels=13234113421234567 \
    --aggregation='{"alignmentPeriod": "60s","perSeriesAligner": "ALIGN_MEAN"}' \
    --condition-display-name='CPU Utilization >0.80 for 10m'\
    --condition-filter='metric.type="appengine.googleapis.com/flex/instance/cpu/utilization" resource.type="gae_instance"' \
    --duration='1m' \
    --if='> 0.80' \
    --display-name='test alert' \
    --combiner='AND'

请注意,此命令处于 alpha 开发状态,因此某些特性或功能可能尚未完全充实和/或测试。

谢谢@maxim,对我帮助很大! 这是我用来部署侦听系统日志消息的基于日志的指标:

创建基于日志的指标:

gcloud logging metrics create "S3-SQL-backup-failed-test2" \
    --description "The backup has failed go over the logs to find out why (tag: backup-to-s3)." \
    --log-filter "resource.type=gce_instance AND 
resource.labels.instance_id=${INSTANCE_ID} AND 
logName=projects/${PROJECT_ID}/logs/syslog AND
'SQL backup has failed failure occurred during the dump file exists validation'"

创建监视器电子邮件:

gcloud alpha monitoring channels create --display-name="${MONITOR_EMAIL_NAME}" /
    --type=email /
    --channel-labels=email_address="${MONITOR_EMAIL}"

根据指标创建警报

gcloud alpha monitoring policies create \
    --notification-channels="${CHANNEL}" \
    --aggregation='{"alignmentPeriod": "60s","perSeriesAligner": "ALIGN_MEAN"}' \
    --condition-display-name='S3-SQL-backup-failed-test2'\
    --condition-filter='resource.type="gce_instance" AND metric.type="logging.googleapis.com/user/S3-SQL-backup-failed"' \
    --duration='0s' \
    --display-name='Alert-S3-SQL-backup-failed-test2' \
    --if='> 0' \
    --combiner='OR' \
    --trigger-count="1"