1{{- if .Values.mixer.adapters.stackdriver.enabled }}
2apiVersion: "config.istio.io/v1alpha2"
3kind: handler
4metadata:
5  name: stackdriver
6  namespace: {{ .Release.Namespace }}
7  labels:
8    app: istio-telemetry
9    release: {{ .Release.Name }}
10spec:
11  compiledAdapter: stackdriver
12  params:
13    {{- if .Values.mixer.adapters.stackdriver.tracer.enabled }}
14    trace:
15      sampleProbability: {{ .Values.mixer.adapters.stackdriver.tracer.sampleProbability | default 1 }}
16    {{- end }}
17    pushInterval: 10s
18    {{- if ne .Values.mixer.adapters.stackdriver.auth.serviceAccountPath "" }}
19    serviceAccountPath: {{ .Values.mixer.adapters.stackdriver.auth.serviceAccountPath }}
20    {{- end }}
21    {{- if ne .Values.mixer.adapters.stackdriver.auth.apiKey "" }}
22    apiKey: {{ .Values.mixer.adapters.stackdriver.auth.apiKey }}
23    {{- end }}
24    {{- if .Values.mixer.adapters.stackdriver.auth.appCredentials }}
25    appCredentials: {{ .Values.mixer.adapters.stackdriver.auth.appCredentials }}
26    {{- end }}
27    {{- if .Values.mixer.adapters.stackdriver.metrics.enabled }}
28    metricInfo:
29      server-request-count.instance.{{ .Release.Namespace }}:
30        # Due to a bug in gogoproto deserialization, Enums in maps must be
31        # specified by their integer value, not variant name. See
32        # https://github.com/googleapis/googleapis/blob/master/google/api/metric.proto
33        # MetricKind and ValueType for the values to provide.
34        kind: 3 # CUMULATIVE
35        value: 2 # INT64
36        metric_type: "istio.io/service/server/request_count"
37      server-request-bytes.instance.{{ .Release.Namespace }}:
38        kind: 3 # CUMULATIVE
39        value: 5 # DISTRIBUTION
40        buckets:
41          exponentialBuckets:
42            numFiniteBuckets: 20
43            scale: 1
44            growthFactor: 2
45        metric_type: "istio.io/service/server/request_bytes"
46      server-response-bytes.instance.{{ .Release.Namespace }}:
47        kind: 3 # CUMULATIVE
48        value: 5 # DISTRIBUTION
49        buckets:
50          exponentialBuckets:
51            numFiniteBuckets: 20
52            scale: 1
53            growthFactor: 2
54        metric_type: "istio.io/service/server/response_bytes"
55      server-response-latencies.instance.{{ .Release.Namespace }}:
56        kind: 3 # CUMULATIVE
57        value: 5 # DISTRIBUTION
58        buckets:
59          exponentialBuckets:
60            numFiniteBuckets: 20
61            scale: 1
62            growthFactor: 2
63        metric_type: "istio.io/service/server/response_latencies"
64      server-received-bytes-count.instance.{{ .Release.Namespace }}:
65        kind: 3 # CUMULATIVE
66        value: 2 # INT64
67        metric_type: "istio.io/service/server/received_bytes_count"
68      server-sent-bytes-count.instance.{{ .Release.Namespace }}:
69        kind: 3 # CUMULATIVE
70        value: 2 # INT64
71        metric_type: "istio.io/service/server/sent_bytes_count"
72      client-request-count.instance.{{ .Release.Namespace }}:
73        kind: 3 # CUMULATIVE
74        value: 2 # INT64
75        metric_type: "istio.io/service/client/request_count"
76      client-request-bytes.instance.{{ .Release.Namespace }}:
77        kind: 3 # CUMULATIVE
78        value: 5 # DISTRIBUTION
79        buckets:
80          exponentialBuckets:
81            numFiniteBuckets: 20
82            scale: 1
83            growthFactor: 2
84        metric_type: "istio.io/service/client/request_bytes"
85      client-response-bytes.instance.{{ .Release.Namespace }}:
86        kind: 3 # CUMULATIVE
87        value: 5 # DISTRIBUTION
88        buckets:
89          exponentialBuckets:
90            numFiniteBuckets: 20
91            scale: 1
92            growthFactor: 2
93        metric_type: "istio.io/service/client/response_bytes"
94      client-roundtrip-latencies.instance.{{ .Release.Namespace }}:
95        kind: 3 # CUMULATIVE
96        value: 5 # DISTRIBUTION
97        buckets:
98          exponentialBuckets:
99            numFiniteBuckets: 20
100            scale: 1
101            growthFactor: 2
102        metric_type: "istio.io/service/client/roundtrip_latencies"
103      client-received-bytes-count.instance.{{ .Release.Namespace }}:
104        kind: 3 # CUMULATIVE
105        value: 2 # INT64
106        metric_type: "istio.io/service/client/received_bytes_count"
107      client-sent-bytes-count.instance.{{ .Release.Namespace }}:
108        kind: 3 # CUMULATIVE
109        value: 2 # INT64
110        metric_type: "istio.io/service/client/sent_bytes_count"
111    {{- end }}
112    {{- if .Values.mixer.adapters.stackdriver.logging.enabled }}
113    logInfo:
114      server-accesslog-stackdriver.instance.{{ .Release.Namespace }}:
115        labelNames:
116        - mesh_uid
117        - source_uid
118        - source_ip
119        - source_app
120        - source_principal
121        - source_name
122        - source_workload
123        - source_namespace
124        - source_owner
125        - destination_uid
126        - destination_app
127        - destination_ip
128        - destination_service_host
129        - destination_workload
130        - destination_name
131        - destination_namespace
132        - destination_owner
133        - destination_principal
134        - api_name
135        - api_version
136        - api_claims
137        - api_key
138        - request_operation
139        - protocol
140        - method
141        - url
142        - response_code
143        - response_size
144        - request_size
145        - request_id
146        - latency
147        - service_authentication_policy
148        - user_agent
149        - response_timestamp
150        - received_bytes
151        - sent_bytes
152        - referer
153      server-tcp-accesslog-stackdriver.instance.{{ .Release.Namespace }}:
154        labelNames:
155        - mesh_uid
156        - connection_id
157        - connection_event
158        - source_uid
159        - source_ip
160        - source_app
161        - source_principal
162        - source_name
163        - source_workload
164        - source_namespace
165        - source_owner
166        - destination_uid
167        - destination_app
168        - destination_ip
169        - destination_service_host
170        - destination_workload
171        - destination_name
172        - destination_namespace
173        - destination_owner
174        - destination_principal
175        - protocol
176        - connction_duration
177        - service_authentication_policy
178        - received_bytes
179        - sent_bytes
180        - total_received_bytes
181        - total_sent_bytes
182      {{- end }}
183---
184{{- if .Values.mixer.adapters.stackdriver.metrics.enabled }}
185#################################################
186############## Metric Config ####################
187#################################################
188apiVersion: "config.istio.io/v1alpha2"
189kind: rule
190metadata:
191  name: stackdriver-server
192  namespace: {{ .Release.Namespace }}
193  labels:
194    app: istio-telemetry
195    release: {{ .Release.Name }}
196spec:
197  match: (context.protocol == "http" || context.protocol == "grpc") && (context.reporter.kind | "inbound" == "inbound")
198  actions:
199  - handler: stackdriver
200    instances:
201    - server-request-count
202    - server-request-bytes
203    - server-response-bytes
204    - server-response-latencies
205---
206apiVersion: "config.istio.io/v1alpha2"
207kind: rule
208metadata:
209  name: stackdriver-client
210  namespace: {{ .Release.Namespace }}
211  labels:
212    app: istio-telemetry
213    release: {{ .Release.Name }}
214spec:
215  match: (context.protocol == "http" || context.protocol == "grpc") && (context.reporter.kind | "inbound" == "outbound")
216  actions:
217  - handler: stackdriver
218    instances:
219    - client-request-count
220    - client-request-bytes
221    - client-response-bytes
222    - client-roundtrip-latencies
223---
224apiVersion: "config.istio.io/v1alpha2"
225kind: rule
226metadata:
227  name: stackdriver-tcp-server
228  namespace: {{ .Release.Namespace }}
229  labels:
230    app: istio-telemetry
231    release: {{ .Release.Name }}
232spec:
233  match: context.protocol == "tcp" && (context.reporter.kind | "inbound" == "inbound")
234  actions:
235  - handler: stackdriver
236    instances:
237    - server-received-bytes-count
238    - server-sent-bytes-count
239---
240apiVersion: "config.istio.io/v1alpha2"
241kind: rule
242metadata:
243  name: stackdriver-tcp-client
244  namespace: {{ .Release.Namespace }}
245  labels:
246    app: istio-telemetry
247    release: {{ .Release.Name }}
248spec:
249  match: context.protocol == "tcp" && (context.reporter.kind | "inbound" == "outbound")
250  actions:
251  - handler: stackdriver
252    instances:
253    - client-received-bytes-count
254    - client-sent-bytes-count
255---
256apiVersion: "config.istio.io/v1alpha2"
257kind: instance
258metadata:
259  name: server-request-count
260  namespace: {{ .Release.Namespace }}
261  labels:
262    app: istio-telemetry
263    release: {{ .Release.Name }}
264spec:
265  compiledTemplate: metric
266  params:
267    value: "1"
268    dimensions:
269      mesh_uid: '"{{ .Values.global.meshID }}"'
270      destination_service_name: destination.service.name | "unknown"
271      destination_service_namespace: destination.service.namespace | "unknown"
272      destination_port: destination.port | 0
273      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
274      request_protocol: context.protocol | "unknown"
275      api_version: api.version | "unknown"
276      api_name: api.service | "unknown"
277      response_code: response.code | 0
278      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
279      source_workload_namespace: source.workload.namespace | "unknown"
280      source_workload_name: source.workload.name | "unknown"
281      source_owner: source.owner | "unknown"
282      destination_workload_namespace: destination.workload.namespace | "unknown"
283      destination_workload_name: destination.workload.name | "unknown"
284      destination_owner: destination.owner | "unknown"
285      destination_principal: destination.principal | "unknown"
286      source_principal: source.principal | "unknown"
287    monitoredResourceType: '"k8s_container"'
288    monitoredResourceDimensions:
289      project_id: '""'
290      cluster_name: '""'
291      namespace_name: destination.workload.namespace | "unknown"
292      location: '""'
293      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
294      pod_name: destination.name | "unknown"
295---
296apiVersion: "config.istio.io/v1alpha2"
297kind: instance
298metadata:
299  name: client-request-count
300  namespace: {{ .Release.Namespace }}
301  labels:
302    app: istio-telemetry
303    release: {{ .Release.Name }}
304spec:
305  compiledTemplate: metric
306  params:
307    value: "1"
308    dimensions:
309      mesh_uid: '"{{ .Values.global.meshID }}"'
310      destination_service_name: destination.service.name | "unknown"
311      destination_service_namespace: destination.service.namespace | "unknown"
312      destination_port: destination.port | 0
313      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
314      request_protocol: context.protocol | "unknown"
315      api_version: api.version | "unknown"
316      api_name: api.service | "unknown"
317      response_code: response.code | 0
318      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
319      source_workload_namespace: source.workload.namespace | "unknown"
320      source_workload_name: source.workload.name | "unknown"
321      source_owner: source.owner | "unknown"
322      destination_workload_namespace: destination.workload.namespace | "unknown"
323      destination_workload_name: destination.workload.name | "unknown"
324      destination_owner: destination.owner | "unknown"
325      destination_principal: destination.principal | "unknown"
326      source_principal: source.principal | "unknown"
327    monitoredResourceType: '"k8s_pod"'
328    monitoredResourceDimensions:
329      project_id: '""'
330      cluster_name: '""'
331      namespace_name: source.workload.namespace | "unknown"
332      location: '""'
333      pod_name: source.name | "unknown"
334---
335apiVersion: "config.istio.io/v1alpha2"
336kind: instance
337metadata:
338  name: server-request-bytes
339  namespace: {{ .Release.Namespace }}
340  labels:
341    app: istio-telemetry
342    release: {{ .Release.Name }}
343spec:
344  compiledTemplate: metric
345  params:
346    value: request.total_size
347    dimensions:
348      mesh_uid: '"{{ .Values.global.meshID }}"'
349      destination_service_name: destination.service.name | "unknown"
350      destination_service_namespace: destination.service.namespace | "unknown"
351      destination_port: destination.port | 0
352      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
353      request_protocol: context.protocol | "unknown"
354      api_version: api.version | "unknown"
355      api_name: api.service | "unknown"
356      response_code: response.code | 0
357      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
358      source_workload_namespace: source.workload.namespace | "unknown"
359      source_workload_name: source.workload.name | "unknown"
360      source_owner: source.owner | "unknown"
361      destination_workload_namespace: destination.workload.namespace | "unknown"
362      destination_workload_name: destination.workload.name | "unknown"
363      destination_owner: destination.owner | "unknown"
364      destination_principal: destination.principal | "unknown"
365      source_principal: source.principal | "unknown"
366    monitoredResourceType: '"k8s_container"'
367    monitoredResourceDimensions:
368      project_id: '""'
369      cluster_name: '""'
370      namespace_name: destination.workload.namespace | "unknown"
371      location: '""'
372      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
373      pod_name: destination.name | "unknown"
374---
375apiVersion: "config.istio.io/v1alpha2"
376kind: instance
377metadata:
378  name: client-request-bytes
379  namespace: {{ .Release.Namespace }}
380  labels:
381    app: istio-telemetry
382    release: {{ .Release.Name }}
383spec:
384  compiledTemplate: metric
385  params:
386    value: request.total_size
387    dimensions:
388      mesh_uid: '"{{ .Values.global.meshID }}"'
389      destination_service_name: destination.service.name | "unknown"
390      destination_service_namespace: destination.service.namespace | "unknown"
391      destination_port: destination.port | 0
392      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
393      request_protocol: context.protocol | "unknown"
394      api_version: api.version | "unknown"
395      api_name: api.service | "unknown"
396      response_code: response.code | 0
397      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
398      source_workload_namespace: source.workload.namespace | "unknown"
399      source_workload_name: source.workload.name | "unknown"
400      source_owner: source.owner | "unknown"
401      destination_workload_namespace: destination.workload.namespace | "unknown"
402      destination_workload_name: destination.workload.name | "unknown"
403      destination_owner: destination.owner | "unknown"
404      destination_principal: destination.principal | "unknown"
405      source_principal: source.principal | "unknown"
406    monitoredResourceType: '"k8s_pod"'
407    monitoredResourceDimensions:
408      project_id: '""'
409      cluster_name: '""'
410      namespace_name: source.workload.namespace | "unknown"
411      location: '""'
412      pod_name: source.name | "unknown"
413---
414apiVersion: "config.istio.io/v1alpha2"
415kind: instance
416metadata:
417  name: server-response-bytes
418  namespace: {{ .Release.Namespace }}
419  labels:
420    app: istio-telemetry
421    release: {{ .Release.Name }}
422spec:
423  compiledTemplate: metric
424  params:
425    value: response.total_size
426    dimensions:
427      mesh_uid: '"{{ .Values.global.meshID }}"'
428      destination_service_name: destination.service.name | "unknown"
429      destination_service_namespace: destination.service.namespace | "unknown"
430      destination_port: destination.port | 0
431      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
432      request_protocol: context.protocol | "unknown"
433      api_version: api.version | "unknown"
434      api_name: api.service | "unknown"
435      response_code: response.code | 0
436      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
437      source_workload_namespace: source.workload.namespace | "unknown"
438      source_workload_name: source.workload.name | "unknown"
439      source_owner: source.owner | "unknown"
440      destination_workload_namespace: destination.workload.namespace | "unknown"
441      destination_workload_name: destination.workload.name | "unknown"
442      destination_owner: destination.owner | "unknown"
443      destination_principal: destination.principal | "unknown"
444      source_principal: source.principal | "unknown"
445    monitoredResourceType: '"k8s_container"'
446    monitoredResourceDimensions:
447      project_id: '""'
448      cluster_name: '""'
449      namespace_name: destination.workload.namespace | "unknown"
450      location: '""'
451      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
452      pod_name: destination.name | "unknown"
453---
454apiVersion: "config.istio.io/v1alpha2"
455kind: instance
456metadata:
457  name: client-response-bytes
458  namespace: {{ .Release.Namespace }}
459  labels:
460    app: istio-telemetry
461    release: {{ .Release.Name }}
462spec:
463  compiledTemplate: metric
464  params:
465    value: response.total_size
466    dimensions:
467      mesh_uid: '"{{ .Values.global.meshID }}"'
468      destination_service_name: destination.service.name | "unknown"
469      destination_service_namespace: destination.service.namespace | "unknown"
470      destination_port: destination.port | 0
471      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
472      request_protocol: context.protocol | "unknown"
473      api_version: api.version | "unknown"
474      api_name: api.service | "unknown"
475      response_code: response.code | 0
476      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
477      source_workload_namespace: source.workload.namespace | "unknown"
478      source_workload_name: source.workload.name | "unknown"
479      source_owner: source.owner | "unknown"
480      destination_workload_namespace: destination.workload.namespace | "unknown"
481      destination_workload_name: destination.workload.name | "unknown"
482      destination_owner: destination.owner | "unknown"
483      destination_principal: destination.principal | "unknown"
484      source_principal: source.principal | "unknown"
485    monitoredResourceType: '"k8s_pod"'
486    monitoredResourceDimensions:
487      project_id: '""'
488      cluster_name: '""'
489      namespace_name: source.workload.namespace | "unknown"
490      location: '""'
491      pod_name: source.name | "unknown"
492---
493apiVersion: "config.istio.io/v1alpha2"
494kind: instance
495metadata:
496  name: server-response-latencies
497  namespace: {{ .Release.Namespace }}
498  labels:
499    app: istio-telemetry
500    release: {{ .Release.Name }}
501spec:
502  compiledTemplate: metric
503  params:
504    value: response.duration
505    dimensions:
506      mesh_uid: '"{{ .Values.global.meshID }}"'
507      destination_service_name: destination.service.name | "unknown"
508      destination_service_namespace: destination.service.namespace | "unknown"
509      destination_port: destination.port | 0
510      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
511      request_protocol: context.protocol | "unknown"
512      api_version: api.version | "unknown"
513      api_name: api.service | "unknown"
514      response_code: response.code | 0
515      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
516      source_workload_namespace: source.workload.namespace | "unknown"
517      source_workload_name: source.workload.name | "unknown"
518      source_owner: source.owner | "unknown"
519      destination_workload_namespace: destination.workload.namespace | "unknown"
520      destination_workload_name: destination.workload.name | "unknown"
521      destination_owner: destination.owner | "unknown"
522      destination_principal: destination.principal | "unknown"
523      source_principal: source.principal | "unknown"
524    monitoredResourceType: '"k8s_container"'
525    monitoredResourceDimensions:
526      project_id: '""'
527      cluster_name: '""'
528      namespace_name: destination.workload.namespace | "unknown"
529      location: '""'
530      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
531      pod_name: destination.name | "unknown"
532---
533apiVersion: "config.istio.io/v1alpha2"
534kind: instance
535metadata:
536  name: client-roundtrip-latencies
537  namespace: {{ .Release.Namespace }}
538  labels:
539    app: istio-telemetry
540    release: {{ .Release.Name }}
541spec:
542  compiledTemplate: metric
543  params:
544    value: response.duration
545    dimensions:
546      mesh_uid: '"{{ .Values.global.meshID }}"'
547      destination_service_name: destination.service.name | "unknown"
548      destination_service_namespace: destination.service.namespace | "unknown"
549      destination_port: destination.port | 0
550      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
551      request_protocol: context.protocol | "unknown"
552      api_version: api.version | "unknown"
553      api_name: api.service | "unknown"
554      response_code: response.code | 0
555      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
556      source_workload_namespace: source.workload.namespace | "unknown"
557      source_workload_name: source.workload.name | "unknown"
558      source_owner: source.owner | "unknown"
559      destination_workload_namespace: destination.workload.namespace | "unknown"
560      destination_workload_name: destination.workload.name | "unknown"
561      destination_owner: destination.owner | "unknown"
562      destination_principal: destination.principal | "unknown"
563      source_principal: source.principal | "unknown"
564    monitoredResourceType: '"k8s_pod"'
565    monitoredResourceDimensions:
566      project_id: '""'
567      cluster_name: '""'
568      namespace_name: source.workload.namespace | "unknown"
569      location: '""'
570      pod_name: source.name | "unknown"
571---
572apiVersion: "config.istio.io/v1alpha2"
573kind: instance
574metadata:
575  name: server-received-bytes-count
576  namespace: {{ .Release.Namespace }}
577  labels:
578    app: istio-telemetry
579    release: {{ .Release.Name }}
580spec:
581  compiledTemplate: metric
582  params:
583    value: connection.received.bytes | 0
584    dimensions:
585      mesh_uid: '"{{ .Values.global.meshID }}"'
586      destination_service_name: destination.service.name | "unknown"
587      destination_service_namespace: destination.service.namespace | "unknown"
588      destination_port: destination.port | 0
589      request_protocol: context.protocol | "unknown"
590      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
591      source_workload_namespace: source.workload.namespace | "unknown"
592      source_workload_name: source.workload.name | "unknown"
593      source_owner: source.owner | "unknown"
594      destination_workload_namespace: destination.workload.namespace | "unknown"
595      destination_workload_name: destination.workload.name | "unknown"
596      destination_owner: destination.owner | "unknown"
597      destination_principal: destination.principal | "unknown"
598      source_principal: source.principal | "unknown"
599    monitoredResourceType: '"k8s_container"'
600    monitoredResourceDimensions:
601      project_id: '""'
602      cluster_name: '""'
603      namespace_name: destination.workload.namespace | "unknown"
604      location: '""'
605      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
606      pod_name: destination.name | "unknown"
607---
608apiVersion: "config.istio.io/v1alpha2"
609kind: instance
610metadata:
611  name: client-received-bytes-count
612  namespace: {{ .Release.Namespace }}
613  labels:
614    app: istio-telemetry
615    release: {{ .Release.Name }}
616spec:
617  compiledTemplate: metric
618  params:
619    value: connection.received.bytes | 0
620    dimensions:
621      mesh_uid: '"{{ .Values.global.meshID }}"'
622      destination_service_name: destination.service.name | "unknown"
623      destination_service_namespace: destination.service.namespace | "unknown"
624      destination_port: destination.port | 0
625      request_protocol: context.protocol | "unknown"
626      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
627      source_workload_namespace: source.workload.namespace | "unknown"
628      source_workload_name: source.workload.name | "unknown"
629      source_owner: source.owner | "unknown"
630      destination_workload_namespace: destination.workload.namespace | "unknown"
631      destination_workload_name: destination.workload.name | "unknown"
632      destination_owner: destination.owner | "unknown"
633      destination_principal: destination.principal | "unknown"
634      source_principal: source.principal | "unknown"
635    monitoredResourceType: '"k8s_pod"'
636    monitoredResourceDimensions:
637      project_id: '""'
638      cluster_name: '""'
639      namespace_name: source.workload.namespace | "unknown"
640      location: '""'
641      pod_name: source.name | "unknown"
642---
643apiVersion: "config.istio.io/v1alpha2"
644kind: instance
645metadata:
646  name: server-sent-bytes-count
647  namespace: {{ .Release.Namespace }}
648  labels:
649    app: istio-telemetry
650    release: {{ .Release.Name }}
651spec:
652  compiledTemplate: metric
653  params:
654    value: connection.sent.bytes | 0
655    dimensions:
656      mesh_uid: '"{{ .Values.global.meshID }}"'
657      destination_service_name: destination.service.name | "unknown"
658      destination_service_namespace: destination.service.namespace | "unknown"
659      destination_port: destination.port | 0
660      request_protocol: context.protocol | "unknown"
661      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
662      source_workload_namespace: source.workload.namespace | "unknown"
663      source_workload_name: source.workload.name | "unknown"
664      source_owner: source.owner | "unknown"
665      destination_workload_namespace: destination.workload.namespace | "unknown"
666      destination_workload_name: destination.workload.name | "unknown"
667      destination_owner: destination.owner | "unknown"
668      destination_principal: destination.principal | "unknown"
669      source_principal: source.principal | "unknown"
670    monitoredResourceType: '"k8s_container"'
671    monitoredResourceDimensions:
672      project_id: '""'
673      cluster_name: '""'
674      namespace_name: destination.workload.namespace | "unknown"
675      location: '""'
676      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
677      pod_name: destination.name | "unknown"
678---
679apiVersion: "config.istio.io/v1alpha2"
680kind: instance
681metadata:
682  name: client-sent-bytes-count
683  namespace: {{ .Release.Namespace }}
684  labels:
685    app: istio-telemetry
686    release: {{ .Release.Name }}
687spec:
688  compiledTemplate: metric
689  params:
690    value: connection.sent.bytes | 0
691    dimensions:
692      mesh_uid: '"{{ .Values.global.meshID }}"'
693      destination_service_name: destination.service.name | "unknown"
694      destination_service_namespace: destination.service.namespace | "unknown"
695      destination_port: destination.port | 0
696      request_protocol: context.protocol | "unknown"
697      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
698      source_workload_namespace: source.workload.namespace | "unknown"
699      source_workload_name: source.workload.name | "unknown"
700      source_owner: source.owner | "unknown"
701      destination_workload_namespace: destination.workload.namespace | "unknown"
702      destination_workload_name: destination.workload.name | "unknown"
703      destination_owner: destination.owner | "unknown"
704      destination_principal: destination.principal | "unknown"
705      source_principal: source.principal | "unknown"
706    monitoredResourceType: '"k8s_pod"'
707    monitoredResourceDimensions:
708      project_id: '""'
709      cluster_name: '""'
710      namespace_name: source.workload.namespace | "unknown"
711      location: '""'
712      pod_name: source.name | "unknown"
713{{- end }}
714---
715{{- if .Values.mixer.adapters.stackdriver.logging.enabled }}
716apiVersion: "config.istio.io/v1alpha2"
717kind: instance
718metadata:
719  name: server-accesslog-stackdriver
720  namespace: {{ .Release.Namespace }}
721  labels:
722    app: istio-telemetry
723    release: {{ .Release.Name }}
724spec:
725  compiledTemplate: logentry
726  params:
727    severity: '"Info"'
728    timestamp: request.time
729    variables:
730      mesh_uid: '"{{ .Values.global.meshID }}"'
731      source_uid: source.uid | ""
732      source_ip: source.ip | ip("0.0.0.0")
733      source_app: source.labels["app"] | ""
734      source_principal: source.principal | ""
735      source_name: source.name | ""
736      source_workload: source.workload.name | ""
737      source_namespace: source.namespace | ""
738      source_owner: source.owner | ""
739      destination_uid: destination.uid | ""
740      destination_app: destination.labels["app"] | ""
741      destination_ip: destination.ip | ip("0.0.0.0")
742      destination_service_host: destination.service.host | ""
743      destination_workload: destination.workload.name | ""
744      destination_name: destination.name | ""
745      destination_namespace: destination.namespace | ""
746      destination_owner: destination.owner | ""
747      destination_principal: destination.principal | ""
748      api_name: api.service | ""
749      api_version: api.version | ""
750      api_claims: request.auth.raw_claims | ""
751      api_key: request.api_key | request.headers["x-api-key"] | ""
752      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
753      protocol: request.scheme | context.protocol | "http"
754      method: request.method | ""
755      url: request.path | ""
756      response_code: response.code | 0
757      response_size: response.size | 0
758      request_size: request.size | 0
759      request_id: request.headers["x-request-id"] | ""
760      latency: response.duration | "0ms"
761      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
762      user_agent: request.useragent | ""
763      response_timestamp: response.time
764      received_bytes: request.total_size | 0
765      sent_bytes: response.total_size | 0
766      referer: request.referer | ""
767    monitored_resource_type: '"k8s_container"'
768    monitoredResourceDimensions:
769      project_id: '""'
770      cluster_name: '""'
771      namespace_name: destination.namespace | "unknown"
772      location: '""'
773      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
774      pod_name: destination.name | "unknown"
775---
776apiVersion: "config.istio.io/v1alpha2"
777kind: instance
778metadata:
779  name: server-tcp-accesslog-stackdriver
780  namespace: {{ .Release.Namespace }}
781  labels:
782    app: istio-telemetry
783    release: {{ .Release.Name }}
784spec:
785  compiledTemplate: logentry
786  params:
787    severity: '"Info"'
788    timestamp: context.time | timestamp("2017-01-01T00:00:00Z")
789    variables:
790      mesh_uid: '"{{ .Values.global.meshID }}"'
791      source_uid: source.uid | ""
792      connection_id: connection.id | ""
793      connection_event: connection.event | ""
794      source_ip: source.ip | ip("0.0.0.0")
795      source_app: source.labels["app"] | ""
796      source_principal: source.principal | ""
797      source_name: source.name | ""
798      source_workload: source.workload.name | ""
799      source_namespace: source.namespace | ""
800      source_owner: source.owner | ""
801      destination_uid: destination.uid | ""
802      destination_app: destination.labels["app"] | ""
803      destination_ip: destination.ip | ip("0.0.0.0")
804      destination_service_host: destination.service.host | ""
805      destination_workload: destination.workload.name | ""
806      destination_name: destination.name | ""
807      destination_namespace: destination.namespace | ""
808      destination_owner: destination.owner | ""
809      destination_principal: destination.principal | ""
810      protocol: context.protocol | "tcp"
811      connction_duration: connection.duration | "0ms"
812      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
813      received_bytes: connection.received.bytes | 0
814      sent_bytes: connection.sent.bytes | 0
815      total_received_bytes: connection.received.bytes_total | 0
816      total_sent_bytes: connection.sent.bytes_total | 0
817    monitored_resource_type: '"k8s_container"'
818    monitoredResourceDimensions:
819      project_id: '""'
820      cluster_name: '""'
821      namespace_name: destination.namespace | "unknown"
822      location: '""'
823      container_name: conditional((destination.name | "unknown").startsWith("istio-telemetry") || (destination.name | "unknown").startsWith("istio-policy"), "mixer", destination.container.name | "unknown")
824      pod_name: destination.name | "unknown"
825---
826apiVersion: "config.istio.io/v1alpha2"
827kind: rule
828metadata:
829  name: stackdriver-log
830  namespace: {{ .Release.Namespace }}
831  labels:
832    app: istio-telemetry
833    release: {{ .Release.Name }}
834spec:
835  match: (context.protocol == "http" || context.protocol == "grpc") && (context.reporter.kind | "inbound" == "inbound")
836  actions:
837  - handler: stackdriver
838    instances:
839    - server-accesslog-stackdriver
840---
841apiVersion: "config.istio.io/v1alpha2"
842kind: rule
843metadata:
844  name: stackdriver-log-tcp
845  namespace: {{ .Release.Namespace }}
846  labels:
847    app: istio-telemetry
848    release: {{ .Release.Name }}
849spec:
850  match: (context.protocol == "tcp") && (context.reporter.kind | "inbound" == "inbound")
851  actions:
852  - handler: stackdriver
853    instances:
854    - server-tcp-accesslog-stackdriver
855{{- end }}
856---
857{{- if .Values.mixer.adapters.stackdriver.tracer.enabled }}
858apiVersion: "config.istio.io/v1alpha2"
859kind: instance
860metadata:
861  name: stackdriver-span
862  namespace: {{ .Release.Namespace }}
863  labels:
864    app: istio-telemetry
865    release: {{ .Release.Name }}
866spec:
867  compiledTemplate: tracespan
868  params:
869    traceId: request.headers["x-b3-traceid"]
870    spanId: request.headers["x-b3-spanid"] | ""
871    parentSpanId: request.headers["x-b3-parentspanid"] | ""
872    spanName: destination.service.host | destination.service.name | destination.workload.name | "unknown"
873    startTime: request.time
874    endTime: response.time
875    clientSpan: (context.reporter.kind | "inbound") == "outbound"
876    rewriteClientSpanId: "true"
877    spanTags:
878      destination_service_name: destination.service.name | "unknown"
879      destination_service_namespace: destination.service.namespace | "unknown"
880      destination_port: destination.port | 0
881      request_operation: conditional((context.protocol | "unknown") == "grpc", request.path | "unknown", request.method | "unknown")
882      request_protocol: context.protocol | "unknown"
883      api_version: api.version | "unknown"
884      api_name: api.service | "unknown"
885      response_code: response.code | 0
886      service_authentication_policy: conditional((context.reporter.kind | "inbound") == "outbound", "unknown", conditional(connection.mtls | false, "mutual_tls", "none"))
887      source_workload_namespace: source.workload.namespace | "unknown"
888      source_workload_name: source.workload.name | "unknown"
889      source_owner: source.owner | "unknown"
890      destination_workload_namespace: destination.workload.namespace | "unknown"
891      destination_workload_name: destination.workload.name | "unknown"
892      destination_owner: destination.owner | "unknown"
893      http_url: request.path | ""
894      request_size: request.size | 0
895      response_size: response.size | 0
896      source_ip: source.ip | ip("0.0.0.0")
897---
898apiVersion: "config.istio.io/v1alpha2"
899kind: rule
900metadata:
901  name: stackdriver-tracing-rule
902  namespace: {{ .Release.Namespace }}
903  labels:
904    app: istio-telemetry
905    release: {{ .Release.Name }}
906spec:
907  match: (context.protocol == "http" || context.protocol == "grpc") && request.headers["x-b3-sampled"] == "1" && destination.workload.name != "istio-telemetry" && destination.workload.name != "istio-pilot"
908  actions:
909  - handler: stackdriver
910    instances:
911    - stackdriver-span
912{{- end }}
913---
914{{- if .Values.mixer.adapters.stackdriver.contextGraph.enabled }}
915apiVersion: "config.istio.io/v1alpha2"
916kind: instance
917metadata:
918  name: stackdriver-edge
919  namespace: {{ .Release.Namespace }}
920  labels:
921    app: istio-telemetry
922    release: {{ .Release.Name }}
923spec:
924  compiledTemplate: edge
925  params:
926    timestamp: request.time | context.time | timestamp("2017-01-01T00:00:00Z")
927    sourceUid: source.uid | "Unknown"
928    sourceOwner: source.owner | "Unknown"
929    sourceWorkloadName: source.workload.name | "Unknown"
930    sourceWorkloadNamespace: source.workload.namespace | "Unknown"
931    destinationUid: destination.uid | "Unknown"
932    destinationOwner: destination.owner | "Unknown"
933    destinationWorkloadName: destination.workload.name | "Unknown"
934    destinationWorkloadNamespace: destination.workload.namespace | "Unknown"
935    contextProtocol: context.protocol | "Unknown"
936    apiProtocol: api.protocol | "Unknown"
937    destinationServiceName: destination.service.name | "Unknown"
938    destinationServiceNamespace: destination.service.namespace | "Unknown"
939---
940apiVersion: "config.istio.io/v1alpha2"
941kind: rule
942metadata:
943  name: stackdriver-edge
944  namespace: {{ .Release.Namespace }}
945  labels:
946    app: istio-telemetry
947    release: {{ .Release.Name }}
948spec:
949  match: (context.reporter.kind | "inbound" == "inbound") && (context.protocol | "unknown" != "unknown")
950  actions:
951   - handler: stackdriver
952     instances:
953     - stackdriver-edge
954{{- end }}
955{{- end }}
956