enhancement: Add different samplers and propagators support with OpenTelemetry (#2201)
* Samplers: Check PR/helm values for supported types * Propagators: Check PR/helm values for supported types * Added tracing support via fission CLI * Use parentbased_traceidratio as default sampler with 0.1 ratio Signed-off-by: Sanket Sudake <sanketsudake@gmail.com>
This commit is contained in:
@@ -61,6 +61,12 @@ This template generates the image name for the deployment depending on the value
|
|||||||
- name: OTEL_EXPORTER_OTLP_HEADERS
|
- name: OTEL_EXPORTER_OTLP_HEADERS
|
||||||
value: "{{ .Values.openTelemetry.otlpHeaders }}"
|
value: "{{ .Values.openTelemetry.otlpHeaders }}"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
- name: OTEL_TRACES_SAMPLER
|
||||||
|
value: "{{ .Values.openTelemetry.tracesSampler }}"
|
||||||
|
- name: OTEL_TRACES_SAMPLER_ARG
|
||||||
|
value: "{{ .Values.openTelemetry.tracesSamplingRate }}"
|
||||||
|
- name: OTEL_PROPAGATORS
|
||||||
|
value: "{{ .Values.openTelemetry.propagators }}"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{- define "opentracing.envs" }}
|
{{- define "opentracing.envs" }}
|
||||||
|
|||||||
@@ -340,7 +340,7 @@ canaryDeployment:
|
|||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
# Use the following flags to enable OpenTracing.
|
# Use the following flags to enable OpenTracing.
|
||||||
# Note: OpenTracing support will be deprecated in an upcoming release.
|
# Note: OpenTracing support will be removed in an upcoming release.
|
||||||
# Please prefer using OpenTelemetry instead.
|
# Please prefer using OpenTelemetry instead.
|
||||||
openTracing:
|
openTracing:
|
||||||
## set this flag to true if you wish to enable OpenTracing
|
## set this flag to true if you wish to enable OpenTracing
|
||||||
@@ -364,6 +364,29 @@ openTelemetry:
|
|||||||
# to the collector.
|
# to the collector.
|
||||||
# Eg. otlpHeaders: "key1=value1,key2=value2"
|
# Eg. otlpHeaders: "key1=value1,key2=value2"
|
||||||
otlpHeaders: ""
|
otlpHeaders: ""
|
||||||
|
# Supported samplers:
|
||||||
|
# always_on - Sampler that always samples spans, regardless of the parent span's sampling decision.
|
||||||
|
# always_off - Sampler that never samples spans, regardless of the parent span's sampling decision.
|
||||||
|
# traceidratio - Sampler that samples probabalistically based on rate.
|
||||||
|
# parentbased_always_on - (default if empty) Sampler that respects its parent span's sampling decision, but otherwise always samples.
|
||||||
|
# parentbased_always_off - Sampler that respects its parent span's sampling decision, but otherwise never samples.
|
||||||
|
# parentbased_traceidratio - Sampler that respects its parent span's sampling decision, but otherwise samples probabalistically based on rate.
|
||||||
|
tracesSampler: "parentbased_traceidratio"
|
||||||
|
# Each Sampler type defines its own expected input, if any.
|
||||||
|
# Currently we get trace ratio for the case of,
|
||||||
|
# 1. traceidratio
|
||||||
|
# 2. parentbased_traceidratio
|
||||||
|
# Sampling probability, a number in the [0..1] range, e.g. "0.1". Default is 0.1.
|
||||||
|
tracesSamplingRate: "0.1"
|
||||||
|
# Supported providers:
|
||||||
|
# tracecontext - W3C Trace Context
|
||||||
|
# baggage - W3C Baggage
|
||||||
|
# b3 - B3 Single
|
||||||
|
# b3multi - B3 Multi
|
||||||
|
# jaeger - Jaeger uber-trace-id header
|
||||||
|
# xray - AWS X-Ray (third party)
|
||||||
|
# ottrace - OpenTracing Trace (third party)
|
||||||
|
propagators: "tracecontext,baggage"
|
||||||
|
|
||||||
## Message Queue Trigger Kind, KEDA: enable and configuration
|
## Message Queue Trigger Kind, KEDA: enable and configuration
|
||||||
mqt_keda:
|
mqt_keda:
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ This template generates the image name for the deployment depending on the value
|
|||||||
- name: OTEL_EXPORTER_OTLP_HEADERS
|
- name: OTEL_EXPORTER_OTLP_HEADERS
|
||||||
value: "{{ .Values.openTelemetry.otlpHeaders }}"
|
value: "{{ .Values.openTelemetry.otlpHeaders }}"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
- name: OTEL_TRACES_SAMPLER
|
||||||
|
value: "{{ .Values.openTelemetry.tracesSampler }}"
|
||||||
|
- name: OTEL_TRACES_SAMPLER_ARG
|
||||||
|
value: "{{ .Values.openTelemetry.tracesSamplingRate }}"
|
||||||
|
- name: OTEL_PROPAGATORS
|
||||||
|
value: "{{ .Values.openTelemetry.propagators }}"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{- define "opentracing.envs" }}
|
{{- define "opentracing.envs" }}
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ canaryDeployment:
|
|||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
# Use the following flags to enable OpenTracing.
|
# Use the following flags to enable OpenTracing.
|
||||||
# Note: OpenTracing support will be deprecated in an upcoming release.
|
# Note: OpenTracing support will be removed in an upcoming release.
|
||||||
# Please prefer using OpenTelemetry instead.
|
# Please prefer using OpenTelemetry instead.
|
||||||
openTracing:
|
openTracing:
|
||||||
## set this flag to true if you wish to enable OpenTracing
|
## set this flag to true if you wish to enable OpenTracing
|
||||||
@@ -254,6 +254,29 @@ openTelemetry:
|
|||||||
# to the collector.
|
# to the collector.
|
||||||
# Eg. otlpHeaders: "key1=value1,key2=value2"
|
# Eg. otlpHeaders: "key1=value1,key2=value2"
|
||||||
otlpHeaders: ""
|
otlpHeaders: ""
|
||||||
|
# Supported samplers:
|
||||||
|
# always_on - Sampler that always samples spans, regardless of the parent span's sampling decision.
|
||||||
|
# always_off - Sampler that never samples spans, regardless of the parent span's sampling decision.
|
||||||
|
# traceidratio - Sampler that samples probabalistically based on rate.
|
||||||
|
# parentbased_always_on - (default if empty) Sampler that respects its parent span's sampling decision, but otherwise always samples.
|
||||||
|
# parentbased_always_off - Sampler that respects its parent span's sampling decision, but otherwise never samples.
|
||||||
|
# parentbased_traceidratio - Sampler that respects its parent span's sampling decision, but otherwise samples probabalistically based on rate.
|
||||||
|
tracesSampler: "parentbased_traceidratio"
|
||||||
|
# Each Sampler type defines its own expected input, if any.
|
||||||
|
# Currently we get trace ratio for the case of,
|
||||||
|
# 1. traceidratio
|
||||||
|
# 2. parentbased_traceidratio
|
||||||
|
# Sampling probability, a number in the [0..1] range, e.g. "0.1". Default is 0.1.
|
||||||
|
tracesSamplingRate: "0.1"
|
||||||
|
# Supported providers:
|
||||||
|
# tracecontext - W3C Trace Context
|
||||||
|
# baggage - W3C Baggage
|
||||||
|
# b3 - B3 Single
|
||||||
|
# b3multi - B3 Multi
|
||||||
|
# jaeger - Jaeger uber-trace-id header
|
||||||
|
# xray - AWS X-Ray (third party)
|
||||||
|
# ottrace - OpenTracing Trace (third party)
|
||||||
|
propagators: "tracecontext,baggage"
|
||||||
|
|
||||||
## Message Queue Trigger Kind, KEDA: enable and configuration
|
## Message Queue Trigger Kind, KEDA: enable and configuration
|
||||||
mqt_keda:
|
mqt_keda:
|
||||||
|
|||||||
@@ -54,15 +54,19 @@ require (
|
|||||||
github.com/ulikunitz/xz v0.5.9 // indirect
|
github.com/ulikunitz/xz v0.5.9 // indirect
|
||||||
github.com/wcharczuk/go-chart v2.0.1+incompatible
|
github.com/wcharczuk/go-chart v2.0.1+incompatible
|
||||||
go.opencensus.io v0.23.0
|
go.opencensus.io v0.23.0
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.22.0
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.23.0
|
||||||
go.opentelemetry.io/otel v1.0.0-RC2
|
go.opentelemetry.io/contrib/propagators/aws v0.23.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0-RC2
|
go.opentelemetry.io/contrib/propagators/b3 v0.23.0
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0-RC2
|
go.opentelemetry.io/contrib/propagators/jaeger v0.23.0
|
||||||
go.opentelemetry.io/otel/sdk v1.0.0-RC2
|
go.opentelemetry.io/contrib/propagators/ot v0.23.0
|
||||||
go.opentelemetry.io/otel/trace v1.0.0-RC2
|
go.opentelemetry.io/otel v1.0.0
|
||||||
go.uber.org/zap v1.18.1
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0
|
||||||
|
go.opentelemetry.io/otel/sdk v1.0.0
|
||||||
|
go.opentelemetry.io/otel/trace v1.0.0
|
||||||
|
go.uber.org/zap v1.19.1
|
||||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e
|
golang.org/x/net v0.0.0-20210614182718-04defd469f4e
|
||||||
google.golang.org/grpc v1.39.0
|
google.golang.org/grpc v1.40.0
|
||||||
gotest.tools v2.2.0+incompatible // indirect
|
gotest.tools v2.2.0+incompatible // indirect
|
||||||
k8s.io/api v0.21.4
|
k8s.io/api v0.21.4
|
||||||
k8s.io/apiextensions-apiserver v0.21.4
|
k8s.io/apiextensions-apiserver v0.21.4
|
||||||
@@ -70,5 +74,5 @@ require (
|
|||||||
k8s.io/client-go v0.21.4
|
k8s.io/client-go v0.21.4
|
||||||
k8s.io/klog v1.0.0
|
k8s.io/klog v1.0.0
|
||||||
k8s.io/metrics v0.21.4
|
k8s.io/metrics v0.21.4
|
||||||
sigs.k8s.io/controller-runtime v0.9.6
|
sigs.k8s.io/controller-runtime v0.9.7
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -645,8 +645,8 @@ github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGV
|
|||||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.14.0 h1:ep6kpPVwmr/nTbklSx2nrLNSIO62DoYAhnPNIMhK8gI=
|
github.com/onsi/gomega v1.15.0 h1:WjP/FQ/sk43MRmnEcT+MlDw2TFvkrXlprrPST/IudjU=
|
||||||
github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
|
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
|
||||||
@@ -816,29 +816,35 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
|||||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||||
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
|
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
|
||||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||||
go.opentelemetry.io/contrib v0.22.0 h1:0F7gDEjgb1WGn4ODIjaCAg75hmqF+UN0LiVgwxsCodc=
|
go.opentelemetry.io/contrib v0.23.0 h1:MgRuo0JZZX8J9WLRjyd7OpTSbaLOdQXXJa6SnZvlWLM=
|
||||||
go.opentelemetry.io/contrib v0.22.0/go.mod h1:EH4yDYeNoaTqn/8yCWQmfNB78VHfGX2Jt2bvnvzBlGM=
|
go.opentelemetry.io/contrib v0.23.0/go.mod h1:EH4yDYeNoaTqn/8yCWQmfNB78VHfGX2Jt2bvnvzBlGM=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.22.0 h1:WHjZguqT+3UjTgFum33hWZYybDVnx8u9q5/kQDfaGTs=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.23.0 h1:hNSH6f4WUMDnRAvUCLItD0WKzQqAPoECvORj+ZChbnA=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.22.0/go.mod h1:o3MuU25bYroYnc2TOKe8mTk8f9X1oPFO6C5RCoPKtSU=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.23.0/go.mod h1:wLrbAf2Qb+kFsEjowrxOcuy2SE0dcY0VwFiiYCmUeFQ=
|
||||||
go.opentelemetry.io/otel v1.0.0-RC1/go.mod h1:x9tRa9HK4hSSq7jf2TKbqFbtt58/TGk0f9XiEYISI1I=
|
go.opentelemetry.io/contrib/propagators/aws v0.23.0 h1:BTveX+0ASfhMsCb1ro1lQGuL/56hmxjptZ1rzVxu6OM=
|
||||||
go.opentelemetry.io/otel v1.0.0-RC2 h1:SHhxSjB+omnGZPgGlKe+QMp3MyazcOHdQ8qwo89oKbg=
|
go.opentelemetry.io/contrib/propagators/aws v0.23.0/go.mod h1:FNKmH5WbGb5qmUSUrzQjaXoc+gdXiVK8ZlGM7Qpx3Ys=
|
||||||
go.opentelemetry.io/otel v1.0.0-RC2/go.mod h1:w1thVQ7qbAy8MHb0IFj8a5Q2QU0l2ksf8u/CN8m3NOM=
|
go.opentelemetry.io/contrib/propagators/b3 v0.23.0 h1:sxitmDBHZS3Z2lw81kDntCRFt4dQglu9EOhBPNHN9CY=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0-RC2 h1:Z/91DSYkOqnVuECrd+hxCU9lzeo5Fihjp28uq0Izfpw=
|
go.opentelemetry.io/contrib/propagators/b3 v0.23.0/go.mod h1:tAJUf0uW1xrgQ1QgOZqLXFbn3DNFO4tTmh0Nqe3kSzw=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0-RC2/go.mod h1:T+s8GKi1OqMwPuZ+ouDtZW4vWYpJuzIzh2Matq4Jo9k=
|
go.opentelemetry.io/contrib/propagators/jaeger v0.23.0 h1:sVMsCeDMgJiz8NW0NilH2NhydiU+r+pYUMHkWf0zi/k=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0-RC2 h1:PaSlrCE+hRbamroLGGgFDmzDamCxp7ID+hBvPmOhcSc=
|
go.opentelemetry.io/contrib/propagators/jaeger v0.23.0/go.mod h1:wssWZnQoNdAtCwObUENjAnsJg873IS67mdVdmj0tYbs=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0-RC2/go.mod h1:3shayJIFcDqHi9/GT2fAHyMI/bRgc6FO0CAkhaDkhi0=
|
go.opentelemetry.io/contrib/propagators/ot v0.23.0 h1:QD69MmaJwLOaLj8uNmxpJa52v/jSsX4ZU/BV8acpb68=
|
||||||
go.opentelemetry.io/otel/internal/metric v0.22.0 h1:Q9bS02XRykSRIbggaU4hVF9oWOP9PyILu26zJWoKmk0=
|
go.opentelemetry.io/contrib/propagators/ot v0.23.0/go.mod h1:uhAU1z0UtdOTHWPfmpAOlikY/vK79cGwrteYDkcxvGU=
|
||||||
go.opentelemetry.io/otel/internal/metric v0.22.0/go.mod h1:7qVuMihW/ktMonEfOvBXuh6tfMvvEyoIDgeJNRloYbQ=
|
go.opentelemetry.io/otel v1.0.0-RC3/go.mod h1:Ka5j3ua8tZs4Rkq4Ex3hwgBgOchyPVq5S6P2lz//nKQ=
|
||||||
go.opentelemetry.io/otel/metric v0.22.0 h1:/qv10BzznqEifrXBwsTT370OCN1PRgt+mnjzMwxJKrQ=
|
go.opentelemetry.io/otel v1.0.0 h1:qTTn6x71GVBvoafHK/yaRUmFzI4LcONZD0/kXxl5PHI=
|
||||||
go.opentelemetry.io/otel/metric v0.22.0/go.mod h1:KcsUkBiYGW003DJ+ugd2aqIRIfjabD9jeOUXqsAtrq0=
|
go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg=
|
||||||
go.opentelemetry.io/otel/oteltest v1.0.0-RC1/go.mod h1:+eoIG0gdEOaPNftuy1YScLr1Gb4mL/9lpDkZ0JjMRq4=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0 h1:Vv4wbLEjheCTPV07jEav7fyUpJkyftQK7Ss2G7qgdSo=
|
||||||
go.opentelemetry.io/otel/oteltest v1.0.0-RC2 h1:xNKqMhlZYkASSyvF4JwObZFMq0jhFN3c3SP+2rCzVPk=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.0/go.mod h1:3VqVbIbjAycfL1C7sIu/Uh/kACIUPWHztt8ODYwR3oM=
|
||||||
go.opentelemetry.io/otel/oteltest v1.0.0-RC2/go.mod h1:kiQ4tw5tAL4JLTbcOYwK1CWI1HkT5aiLzHovgOVnz/A=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0 h1:B9VtEB1u41Ohnl8U6rMCh1jjedu8HwFh4D0QeB+1N+0=
|
||||||
go.opentelemetry.io/otel/sdk v1.0.0-RC2 h1:ROuteeSCBaZNjiT9JcFzZepmInDvLktR28Y6qKo8bCs=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.0/go.mod h1:zhEt6O5GGJ3NCAICr4hlCPoDb2GQuh4Obb4gZBgkoQQ=
|
||||||
go.opentelemetry.io/otel/sdk v1.0.0-RC2/go.mod h1:fgwHyiDn4e5k40TD9VX243rOxXR+jzsWBZYA2P5jpEw=
|
go.opentelemetry.io/otel/internal/metric v0.23.0 h1:mPfzm9Iqhw7G2nDBmUAjFTfPqLZPbOW2k7QI57ITbaI=
|
||||||
go.opentelemetry.io/otel/trace v1.0.0-RC1/go.mod h1:86UHmyHWFEtWjfWPSbu0+d0Pf9Q6e1U+3ViBOc+NXAg=
|
go.opentelemetry.io/otel/internal/metric v0.23.0/go.mod h1:z+RPiDJe30YnCrOhFGivwBS+DU1JU/PiLKkk4re2DNY=
|
||||||
go.opentelemetry.io/otel/trace v1.0.0-RC2 h1:dunAP0qDULMIT82atj34m5RgvsIK6LcsXf1c/MsYg1w=
|
go.opentelemetry.io/otel/metric v0.23.0 h1:mYCcDxi60P4T27/0jchIDFa1WHEfQeU3zH9UEMpnj2c=
|
||||||
go.opentelemetry.io/otel/trace v1.0.0-RC2/go.mod h1:JPQ+z6nNw9mqEGT8o3eoPTdnNI+Aj5JcxEsVGREIAy4=
|
go.opentelemetry.io/otel/metric v0.23.0/go.mod h1:G/Nn9InyNnIv7J6YVkQfpc0JCfKBNJaERBGw08nqmVQ=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.0.0-RC3/go.mod h1:78H6hyg2fka0NYT9fqGuFLvly2yCxiBXDJAgLKo/2Us=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.0.0 h1:BNPMYUONPNbLneMttKSjQhOTlFLOD9U22HNG1KrIN2Y=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM=
|
||||||
|
go.opentelemetry.io/otel/trace v1.0.0-RC3/go.mod h1:VUt2TUYd8S2/ZRX09ZDFZQwn2RqfMB5MzO17jBojGxo=
|
||||||
|
go.opentelemetry.io/otel/trace v1.0.0 h1:TSBr8GTEtKevYMG/2d21M989r5WJYVimhTHBKVEZuh4=
|
||||||
|
go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
|
||||||
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
|
||||||
go.opentelemetry.io/proto/otlp v0.9.0 h1:C0g6TWmQYvjKRnljRULLWUVJGy8Uvu0NEL/5frY2/t4=
|
go.opentelemetry.io/proto/otlp v0.9.0 h1:C0g6TWmQYvjKRnljRULLWUVJGy8Uvu0NEL/5frY2/t4=
|
||||||
go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg=
|
go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg=
|
||||||
@@ -847,8 +853,9 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
|||||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
|
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
|
||||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||||
go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
|
|
||||||
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
|
||||||
|
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4=
|
||||||
|
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
||||||
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
|
||||||
@@ -857,8 +864,9 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E
|
|||||||
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
||||||
go.uber.org/zap v1.18.1 h1:CSUJ2mjFszzEWt4CdKISEuChVIXGBn3lAPwkRGyVrc4=
|
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||||
go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
|
||||||
|
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
@@ -906,7 +914,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
|
|||||||
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
|
|
||||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||||
@@ -1070,8 +1077,8 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
|
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
|
||||||
@@ -1155,8 +1162,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA=
|
|
||||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@@ -1261,8 +1268,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
|
|||||||
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||||
google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||||
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
|
||||||
google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI=
|
google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q=
|
||||||
google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
|
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
@@ -1327,23 +1334,16 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
|
|||||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
k8s.io/api v0.21.3/go.mod h1:hUgeYHUbBp23Ue4qdX9tR8/ANi/g3ehylAqDn9NWVOg=
|
|
||||||
k8s.io/api v0.21.4 h1:WtDkzTAuI31WZKDPeIYpEUA+WeUfXAmA7gwj6nzFfbc=
|
k8s.io/api v0.21.4 h1:WtDkzTAuI31WZKDPeIYpEUA+WeUfXAmA7gwj6nzFfbc=
|
||||||
k8s.io/api v0.21.4/go.mod h1:fTVGP+M4D8+00FN2cMnJqk/eb/GH53bvmNs2SVTmpFk=
|
k8s.io/api v0.21.4/go.mod h1:fTVGP+M4D8+00FN2cMnJqk/eb/GH53bvmNs2SVTmpFk=
|
||||||
k8s.io/apiextensions-apiserver v0.21.3/go.mod h1:kl6dap3Gd45+21Jnh6utCx8Z2xxLm8LGDkprcd+KbsE=
|
|
||||||
k8s.io/apiextensions-apiserver v0.21.4 h1:HkajN/vmT/9HnFmUxvpXfSGkTCvH/ax4e3+j6mqWUDU=
|
k8s.io/apiextensions-apiserver v0.21.4 h1:HkajN/vmT/9HnFmUxvpXfSGkTCvH/ax4e3+j6mqWUDU=
|
||||||
k8s.io/apiextensions-apiserver v0.21.4/go.mod h1:OoC8LhI9LnV+wKjZkXIBbLUwtnOGJiTRE33qctH5CIk=
|
k8s.io/apiextensions-apiserver v0.21.4/go.mod h1:OoC8LhI9LnV+wKjZkXIBbLUwtnOGJiTRE33qctH5CIk=
|
||||||
k8s.io/apimachinery v0.21.3/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI=
|
|
||||||
k8s.io/apimachinery v0.21.4 h1:KDq0lWZVslHkuE5I7iGAQHwpK0aDTlar1E7IWEc4CNw=
|
k8s.io/apimachinery v0.21.4 h1:KDq0lWZVslHkuE5I7iGAQHwpK0aDTlar1E7IWEc4CNw=
|
||||||
k8s.io/apimachinery v0.21.4/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI=
|
k8s.io/apimachinery v0.21.4/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI=
|
||||||
k8s.io/apiserver v0.21.3/go.mod h1:eDPWlZG6/cCCMj/JBcEpDoK+I+6i3r9GsChYBHSbAzU=
|
|
||||||
k8s.io/apiserver v0.21.4/go.mod h1:SErUuFBBPZUcD2nsUU8hItxoYheqyYr2o/pCINEPW8g=
|
k8s.io/apiserver v0.21.4/go.mod h1:SErUuFBBPZUcD2nsUU8hItxoYheqyYr2o/pCINEPW8g=
|
||||||
k8s.io/client-go v0.21.3/go.mod h1:+VPhCgTsaFmGILxR/7E1N0S+ryO010QBeNCv5JwRGYU=
|
|
||||||
k8s.io/client-go v0.21.4 h1:tcwj167If+v+pIGrCjaPG7hFo6SqFPFCCgMJy+Vm8Jc=
|
k8s.io/client-go v0.21.4 h1:tcwj167If+v+pIGrCjaPG7hFo6SqFPFCCgMJy+Vm8Jc=
|
||||||
k8s.io/client-go v0.21.4/go.mod h1:t0/eMKyUAq/DoQ7vW8NVVA00/nomlwC+eInsS8PxSew=
|
k8s.io/client-go v0.21.4/go.mod h1:t0/eMKyUAq/DoQ7vW8NVVA00/nomlwC+eInsS8PxSew=
|
||||||
k8s.io/code-generator v0.21.3/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo=
|
|
||||||
k8s.io/code-generator v0.21.4/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo=
|
k8s.io/code-generator v0.21.4/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo=
|
||||||
k8s.io/component-base v0.21.3/go.mod h1:kkuhtfEHeZM6LkX0saqSK8PbdO7A0HigUngmhhrwfGQ=
|
|
||||||
k8s.io/component-base v0.21.4/go.mod h1:ZKG0eHVX+tUDcaoIGpU3Vtk4TIjMddN9uhEWDmW6Nyg=
|
k8s.io/component-base v0.21.4/go.mod h1:ZKG0eHVX+tUDcaoIGpU3Vtk4TIjMddN9uhEWDmW6Nyg=
|
||||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||||
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||||
@@ -1358,15 +1358,14 @@ k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iL
|
|||||||
k8s.io/metrics v0.21.4 h1:4QzwCM7O87PHHnPF+NF7A9I4M+UPstUwkQ66EArhrjU=
|
k8s.io/metrics v0.21.4 h1:4QzwCM7O87PHHnPF+NF7A9I4M+UPstUwkQ66EArhrjU=
|
||||||
k8s.io/metrics v0.21.4/go.mod h1:uhWoVuVumUMSeCa1B1p2tm4Y4XuZIg0n24QEtB54wuA=
|
k8s.io/metrics v0.21.4/go.mod h1:uhWoVuVumUMSeCa1B1p2tm4Y4XuZIg0n24QEtB54wuA=
|
||||||
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||||
k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471 h1:DnzUXII7sVg1FJ/4JX6YDRJfLNAC7idRatPwe07suiI=
|
k8s.io/utils v0.0.0-20210802155522-efc7438f0176 h1:Mx0aa+SUAcNRQbs5jUzV8lkDlGFU8laZsY9jrcVX5SY=
|
||||||
k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
|
||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
|
||||||
sigs.k8s.io/controller-runtime v0.9.6 h1:EevVMlgUj4fC1NVM4+DB3iPkWkmGRNarA66neqv9Qew=
|
sigs.k8s.io/controller-runtime v0.9.7 h1:DlHMlAyLpgEITVvNsuZqMbf8/sJl9HirmCZIeR5H9mQ=
|
||||||
sigs.k8s.io/controller-runtime v0.9.6/go.mod h1:q6PpkM5vqQubEKUKOM6qr06oXGzOBcCby1DA9FbyZeA=
|
sigs.k8s.io/controller-runtime v0.9.7/go.mod h1:nExcHcQ2zvLMeoO9K7rOesGCmgu32srN5SENvpAEbGA=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
|
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
|
||||||
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
|
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
"github.com/fission/fission/pkg/controller/client"
|
"github.com/fission/fission/pkg/controller/client"
|
||||||
@@ -35,6 +37,7 @@ import (
|
|||||||
"github.com/fission/fission/pkg/fission-cli/console"
|
"github.com/fission/fission/pkg/fission-cli/console"
|
||||||
flagkey "github.com/fission/fission/pkg/fission-cli/flag/key"
|
flagkey "github.com/fission/fission/pkg/fission-cli/flag/key"
|
||||||
"github.com/fission/fission/pkg/fission-cli/util"
|
"github.com/fission/fission/pkg/fission-cli/util"
|
||||||
|
otelUtils "github.com/fission/fission/pkg/utils/otel"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestSubCommand struct {
|
type TestSubCommand struct {
|
||||||
@@ -153,7 +156,19 @@ func (opts *TestSubCommand) do(input cli.Input) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func doHTTPRequest(ctx context.Context, url string, headers []string, method, body string) (*http.Response, error) {
|
func doHTTPRequest(ctx context.Context, url string, headers []string, method, body string) (*http.Response, error) {
|
||||||
method, err := httptrigger.GetMethod(method)
|
shutdown, err := otelUtils.InitProvider(ctx, nil, "fission-cli")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if shutdown != nil {
|
||||||
|
defer shutdown(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
tracer := otel.Tracer("fission-cli")
|
||||||
|
ctx, span := tracer.Start(ctx, "httpRequest")
|
||||||
|
defer span.End()
|
||||||
|
|
||||||
|
method, err = httptrigger.GetMethod(method)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -170,7 +185,8 @@ func doHTTPRequest(ctx context.Context, url string, headers []string, method, bo
|
|||||||
}
|
}
|
||||||
req.Header.Set(headerKeyValue[0], headerKeyValue[1])
|
req.Header.Set(headerKeyValue[0], headerKeyValue[1])
|
||||||
}
|
}
|
||||||
resp, err := http.DefaultClient.Do(req.WithContext(ctx))
|
hc := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)}
|
||||||
|
resp, err := hc.Do(req.WithContext(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "error executing HTTP request")
|
return nil, errors.Wrap(err, "error executing HTTP request")
|
||||||
}
|
}
|
||||||
|
|||||||
+130
-11
@@ -2,10 +2,15 @@ package otel
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/contrib/propagators/aws/xray"
|
||||||
|
"go.opentelemetry.io/contrib/propagators/b3"
|
||||||
|
"go.opentelemetry.io/contrib/propagators/jaeger"
|
||||||
|
"go.opentelemetry.io/contrib/propagators/ot"
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
||||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
||||||
@@ -20,9 +25,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
OtelEnvPrefix = "OTEL_"
|
OtelEnvPrefix = "OTEL_"
|
||||||
OtelEndpointEnvVar = "OTEL_EXPORTER_OTLP_ENDPOINT"
|
OtelEndpointEnvVar = "OTEL_EXPORTER_OTLP_ENDPOINT"
|
||||||
OtelInsecureEnvVar = "OTEL_EXPORTER_OTLP_INSECURE"
|
OtelInsecureEnvVar = "OTEL_EXPORTER_OTLP_INSECURE"
|
||||||
|
OtelTracesSampler = "OTEL_TRACES_SAMPLER"
|
||||||
|
OtelTracesSamplerArg = "OTEL_TRACES_SAMPLER_ARG"
|
||||||
|
OtelPropogaters = "OTEL_PROPOGATORS"
|
||||||
)
|
)
|
||||||
|
|
||||||
type OtelConfig struct {
|
type OtelConfig struct {
|
||||||
@@ -30,12 +38,118 @@ type OtelConfig struct {
|
|||||||
insecure bool
|
insecure bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Each Sampler type defines its own expected input, if any.
|
||||||
|
Currently we get trace ratio for the case of,
|
||||||
|
1. traceidratio
|
||||||
|
2. parentbased_traceidratio
|
||||||
|
*/
|
||||||
|
func getSamplerArg() (float64, error) {
|
||||||
|
arg := os.Getenv(OtelTracesSamplerArg)
|
||||||
|
return strconv.ParseFloat(arg, 64)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* GetPropogater returns a slice of propagators to be used by the OpenTelemetry
|
||||||
|
provider.
|
||||||
|
|
||||||
|
Supported providers:
|
||||||
|
tracecontext - W3C Trace Context
|
||||||
|
baggage - W3C Baggage
|
||||||
|
b3 - B3 Single
|
||||||
|
b3multi - B3 Multi
|
||||||
|
jaeger - Jaeger uber-trace-id header
|
||||||
|
xray - AWS X-Ray (third party)
|
||||||
|
ottrace - OpenTracing Trace (third party)
|
||||||
|
*/
|
||||||
|
func GetPropogater(logger *zap.Logger) []propagation.TextMapPropagator {
|
||||||
|
propogatersEnv := os.Getenv(OtelPropogaters)
|
||||||
|
if propogatersEnv == "" {
|
||||||
|
return []propagation.TextMapPropagator{
|
||||||
|
propagation.TraceContext{}, propagation.Baggage{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
propogators := []propagation.TextMapPropagator{}
|
||||||
|
for _, prop := range strings.Split(propogatersEnv, ",") {
|
||||||
|
switch prop {
|
||||||
|
case "tracecontext":
|
||||||
|
propogators = append(propogators, propagation.TraceContext{})
|
||||||
|
case "baggage":
|
||||||
|
propogators = append(propogators, propagation.Baggage{})
|
||||||
|
case "b3multi":
|
||||||
|
propogators = append(propogators, b3.New(b3.WithInjectEncoding(b3.B3MultipleHeader)))
|
||||||
|
case "b3":
|
||||||
|
propogators = append(propogators, b3.New(b3.WithInjectEncoding(b3.B3SingleHeader)))
|
||||||
|
case "jaeger":
|
||||||
|
propogators = append(propogators, jaeger.Jaeger{})
|
||||||
|
case "xray":
|
||||||
|
propogators = append(propogators, xray.Propagator{})
|
||||||
|
case "ottrace":
|
||||||
|
propogators = append(propogators, ot.OT{})
|
||||||
|
default:
|
||||||
|
logger.Error("Unsupported propagation type", zap.String("propagation", prop))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(propogators) == 0 {
|
||||||
|
return []propagation.TextMapPropagator{
|
||||||
|
propagation.TraceContext{}, propagation.Baggage{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return propogators
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
GetSampler returns a sampler that can be used to sample traces.
|
||||||
|
This is based on https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/sdk-environment-variables.md#general-sdk-configuration
|
||||||
|
We have to implement as open-telemetry Go sdk doesn't support configuration of different samplers.
|
||||||
|
Once its added we may remove this code.
|
||||||
|
|
||||||
|
Supported samplers:
|
||||||
|
always_on - Sampler that always samples spans, regardless of the parent span's sampling decision.
|
||||||
|
always_off - Sampler that never samples spans, regardless of the parent span's sampling decision.
|
||||||
|
traceidratio - Sampler that samples probabalistically based on rate.
|
||||||
|
parentbased_always_on - (default) Sampler that respects its parent span's sampling decision, but otherwise always samples.
|
||||||
|
parentbased_always_off - Sampler that respects its parent span's sampling decision, but otherwise never samples.
|
||||||
|
parentbased_traceidratio - Sampler that respects its parent span's sampling decision, but otherwise samples probabalistically based on rate.
|
||||||
|
|
||||||
|
Environment variables:
|
||||||
|
OTEL_TRACES_SAMPLER - Sampler to use(one of the above samplers)
|
||||||
|
OTEL_TRACES_SAMPLER_ARG - Argument to pass to the sampler(float value)
|
||||||
|
*/
|
||||||
|
func GetSampler() (sdktrace.Sampler, error) {
|
||||||
|
samplerType := os.Getenv(OtelTracesSampler)
|
||||||
|
switch samplerType {
|
||||||
|
case "always_on":
|
||||||
|
return sdktrace.AlwaysSample(), nil
|
||||||
|
case "always_off":
|
||||||
|
return sdktrace.NeverSample(), nil
|
||||||
|
case "parentbased_always_on":
|
||||||
|
return sdktrace.ParentBased(sdktrace.AlwaysSample()), nil
|
||||||
|
case "parentbased_always_off":
|
||||||
|
return sdktrace.ParentBased(sdktrace.NeverSample()), nil
|
||||||
|
case "traceidratio":
|
||||||
|
arg, err := getSamplerArg()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid sampler arg: %w", err)
|
||||||
|
}
|
||||||
|
return sdktrace.TraceIDRatioBased(arg), nil
|
||||||
|
case "parentbased_traceidratio":
|
||||||
|
arg, err := getSamplerArg()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("invalid sampler arg: %w", err)
|
||||||
|
}
|
||||||
|
return sdktrace.ParentBased(sdktrace.TraceIDRatioBased(arg)), nil
|
||||||
|
default:
|
||||||
|
return sdktrace.ParentBased(sdktrace.AlwaysSample()), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseOtelConfig parses the environment variables OTEL_EXPORTER_OTLP_ENDPOINT and
|
||||||
func parseOtelConfig() OtelConfig {
|
func parseOtelConfig() OtelConfig {
|
||||||
config := OtelConfig{}
|
config := OtelConfig{}
|
||||||
config.endpoint = os.Getenv(OtelEndpointEnvVar)
|
config.endpoint = os.Getenv(OtelEndpointEnvVar)
|
||||||
insecure, err := strconv.ParseBool(os.Getenv(OtelInsecureEnvVar))
|
insecure, err := strconv.ParseBool(os.Getenv(OtelInsecureEnvVar))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
insecure = false
|
insecure = true
|
||||||
}
|
}
|
||||||
config.insecure = insecure
|
config.insecure = insecure
|
||||||
return config
|
return config
|
||||||
@@ -44,7 +158,9 @@ func parseOtelConfig() OtelConfig {
|
|||||||
func getTraceExporter(ctx context.Context, logger *zap.Logger) (*otlptrace.Exporter, error) {
|
func getTraceExporter(ctx context.Context, logger *zap.Logger) (*otlptrace.Exporter, error) {
|
||||||
otelConfig := parseOtelConfig()
|
otelConfig := parseOtelConfig()
|
||||||
if otelConfig.endpoint == "" {
|
if otelConfig.endpoint == "" {
|
||||||
logger.Info("OTEL_EXPORTER_OTLP_ENDPOINT not set, skipping Opentelemtry tracing")
|
if logger != nil {
|
||||||
|
logger.Info("OTEL_EXPORTER_OTLP_ENDPOINT not set, skipping Opentelemtry tracing")
|
||||||
|
}
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,10 +191,14 @@ func InitProvider(ctx context.Context, logger *zap.Logger, serviceName string) (
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
sampler, err := GetSampler()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
tracerProvider := sdktrace.NewTracerProvider(
|
tracerProvider := sdktrace.NewTracerProvider(
|
||||||
sdktrace.WithResource(res),
|
sdktrace.WithResource(res),
|
||||||
|
sdktrace.WithSampler(sampler),
|
||||||
)
|
)
|
||||||
|
|
||||||
traceExporter, err := getTraceExporter(ctx, logger)
|
traceExporter, err := getTraceExporter(ctx, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -90,17 +210,16 @@ func InitProvider(ctx context.Context, logger *zap.Logger, serviceName string) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
otel.SetTracerProvider(tracerProvider)
|
otel.SetTracerProvider(tracerProvider)
|
||||||
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(
|
propogaters := GetPropogater(logger)
|
||||||
propagation.TraceContext{}, propagation.Baggage{}))
|
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propogaters...))
|
||||||
|
|
||||||
// Shutdown will flush any remaining spans and shut down the exporter.
|
// Shutdown will flush any remaining spans and shut down the exporter.
|
||||||
return func(ctx context.Context) {
|
return func(ctx context.Context) {
|
||||||
err := tracerProvider.Shutdown(ctx)
|
err := tracerProvider.Shutdown(ctx)
|
||||||
if err != nil {
|
if err != nil && logger != nil {
|
||||||
logger.Fatal("error shutting down trace provider", zap.Error(err))
|
logger.Fatal("error shutting down trace provider", zap.Error(err))
|
||||||
}
|
}
|
||||||
if traceExporter != nil {
|
if traceExporter != nil {
|
||||||
if err = traceExporter.Shutdown(ctx); err != nil {
|
if err = traceExporter.Shutdown(ctx); err != nil && logger != nil {
|
||||||
logger.Fatal("error shutting down trace exporter", zap.Error(err))
|
logger.Fatal("error shutting down trace exporter", zap.Error(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,181 @@
|
|||||||
|
package otel
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/contrib/propagators/jaeger"
|
||||||
|
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
|
||||||
|
"go.opentelemetry.io/otel/propagation"
|
||||||
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
|
|
||||||
|
"github.com/fission/fission/pkg/utils/loggerfactory"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetPropogater(t *testing.T) {
|
||||||
|
if OtelPropogaters != "OTEL_PROPOGATORS" {
|
||||||
|
t.Errorf("Expected OTEL_PROPOGATORS to be set, got %s", OtelPropogaters)
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
propogaterEnv string
|
||||||
|
propogaters []propagation.TextMapPropagator
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
[]propagation.TextMapPropagator{propagation.TraceContext{}, propagation.Baggage{}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tracecontext,baggage",
|
||||||
|
[]propagation.TextMapPropagator{propagation.TraceContext{}, propagation.Baggage{}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jaeger",
|
||||||
|
[]propagation.TextMapPropagator{jaeger.Jaeger{}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"baggage,tracecontext",
|
||||||
|
[]propagation.TextMapPropagator{propagation.Baggage{}, propagation.TraceContext{}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"jaeger,baggage",
|
||||||
|
[]propagation.TextMapPropagator{jaeger.Jaeger{}, propagation.Baggage{}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
logger := loggerfactory.GetLogger()
|
||||||
|
for _, tt := range tests {
|
||||||
|
os.Setenv(OtelPropogaters, tt.propogaterEnv)
|
||||||
|
prop := GetPropogater(logger)
|
||||||
|
if prop == nil {
|
||||||
|
t.Errorf("GetPropogater() = %#v, want %#v", prop, tt.propogaters)
|
||||||
|
}
|
||||||
|
if len(prop) != len(tt.propogaters) {
|
||||||
|
t.Errorf("GetPropogater() = %#v, want %#v", prop, tt.propogaters)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(prop, tt.propogaters) {
|
||||||
|
t.Errorf("GetPropogater() = %#v, want %#v", prop, tt.propogaters)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetSampler(t *testing.T) {
|
||||||
|
if OtelTracesSampler != "OTEL_TRACES_SAMPLER" {
|
||||||
|
t.Errorf("Expected OTEL_TRACES_SAMPLER to be set, got %s", OtelTracesSampler)
|
||||||
|
}
|
||||||
|
if OtelTracesSamplerArg != "OTEL_TRACES_SAMPLER_ARG" {
|
||||||
|
t.Errorf("Expected OTEL_TRACES_SAMPLER_ARG to be set, got %s", OtelTracesSamplerArg)
|
||||||
|
}
|
||||||
|
if OtelPropogaters != "OTEL_PROPOGATORS" {
|
||||||
|
t.Errorf("Expected OTEL_PROPOGATORS to be set, got %s", OtelPropogaters)
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
sampler string
|
||||||
|
samplerArg string
|
||||||
|
wantSampler sdktrace.Sampler
|
||||||
|
wantError error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
sdktrace.ParentBased(sdktrace.AlwaysSample()),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"always_on",
|
||||||
|
"",
|
||||||
|
sdktrace.AlwaysSample(),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"always_off",
|
||||||
|
"",
|
||||||
|
sdktrace.NeverSample(),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parentbased_always_on",
|
||||||
|
"",
|
||||||
|
sdktrace.ParentBased(sdktrace.AlwaysSample()),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parentbased_always_off",
|
||||||
|
"",
|
||||||
|
sdktrace.ParentBased(sdktrace.NeverSample()),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"traceidratio",
|
||||||
|
"0.5",
|
||||||
|
sdktrace.TraceIDRatioBased(0.5),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"traceidratio",
|
||||||
|
"",
|
||||||
|
nil,
|
||||||
|
errors.New("invalid sampler arg: strconv.ParseFloat: parsing \"\": invalid syntax"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parentbased_traceidratio",
|
||||||
|
"",
|
||||||
|
nil,
|
||||||
|
errors.New("invalid sampler arg: strconv.ParseFloat: parsing \"\": invalid syntax"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"parentbased_traceidratio",
|
||||||
|
"0.01",
|
||||||
|
sdktrace.ParentBased(sdktrace.TraceIDRatioBased(0.01)),
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
os.Setenv(OtelTracesSampler, tt.sampler)
|
||||||
|
os.Setenv(OtelTracesSamplerArg, tt.samplerArg)
|
||||||
|
gotSampler, gotError := GetSampler()
|
||||||
|
if !reflect.DeepEqual(gotSampler, tt.wantSampler) {
|
||||||
|
t.Errorf("GetSampler() gotSampler = %#v, want %#v", gotSampler, tt.wantSampler)
|
||||||
|
}
|
||||||
|
if fmt.Sprintf("%s", gotError) != fmt.Sprintf("%s", tt.wantError) {
|
||||||
|
t.Errorf("GetSampler() gotError = %#v, want %#v", gotError, tt.wantError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetTraceExporter(t *testing.T) {
|
||||||
|
if OtelEndpointEnvVar != "OTEL_EXPORTER_OTLP_ENDPOINT" {
|
||||||
|
t.Errorf("Expected OTEL_EXPORTER_OTLP_ENDPOINT to be set, got %s", OtelEndpointEnvVar)
|
||||||
|
}
|
||||||
|
if OtelInsecureEnvVar != "OTEL_EXPORTER_OTLP_INSECURE" {
|
||||||
|
t.Errorf("Expected OTEL_EXPORTER_OTLP_INSECURE to be set, got %s", OtelInsecureEnvVar)
|
||||||
|
}
|
||||||
|
logger := loggerfactory.GetLogger()
|
||||||
|
ctx := context.Background()
|
||||||
|
tests := []struct {
|
||||||
|
oltpEndpoint string
|
||||||
|
oltpInsecure string
|
||||||
|
wantExporter *otlptrace.Exporter
|
||||||
|
wantError error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
os.Setenv(OtelEndpointEnvVar, tt.oltpEndpoint)
|
||||||
|
os.Setenv(OtelInsecureEnvVar, tt.oltpInsecure)
|
||||||
|
exporter, err := getTraceExporter(ctx, logger)
|
||||||
|
if !reflect.DeepEqual(exporter, tt.wantExporter) {
|
||||||
|
t.Errorf("getTraceExporter() exporter = %#v, want %#v", exporter, tt.wantExporter)
|
||||||
|
}
|
||||||
|
if fmt.Sprintf("%s", err) != fmt.Sprintf("%s", tt.wantError) {
|
||||||
|
t.Errorf("getTraceExporter() err = %#v, want %#v", err, tt.wantError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user