metric模板用来描述运行时指标数据,发送给监控后端进行处理。如下所示:
apiVersion: "config.istio.io/v1alpha2"
kind: metric
metadata:
name: requestsize
namespace: istio-system
spec:
value: request.size | 0
dimensions:
source_service: source.service | "unknown"
source_version: source.labels["version"] | "unknown"
destination_service: destination.service | "unknown"
destination_version: destination.labels["version"] | "unknown"
response_code: response.code | 200
monitored_resource_type: '"UNSPECIFIED"'
编写上述模板配置时,字段既可以设定为一个常量,也可以设定为一个表达式。如果字段的数据类型不是istio.policy.v1beta1.Value,那么表达式的类型必须和字段的数据类型相匹配。
以下是metric protobuffer的定义内容,从中可以看到metric定义的字段及数据类型:
package metric;
import "policy/v1beta1/type.proto";
import "mixer/adapter/model/v1beta1/extensions.proto";
option (istio.mixer.adapter.model.v1beta1.template_variety) = TEMPLATE_VARIETY_REPORT;
message Template {
// 用于上报的指标数据值
istio.policy.v1beta1.Value value = 1;
// 要上报的特定指标的唯一标识符
map<string, istio.policy.v1beta1.Value> dimensions = 2;
// 可选字段。这是一个表达式,用来生成将要上报的指标的监控资源的类型。
// 如果目标后端支持这一资源,则接受这一字段并对相应的资源进行处理。否则这一字段会被适配器忽略。
string monitored_resource_type = 3;
// 可选字段。一组用于生成上报该指标对应监控资源的表达式,这些表达式将用于生成受监控资源的维度
// 如果指标后端系统支持这些受监控资源,则这些字段用于填充该资源。否则,适配器将忽略这些字段。
map<string, istio.policy.v1beta1.Value> monitored_resource_dimensions = 4;
}