Skip to content
This repository was archived by the owner on Nov 7, 2022. It is now read-only.

Commit b597ff0

Browse files
annanay25songy23
authored andcommitted
Jaeger grpc exporter (#433)
1 parent 392ee4a commit b597ff0

File tree

13 files changed

+1112
-21
lines changed

13 files changed

+1112
-21
lines changed

cmd/occollector/app/builder/processor_builder.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ const (
2828
ThriftTChannelSenderType SenderType = "jaeger-thrift-tchannel"
2929
// ThriftHTTPSenderType represents a thrift-format http-transport sender
3030
ThriftHTTPSenderType = "jaeger-thrift-http"
31+
// ProtoGRPCSenderType represents a proto-format grpc-transport sender
32+
ProtoGRPCSenderType = "jaeger-proto-grpc"
3133
// InvalidSenderType represents an invalid sender
3234
InvalidSenderType = "invalid"
3335
)
@@ -67,6 +69,16 @@ func NewJaegerThriftHTTPSenderCfg() *JaegerThriftHTTPSenderCfg {
6769
return opts
6870
}
6971

72+
// JaegerProtoGRPCSenderCfg holds configuration for Jaeger Proto GRPC sender
73+
type JaegerProtoGRPCSenderCfg struct {
74+
CollectorEndpoint string `mapstructure:"collector-endpoint"`
75+
}
76+
77+
// NewJaegerProtoGRPCSenderCfg returns an instance of JaegerProtoGRPCSenderCfg with default values
78+
func NewJaegerProtoGRPCSenderCfg() *JaegerProtoGRPCSenderCfg {
79+
return &JaegerProtoGRPCSenderCfg{}
80+
}
81+
7082
// BatchingConfig contains configuration around the queueing batching.
7183
// It contains some advanced configurations, which should not be used
7284
// by a typical user, but are provided as advanced features to increase
@@ -155,6 +167,13 @@ func (qOpts *QueuedSpanProcessorCfg) InitFromViper(v *viper.Viper) *QueuedSpanPr
155167
vthsOpts.Unmarshal(thsOpts)
156168
}
157169
qOpts.SenderConfig = thsOpts
170+
case ProtoGRPCSenderType:
171+
pgopts := NewJaegerProtoGRPCSenderCfg()
172+
vpgopts := v.Sub(string(ProtoGRPCSenderType))
173+
if vpgopts != nil {
174+
vpgopts.Unmarshal(pgopts)
175+
}
176+
qOpts.SenderConfig = pgopts
158177
}
159178
qOpts.RawConfig = v
160179
return qOpts

cmd/occollector/app/collector/processors.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121

2222
tchReporter "github.com/jaegertracing/jaeger/cmd/agent/app/reporter/tchannel"
2323
"github.com/spf13/viper"
24-
"github.com/uber/jaeger-lib/metrics"
2524
"go.uber.org/zap"
2625

