Skip to content

Commit 576970b

Browse files
k8s otel handling
1 parent c47245a commit 576970b

File tree

32 files changed

+3001
-20
lines changed

32 files changed

+3001
-20
lines changed

client/k8s/application/Application.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"github.com/devtron-labs/devtron/pkg/cluster/repository"
7+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
78
"go.uber.org/zap"
89
"io"
910
apiv1 "k8s.io/api/core/v1"
@@ -205,7 +206,9 @@ func (impl K8sClientServiceImpl) ListEvents(restConfig *rest.Config, request *K8
205206
func (impl K8sClientServiceImpl) GetPodLogs(restConfig *rest.Config, request *K8sRequestBean) (io.ReadCloser, error) {
206207
resourceIdentifier := request.ResourceIdentifier
207208
podLogsRequest := request.PodLogsRequest
208-
podClient, err := v1.NewForConfig(restConfig)
209+
httpClientFor, err := rest.HTTPClientFor(restConfig)
210+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
211+
podClient, err := v1.NewForConfigAndClient(restConfig, httpClientFor)
209212
if err != nil {
210213
impl.logger.Errorw("error in getting client for resource", "err", err)
211214
return nil, err
@@ -232,12 +235,14 @@ func (impl K8sClientServiceImpl) GetPodLogs(restConfig *rest.Config, request *K8
232235

233236
func (impl K8sClientServiceImpl) GetResourceIf(restConfig *rest.Config, request *K8sRequestBean) (resourceIf dynamic.NamespaceableResourceInterface, namespaced bool, err error) {
234237
resourceIdentifier := request.ResourceIdentifier
235-
dynamicIf, err := dynamic.NewForConfig(restConfig)
238+
httpClientFor, err := rest.HTTPClientFor(restConfig)
239+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
240+
dynamicIf, err := dynamic.NewForConfigAndClient(restConfig, httpClientFor)
236241
if err != nil {
237242
impl.logger.Errorw("error in getting dynamic interface for resource", "err", err)
238243
return nil, false, err
239244
}
240-
discoveryClient, err := discovery.NewDiscoveryClientForConfig(restConfig)
245+
discoveryClient, err := discovery.NewDiscoveryClientForConfigAndClient(restConfig, httpClientFor)
241246
if err != nil {
242247
impl.logger.Errorw("error in getting k8s client", "err", err)
243248
return nil, false, err

go.mod

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ require (
4949
github.com/tidwall/sjson v1.2.4
5050
github.com/xanzy/go-gitlab v0.60.0
5151
github.com/xeipuuv/gojsonschema v1.2.0
52+
go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.37.0
53+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0
54+
go.opentelemetry.io/otel v1.11.2
55+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2
56+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2
57+
go.opentelemetry.io/otel/sdk v1.11.2
5258
go.uber.org/zap v1.21.0
5359
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
5460
golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094
@@ -215,18 +221,13 @@ require (
215221
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect
216222
github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect
217223
go.opencensus.io v0.23.0 // indirect
218-
go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux v0.37.0 // indirect
219224
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.31.0 // indirect
220-
go.opentelemetry.io/otel v1.11.2 // indirect
221225
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect
222-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 // indirect
223-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 // indirect
224-
go.opentelemetry.io/otel/sdk v1.11.2 // indirect
226+
go.opentelemetry.io/otel/metric v0.34.0 // indirect
225227
go.opentelemetry.io/otel/trace v1.11.2 // indirect
226228
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
227229
go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
228230
go.uber.org/atomic v1.7.0 // indirect
229-
go.uber.org/goleak v1.2.0 // indirect
230231
go.uber.org/multierr v1.6.0 // indirect
231232
golang.org/x/exp v0.0.0-20210901193431-a062eea981d2 // indirect
232233
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect

go.sum

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ github.com/casbin/casbin v1.9.1/go.mod h1:z8uPsfBJGUsnkagrt3G8QvjgTKFMBJ32UP8HpZ
212212
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
213213
github.com/casbin/xorm-adapter v1.0.1-0.20190716004226-a317737a1007 h1:KEBrEhQjSCzUt5bQKxX8ZbS3S46sRnzOmwemTOu+LLQ=
214214
github.com/casbin/xorm-adapter v1.0.1-0.20190716004226-a317737a1007/go.mod h1:6sy40UQdWR0blO1DJdEzbcu6rcEW89odCMcEdoB1qdM=
215-
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
216215
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
217216
github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
218217
github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
@@ -470,6 +469,7 @@ github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8
470469
github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
471470
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
472471
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
472+
github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ=
473473
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
474474
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
475475
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -1245,11 +1245,12 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.2
12451245
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.31.0 h1:li8u9OSMvLau7rMs8bmiL82OazG6MAkwPz2i6eS8TBQ=
12461246
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.31.0/go.mod h1:SY9qHHUES6W3oZnO1H2W8NvsSovIoXRg/A1AH9px8+I=
12471247
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
1248+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 h1:yt2NKzK7Vyo6h0+X8BA4FpreZQTlVEIarnsBP/H5mzs=
1249+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0/go.mod h1:+ARmXlUlc51J7sZeCBkBJNdHGySrdOzgzxp6VWRWM1U=
12481250
go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
12491251
go.opentelemetry.io/otel v1.6.1/go.mod h1:blzUabWHkX6LJewxvadmzafgh/wnvBSDBdOuwkAtrWQ=
12501252
go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0=
12511253
go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI=
1252-
go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg=
12531254
go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
12541255
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY=
12551256
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw=
@@ -1258,6 +1259,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2/go.mod h1:5Qn6qvgkMsLD
12581259
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 h1:ERwKPn9Aer7Gxsc0+ZlutlH1bEEAUXAUhqm3Y45ABbk=
12591260
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2/go.mod h1:jWZUM2MWhWCJ9J9xVbRx7tzK1mXKpAlze4CeulycwVY=
12601261
go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
1262+
go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8=
1263+
go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8=
12611264
go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
12621265
go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
12631266
go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU=
@@ -1282,7 +1285,6 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
12821285
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
12831286
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
12841287
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
1285-
go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo=
12861288
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
12871289
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
12881290
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=

internal/util/K8sUtil.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"encoding/json"
2323
error2 "errors"
2424
"flag"
25+
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
2526
"os/user"
2627
"path/filepath"
2728
"time"
@@ -71,7 +72,9 @@ func (impl K8sUtil) GetClient(clusterConfig *ClusterConfig) (*v12.CoreV1Client,
7172
cfg.Host = clusterConfig.Host
7273
cfg.BearerToken = clusterConfig.BearerToken
7374
cfg.Insecure = true
74-
client, err := v12.NewForConfig(cfg)
75+
httpClientFor, err := rest.HTTPClientFor(cfg)
76+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
77+
client, err := v12.NewForConfigAndClient(cfg, httpClientFor)
7578
return client, err
7679
}
7780

@@ -80,7 +83,9 @@ func (impl K8sUtil) GetClientSet(clusterConfig *ClusterConfig) (*kubernetes.Clie
8083
cfg.Host = clusterConfig.Host
8184
cfg.BearerToken = clusterConfig.BearerToken
8285
cfg.Insecure = true
83-
client, err := kubernetes.NewForConfig(cfg)
86+
httpClientFor, err := rest.HTTPClientFor(cfg)
87+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
88+
client, err := kubernetes.NewForConfigAndClient(cfg, httpClientFor)
8489
return client, err
8590
}
8691

@@ -104,7 +109,9 @@ func (impl K8sUtil) GetClientForInCluster() (*v12.CoreV1Client, error) {
104109
// creates the in-cluster config
105110
config, err := impl.getKubeConfig(impl.runTimeConfig.LocalDevMode)
106111
// creates the clientset
107-
clientset, err := v12.NewForConfig(config)
112+
httpClientFor, err := rest.HTTPClientFor(config)
113+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
114+
clientset, err := v12.NewForConfigAndClient(config, httpClientFor)
108115
if err != nil {
109116
impl.logger.Errorw("error", "error", err)
110117
return nil, err
@@ -124,7 +131,9 @@ func (impl K8sUtil) GetK8sClient() (*v12.CoreV1Client, error) {
124131
impl.logger.Errorw("error fetching cluster config", "error", err)
125132
return nil, err
126133
}
127-
client, err := v12.NewForConfig(config)
134+
httpClientFor, err := rest.HTTPClientFor(config)
135+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
136+
client, err := v12.NewForConfigAndClient(config, httpClientFor)
128137
if err != nil {
129138
impl.logger.Errorw("error creating k8s client", "error", err)
130139
return nil, err
@@ -137,7 +146,9 @@ func (impl K8sUtil) GetK8sDiscoveryClient(clusterConfig *ClusterConfig) (*discov
137146
cfg.Host = clusterConfig.Host
138147
cfg.BearerToken = clusterConfig.BearerToken
139148
cfg.Insecure = true
140-
client, err := discovery.NewDiscoveryClientForConfig(cfg)
149+
httpClientFor, err := rest.HTTPClientFor(cfg)
150+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
151+
client, err := discovery.NewDiscoveryClientForConfigAndClient(cfg, httpClientFor)
141152
if err != nil {
142153
impl.logger.Errorw("error", "error", err, "clusterConfig", clusterConfig)
143154
return nil, err
@@ -158,7 +169,9 @@ func (impl K8sUtil) GetK8sDiscoveryClientInCluster() (*discovery.DiscoveryClient
158169
impl.logger.Errorw("error", "error", err)
159170
return nil, err
160171
}
161-
client, err := discovery.NewDiscoveryClientForConfig(config)
172+
httpClientFor, err := rest.HTTPClientFor(config)
173+
httpClientFor.Transport = otelhttp.NewTransport(httpClientFor.Transport)
174+
client, err := discovery.NewDiscoveryClientForConfigAndClient(config, httpClientFor)
162175
if err != nil {
163176
impl.logger.Errorw("error", "error", err)
164177
return nil, err

0 commit comments

Comments
 (0)