8.4.1 logentry模板

logentry模板用于表示日志中的一条记录,如下所示:


apiVersion: "config.istio.io/v1alpha2"
kind: logentry
metadata:
  name: accesslog
  namespace: istio-system
spec:
  severity: '"Default"'
  timestamp: request.time
  variables:
    sourceIp: source.ip | ip("0.0.0.0")
    destinationIp: destination.ip | ip("0.0.0.0")
    sourceUser: source.user | ""
    method: request.method | ""
    url: request.path | ""
    protocol: request.scheme | "http"
    responseCode: response.code | 0
    responseSize: response.size | 0
    requestSize: request.size | 0
    latency: response.duration | "0ms"
  monitored_resource_type: '"UNSPECIFIED"'

编写上述模板配置时,字段既可以设定为一个常量,也可以设定为一个表达式。如果字段的数据类型不是istio.policy.v1beta1.Value,那么表达式的类型必须和字段的数据类型相匹配。

以下是logentry protobuffer的定义内容,从中可以看到logentry定义的字段及数据类型:


package logEntry;

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 {
  // 发送给日志条目的变量
  map<string, istio.policy.v1beta1.Value> variables = 1;

  // 日志条目的时间
  istio.policy.v1beta1.TimeStamp timestamp = 2;

  // 日志条目的紧要程度
  string severity = 3;

  // 可选字段。用于表示该日志条目相关资源的表达式。
  // 如果日志后端支持针对资源的监控,这些字段就会用于对该资源的后续处理;否则适配器会丢弃该字段。
  string monitored_resource_type = 4;

  // 可选字段。一组表达式,用于生成该日志对应的受监视资源的维度。
  // 如果日志记录后端支持受监视的资源,则这些字段用于填充该资源。否则,适配器将忽略这些字段。
  map<string, istio.policy.v1beta1.Value> monitored_resource_dimensions = 5;
}