2726
"github.com/census-instrumentation/opencensus-service/cmd/occollector/app/builder"
@@ -74,7 +73,7 @@ func buildQueuedSpanProcessor(
7473
DiscoveryMinPeers: thriftTChannelSenderOpts.DiscoveryMinPeers,
7574
ConnCheckTimeout: thriftTChannelSenderOpts.DiscoveryConnCheckTimeout,
7675
}
77-
tchreporter, err := tchrepbuilder.CreateReporter(metrics.NullFactory, logger)
76+
tchreporter, err := tchrepbuilder.CreateReporter(logger)
7877
if err != nil {
7978
logger.Fatal("Cannot create tchannel reporter.", zap.Error(err))
8079
return nil, nil, err
@@ -90,6 +89,14 @@ func buildQueuedSpanProcessor(
9089
logger,
9190
sender.HTTPTimeout(thriftHTTPSenderOpts.Timeout),
9291
)
92+
case builder.ProtoGRPCSenderType:
93+
protoGRPCSenderOpts := opts.SenderConfig.(*builder.JaegerProtoGRPCSenderCfg)
94+
logger.Info("Initializing proto-GRPC sender",
95+
zap.String("url", protoGRPCSenderOpts.CollectorEndpoint))
96+
spanSender = sender.NewJaegerProtoGRPCSender(
97+
protoGRPCSenderOpts.CollectorEndpoint,
98+
logger,
99+
)
93100
}
94101
doneFns, traceExporters, _ := createExporters(opts.RawConfig, logger)
95102

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Copyright 2019, OpenCensus Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package sender
16+
17+
import (
18+
"context"
19+
20+
"go.uber.org/zap"
21+
"google.golang.org/grpc"
22+
23+
jaegerproto "github.com/jaegertracing/jaeger/proto-gen/api_v2"
24+
25+
"github.com/census-instrumentation/opencensus-service/consumer"
26+
"github.com/census-instrumentation/opencensus-service/data"
27+
jaegertranslator "github.com/census-instrumentation/opencensus-service/translator/trace/jaeger"
28+
)
29+
30+
// JaegerProtoGRPCSender forwards spans encoded in the jaeger proto
31+
// format, to a grpc server.
32+
type JaegerProtoGRPCSender struct {
33+
client jaegerproto.CollectorServiceClient
34+
logger *zap.Logger
35+
}
36+
37+
var _ consumer.TraceConsumer = (*JaegerThriftHTTPSender)(nil)
38+
39+
// NewJaegerProtoGRPCSender returns a new GRPC-backend span sender.
40+
// The collector endpoint should be of the form "hostname:14250".
41+
func NewJaegerProtoGRPCSender(collectorEndpoint string, zlogger *zap.Logger) *JaegerProtoGRPCSender {
42+
client, err := grpc.Dial(collectorEndpoint, grpc.WithInsecure())
43+
zlogger.Fatal("Failed to dail grpc connection", zap.Error(err))
44+
collectorServiceClient := jaegerproto.NewCollectorServiceClient(client)
45+
s := &JaegerProtoGRPCSender{
46+
client: collectorServiceClient,
47+
logger: zlogger,
48+
}
49+
50+
return s
51+
}
52+
53+
// ConsumeTraceData receives data.TraceData for processing by the JaegerProtoGRPCSender.
54+
func (s *JaegerProtoGRPCSender) ConsumeTraceData(ctx context.Context, td data.TraceData) error {
55+
protoBatch, err := jaegertranslator.OCProtoToJaegerProto(td)
56+
if err != nil {
57+
s.logger.Warn("Error translating OC proto batch to Jaeger proto", zap.Error(err))
58+
return err
59+
}
60+
61+
_, err = s.client.PostSpans(context.Background(), &jaegerproto.PostSpansRequest{Batch: *protoBatch})
62+
if err != nil {
63+
s.logger.Warn("Error sending grpc batch", zap.Error(err))
64+
return err
65+
}
66+
67+
return nil
68+
}

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ require (
3636
github.com/honeycombio/libhoney-go v1.8.2 // indirect
3737
github.com/honeycombio/opencensus-exporter v0.0.0-20181101214123-9be2bb327b5a
3838
github.com/inconshreveable/mousetrap v1.0.0 // indirect
39-
github.com/jaegertracing/jaeger v1.8.2
39+
github.com/jaegertracing/jaeger v1.9.0
4040
github.com/json-iterator/go v1.1.5 // indirect
4141
github.com/mitchellh/mapstructure v1.1.2 // indirect
4242
github.com/modern-go/reflect2 v1.0.1 // indirect
@@ -65,7 +65,7 @@ require (
6565
github.com/tinylib/msgp v1.0.2 // indirect
6666
github.com/uber-go/atomic v1.3.2 // indirect
6767
github.com/uber/jaeger-client-go v2.15.0+incompatible // indirect
68-
github.com/uber/jaeger-lib v1.5.0
68+
github.com/uber/jaeger-lib v2.0.0+incompatible
6969
github.com/uber/tchannel-go v1.10.0
7070
github.com/yancl/opencensus-go-exporter-kafka v0.0.0-20181029030031-9c471c1bfbeb
7171
go.opencensus.io v0.19.0

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt
238238
github.com/influxdata/influxdb v0.0.0-20170331210902-15e594fc09f1/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
239239
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
240240
github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I=
241-
github.com/jaegertracing/jaeger v1.8.2 h1:VNrL7qDS7IUJtjSJ3aa3+UU2Shhk26n4B/xi7A99mQc=
242-
github.com/jaegertracing/jaeger v1.8.2/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI=
241+
github.com/jaegertracing/jaeger v1.9.0 h1:xtwGp/+H8kvT6q8LRrEOxMhZZGKO4Hsziy4pRmLIczM=
242+
github.com/jaegertracing/jaeger v1.9.0/go.mod h1:LUWPSnzNPGRubM8pk0inANGitpiMOOxihXx0+53llXI=
243243
github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU=
244244
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8 h1:12VvqtR6Aowv3l/EQUlocDHW2Cp4G9WJVH7uyH8QFJE=
245245
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
@@ -447,8 +447,8 @@ github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo=
447447
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
448448
github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk=
449449
github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
450-
github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo=
451-
github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
450+
github.com/uber/jaeger-lib v2.0.0+incompatible h1:iMSCV0rmXEogjNWPh2D0xk9YVKvrtGoHJNe9ebLu/pw=
451+
github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
452452
github.com/uber/tchannel-go v1.10.0 h1:YOihLHuvkwT3nzvpgqFtexFW+pb5vD1Tz7h/bIWApgE=
453453
github.com/uber/tchannel-go v1.10.0/go.mod h1:Rrgz1eL8kMjW/nEzZos0t+Heq0O4LhnUJVA32OvWKHo=
454454
github.com/yancl/opencensus-go-exporter-kafka v0.0.0-20181029030031-9c471c1bfbeb h1:DSch+h+LW/9zO8ImnA2KzFylC/ShRAAgRPJVlx6FMSA=

receiver/jaegerreceiver/trace_receiver.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525

2626
"github.com/gorilla/mux"
2727
agentapp "github.com/jaegertracing/jaeger/cmd/agent/app"
28-
"github.com/jaegertracing/jaeger/cmd/agent/app/httpserver"
28+
"github.com/jaegertracing/jaeger/cmd/agent/app/configmanager"
2929
"github.com/jaegertracing/jaeger/cmd/agent/app/reporter"
3030
"github.com/jaegertracing/jaeger/cmd/collector/app"
3131
"github.com/jaegertracing/jaeger/thrift-gen/baggage"
@@ -289,7 +289,7 @@ func (jr *jReceiver) GetReporter() reporter.Reporter {
289289
return jr
290290
}
291291

292-
func (jr *jReceiver) GetManager() httpserver.ClientConfigManager {
292+
func (jr *jReceiver) GetManager() configmanager.ClientConfigManager {
293293
return jr
294294
}
295295

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2019, OpenCensus Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package jaeger
16+
17+
import (
18+
"errors"
19+
)
20+
21+
const (
22+
// Jaeger Tags
23+
ocTimeEventUnknownType = "oc.timeevent.unknown.type"
24+
ocTimeEventAnnotationDescription = "oc.timeevent.annotation.description"
25+
ocTimeEventMessageEventType = "oc.timeevent.messageevent.type"
26+
ocTimeEventMessageEventID = "oc.timeevent.messageevent.id"
27+
ocTimeEventMessageEventUSize = "oc.timeevent.messageevent.usize"
28+
ocTimeEventMessageEventCSize = "oc.timeevent.messageevent.csize"
29+
ocSameProcessAsParentSpan = "oc.sameprocessasparentspan"
30+
ocSpanChildCount = "oc.span.childcount"
31+
opencensusLanguage = "opencensus.language"
32+
opencensusExporterVersion = "opencensus.exporterversion"
33+
opencensusCoreLibVersion = "opencensus.corelibversion"
34+
)
35+
36+
var (
37+
errZeroTraceID = errors.New("OC span has an all zeros trace ID")
38+
errNilTraceID = errors.New("OC trace ID is nil")
39+
errWrongLenTraceID = errors.New("TraceID does not have 16 bytes")
40+
errZeroSpanID = errors.New("OC span has an all zeros span ID")
41+
errNilID = errors.New("OC ID is nil")
42+
errWrongLenID = errors.New("ID does not have 8 bytes")
43+
)

0 commit comments

Comments
 (0)