如何使用监控 API 创建基于日志的警报?
How to create a log-based alert using the Monitoring API?
在 documentation 上它说有一个 link 用于使用监控创建基于日志的警报的示例 API 但只有一个示例如何使用UI.
我在使用 Java 监控 API 构建新的 alertPolicy 时遇到问题,因为似乎没有用于基于日志的警报的条件生成器(使用日志查询过滤器)。我认为我不应该使用 Absent、Threshold 或 MonitoringQueryLanguage 选项。我怎样才能建立正确的条件?
三个条件类型MetricAbsence、MetricThreshold和MonitoringQueryLanguageCondition是Conditions for metric-based alerting policies. Since we want to create a log based alert policy, according to the Condition for log-based alerting policies,条件类型必须是“LogMatch”。
AlertPolicy.Condition.Builder class 具有使用基于指标的警报条件类型设置条件的方法,但不能使用基于日志的条件类型(即 LogMatch)设置条件。 class "AlertPolicy.Condition.Builder" 似乎没有办法这样做。请注意,根据 public 文档 ,基于日志的警报是 GA 前(预览)功能。所以各种客户端库可能还不支持这个。
虽然,在使用 projects.alertPolicies.create 创建新的警报策略时,我们可以添加“conditionMatchedLog”类型的条件。
因此,建议使用UI或以上API,但在支持条件之前不要使用客户端库。
正如 Ashish 所指出的,这在客户端库中目前不可用。希望它会很快被添加,但对于任何想要使用 Java 客户端库添加基于日志的警报条件 (conditionMatchedLog) 的人来说,这就是代码的样子。
public static UnknownFieldSet createConditionMatchedLog(String filter) {
// filter = "\nseverity = \"NOTICE\""; example filter
UnknownFieldSet.Field logMatchString =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(ByteString.copyFromUtf8(filter))
.build();
UnknownFieldSet logMatchFilter =
UnknownFieldSet.newBuilder()
.addField(1, logMatchString)
.build();
UnknownFieldSet.Field logMatchFilterCombine =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(logMatchFilter.toByteString())
.build();
UnknownFieldSet logMatchCondition =
UnknownFieldSet.newBuilder()
.addField(20, logMatchFilterCombine)
.build();
return logMatchCondition;
}
在构建实际的Alert时,还需要定义Alert Strategy。
public static UnknownFieldSet createAlertStrategyFieldSet(long periodTime) {
//Making the alertStrategy field since you need those for log based alert policies
UnknownFieldSet.Field period =
UnknownFieldSet.Field.newBuilder()
.addVarint(periodTime) //must be an long
.build();
UnknownFieldSet periodSet =
UnknownFieldSet.newBuilder()
.addField(1, period)
.build();
UnknownFieldSet.Field periodSetField =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSet.toByteString())
.build();
UnknownFieldSet periodSetFieldUp =
UnknownFieldSet.newBuilder()
.addField(1, periodSetField)
.build();
UnknownFieldSet.Field periodSetField2 =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSetFieldUp.toByteString())
.build();
UnknownFieldSet periodSetFieldUp2 =
UnknownFieldSet.newBuilder()
.addField(1, periodSetField2)
.build();
UnknownFieldSet.Field periodSetField3 =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSetFieldUp2.toByteString())
.build();
UnknownFieldSet AlertStrategy =
UnknownFieldSet.newBuilder()
.addField(21, periodSetField3)
.build();
return AlertStrategy;
}
放在一起[=13=]
UnknownFieldSet conditionMatchedLog = createConditionMatchedLog(filter);
// Construct Condition object
AlertPolicy.Condition alertPolicyCondition =
AlertPolicy.Condition.newBuilder()
.setDisplayName(med.getConditions().get(index).getDisplayName())
.setUnknownFields(conditionMatchedLog)
.build();
//Making the alertStrategy field since you need those for log based alert policies
UnknownFieldSet alertStrategy = createAlertStrategyFieldSet(convertTimePeriodFromString(med.getAlertStrategy().getNotificationRateLimit().getPeriod()));
// Build the log based alert policy
AlertPolicy alertPolicy =
AlertPolicy.newBuilder()
.setDisplayName(med.getDisplayName())
.addConditions(alertPolicyCondition)
.setCombiner(AlertPolicy.ConditionCombinerType.OR)
.setEnabled(BoolValue.newBuilder().setValue(true).build())
.setUnknownFields(alertStrategy)
.build();
在 documentation 上它说有一个 link 用于使用监控创建基于日志的警报的示例 API 但只有一个示例如何使用UI.
我在使用 Java 监控 API 构建新的 alertPolicy 时遇到问题,因为似乎没有用于基于日志的警报的条件生成器(使用日志查询过滤器)。我认为我不应该使用 Absent、Threshold 或 MonitoringQueryLanguage 选项。我怎样才能建立正确的条件?
三个条件类型MetricAbsence、MetricThreshold和MonitoringQueryLanguageCondition是Conditions for metric-based alerting policies. Since we want to create a log based alert policy, according to the Condition for log-based alerting policies,条件类型必须是“LogMatch”。
AlertPolicy.Condition.Builder class 具有使用基于指标的警报条件类型设置条件的方法,但不能使用基于日志的条件类型(即 LogMatch)设置条件。 class "AlertPolicy.Condition.Builder" 似乎没有办法这样做。请注意,根据 public 文档 ,基于日志的警报是 GA 前(预览)功能。所以各种客户端库可能还不支持这个。
虽然,在使用 projects.alertPolicies.create 创建新的警报策略时,我们可以添加“conditionMatchedLog”类型的条件。
因此,建议使用UI或以上API,但在支持条件之前不要使用客户端库。
正如 Ashish 所指出的,这在客户端库中目前不可用。希望它会很快被添加,但对于任何想要使用 Java 客户端库添加基于日志的警报条件 (conditionMatchedLog) 的人来说,这就是代码的样子。
public static UnknownFieldSet createConditionMatchedLog(String filter) {
// filter = "\nseverity = \"NOTICE\""; example filter
UnknownFieldSet.Field logMatchString =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(ByteString.copyFromUtf8(filter))
.build();
UnknownFieldSet logMatchFilter =
UnknownFieldSet.newBuilder()
.addField(1, logMatchString)
.build();
UnknownFieldSet.Field logMatchFilterCombine =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(logMatchFilter.toByteString())
.build();
UnknownFieldSet logMatchCondition =
UnknownFieldSet.newBuilder()
.addField(20, logMatchFilterCombine)
.build();
return logMatchCondition;
}
在构建实际的Alert时,还需要定义Alert Strategy。
public static UnknownFieldSet createAlertStrategyFieldSet(long periodTime) {
//Making the alertStrategy field since you need those for log based alert policies
UnknownFieldSet.Field period =
UnknownFieldSet.Field.newBuilder()
.addVarint(periodTime) //must be an long
.build();
UnknownFieldSet periodSet =
UnknownFieldSet.newBuilder()
.addField(1, period)
.build();
UnknownFieldSet.Field periodSetField =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSet.toByteString())
.build();
UnknownFieldSet periodSetFieldUp =
UnknownFieldSet.newBuilder()
.addField(1, periodSetField)
.build();
UnknownFieldSet.Field periodSetField2 =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSetFieldUp.toByteString())
.build();
UnknownFieldSet periodSetFieldUp2 =
UnknownFieldSet.newBuilder()
.addField(1, periodSetField2)
.build();
UnknownFieldSet.Field periodSetField3 =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSetFieldUp2.toByteString())
.build();
UnknownFieldSet AlertStrategy =
UnknownFieldSet.newBuilder()
.addField(21, periodSetField3)
.build();
return AlertStrategy;
}
放在一起[=13=]
UnknownFieldSet conditionMatchedLog = createConditionMatchedLog(filter);
// Construct Condition object
AlertPolicy.Condition alertPolicyCondition =
AlertPolicy.Condition.newBuilder()
.setDisplayName(med.getConditions().get(index).getDisplayName())
.setUnknownFields(conditionMatchedLog)
.build();
//Making the alertStrategy field since you need those for log based alert policies
UnknownFieldSet alertStrategy = createAlertStrategyFieldSet(convertTimePeriodFromString(med.getAlertStrategy().getNotificationRateLimit().getPeriod()));
// Build the log based alert policy
AlertPolicy alertPolicy =
AlertPolicy.newBuilder()
.setDisplayName(med.getDisplayName())
.addConditions(alertPolicyCondition)
.setCombiner(AlertPolicy.ConditionCombinerType.OR)
.setEnabled(BoolValue.newBuilder().setValue(true).build())
.setUnknownFields(alertStrategy)
.build();