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

Commit 7fdef34

Browse files
author
Steven Karis
authored
Add TLS option to opencensus exporter (#457)
* Add TLS option to opencensus exporter * Fix go.mod to require newer ocagent-exporter * Update readme
1 parent b8c0834 commit 7fdef34

File tree

6 files changed

+123
-6
lines changed

6 files changed

+123
-6
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ exporters:
154154
opencensus:
155155
headers: {"X-test-header": "test-header"}
156156
compression: "gzip"
157+
cert-pem-file: "server_ca_public.pem" # optional to enable TLS
157158
endpoint: "127.0.0.1:55678"
158159

159160
jaeger:

exporter/opencensusexporter/opencensus.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@ package opencensusexporter
1616

1717
import (
1818
"context"
19+
"errors"
1920
"fmt"
2021
"sync/atomic"
2122

2223
"contrib.go.opencensus.io/exporter/ocagent"
2324
"github.com/spf13/viper"
25+
"google.golang.org/grpc/credentials"
2426

2527
agenttracepb "github.com/census-instrumentation/opencensus-proto/gen-go/agent/trace/v1"
2628
"github.com/census-instrumentation/opencensus-service/data"
@@ -34,8 +36,10 @@ type opencensusConfig struct {
3436
Endpoint string `mapstructure:"endpoint,omitempty"`
3537
Compression string `mapstructure:"compression,omitempty"`
3638
Headers map[string]string `mapstructure:"headers,omitempty"`
39+
NumWorkers int `mapstructure:"num-workers,omitempty"`
40+
CertPemFile string `mapstructure:"cert-pem-file,omitempty"`
41+
3742
// TODO: add insecure, service name options.
38-
NumWorkers int `mapstructure:"num-workers,omitempty"`
3943
}
4044

4145
type ocagentExporter struct {
@@ -47,6 +51,15 @@ const (
4751
defaultNumWorkers int = 2
4852
)
4953

54+
var (
55+
// ErrEndpointRequired indicates that this exporter was not provided with an endpoint in its config.
56+
ErrEndpointRequired = errors.New("OpenCensus exporter config requires an Endpoint")
57+
// ErrUnsupportedCompressionType indicates that this exporter was provided with a compression protocol it does not support.
58+
ErrUnsupportedCompressionType = errors.New("OpenCensus exporter unsupported compression type")
59+
// ErrUnableToGetTLSCreds indicates that this exporter could not read the provided TLS credentials.
60+
ErrUnableToGetTLSCreds = errors.New("OpenCensus exporter unable to read TLS credentials")
61+
)
62+
5063
var _ processor.TraceDataProcessor = (*ocagentExporter)(nil)
5164

5265
// OpenCensusTraceExportersFromViper unmarshals the viper and returns an processor.TraceDataProcessor targeting
@@ -64,16 +77,25 @@ func OpenCensusTraceExportersFromViper(v *viper.Viper) (tdps []processor.TraceDa
6477
}
6578

6679
if ocac.Endpoint == "" {
67-
return nil, nil, nil, fmt.Errorf("openCensus config requires an Endpoint")
80+
return nil, nil, nil, ErrEndpointRequired
6881
}
6982

70-
opts := []ocagent.ExporterOption{ocagent.WithAddress(ocac.Endpoint), ocagent.WithInsecure()}
83+
opts := []ocagent.ExporterOption{ocagent.WithAddress(ocac.Endpoint)}
7184
if ocac.Compression != "" {
7285
if compressionKey := grpc.GetGRPCCompressionKey(ocac.Compression); compressionKey != compression.Unsupported {
7386
opts = append(opts, ocagent.UseCompressor(compressionKey))
7487
} else {
75-
return nil, nil, nil, fmt.Errorf("unsupported compression type: %s", ocac.Compression)
88+
return nil, nil, nil, ErrUnsupportedCompressionType
89+
}
90+
}
91+
if ocac.CertPemFile != "" {
92+
creds, err := credentials.NewClientTLSFromFile(ocac.CertPemFile, "")
93+
if err != nil {
94+
return nil, nil, nil, ErrUnableToGetTLSCreds
7695
}
96+
opts = append(opts, ocagent.WithTLSCredentials(creds))
97+
} else {
98+
opts = append(opts, ocagent.WithInsecure())
7799
}
78100
if len(ocac.Headers) > 0 {
79101
opts = append(opts, ocagent.WithHeaders(ocac.Headers))

exporter/opencensusexporter/opencensusexporter_test.go

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,67 @@
1414

1515
package opencensusexporter
1616

17-
// TODO: Add tests.
17+
import (
18+
"testing"
19+
20+
"github.com/spf13/viper"
21+
)
22+
23+
func TestOpenCensusTraceExportersFromViper(t *testing.T) {
24+
v := viper.New()
25+
v.Set("opencensus", struct{}{})
26+
_, _, _, err := OpenCensusTraceExportersFromViper(v)
27+
28+
if err != ErrEndpointRequired {
29+
t.Fatalf("Expected to get ErrEndpointRequired but did not")
30+
}
31+
32+
v.Set("opencensus.endpoint", "127.0.0.1:55678")
33+
exporters, _, _, err := OpenCensusTraceExportersFromViper(v)
34+
35+
if err != nil {
36+
t.Fatalf("Unexpected error building OpenCensus Exporter")
37+
}
38+
if len(exporters) != 1 {
39+
t.Fatalf("Should get 1 exporter but got %d", len(exporters))
40+
}
41+
}
42+
43+
func TestOpenCensusTraceExportersFromViper_TLS(t *testing.T) {
44+
v := viper.New()
45+
v.Set("opencensus.endpoint", "127.0.0.1:55678")
46+
v.Set("opencensus.cert-pem-file", "dummy_file.pem")
47+
_, _, _, err := OpenCensusTraceExportersFromViper(v)
48+
49+
if err != ErrUnableToGetTLSCreds {
50+
t.Fatalf("Expected to get ErrUnableToGetTLSCreds but did not")
51+
}
52+
53+
v.Set("opencensus.cert-pem-file", "testdata/test_cert.pem")
54+
exporters, _, _, err := OpenCensusTraceExportersFromViper(v)
55+
if err != nil {
56+
t.Fatalf("Unexpected error building OpenCensus Exporter")
57+
}
58+
if len(exporters) != 1 {
59+
t.Fatalf("Should get 1 exporter but got %d", len(exporters))
60+
}
61+
}
62+
63+
func TestOpenCensusTraceExportersFromViper_Compression(t *testing.T) {
64+
v := viper.New()
65+
v.Set("opencensus.endpoint", "127.0.0.1:55678")
66+
v.Set("opencensus.compression", "random-compression")
67+
_, _, _, err := OpenCensusTraceExportersFromViper(v)
68+
if err != ErrUnsupportedCompressionType {
69+
t.Fatalf("Expected to get ErrUnsupportedCompressionType but did not")
70+
}
71+
72+
v.Set("opencensus.compression", "gzip")
73+
exporters, _, _, err := OpenCensusTraceExportersFromViper(v)
74+
if err != nil {
75+
t.Fatalf("Unexpected error building OpenCensus Exporter")
76+
}
77+
if len(exporters) != 1 {
78+
t.Fatalf("Should get 1 exporter but got %d", len(exporters))
79+
}
80+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIE6jCCAtICCQDVU4PtqpqADTANBgkqhkiG9w0BAQsFADA3MQswCQYDVQQGEwJV
3+
UzETMBEGA1UECAwKY2FsaWZvcm5pYTETMBEGA1UECgwKb3BlbmNlbnN1czAeFw0x
4+
OTAzMDQxODA3MjZaFw0yMDAzMDMxODA3MjZaMDcxCzAJBgNVBAYTAlVTMRMwEQYD
5+
VQQIDApjYWxpZm9ybmlhMRMwEQYDVQQKDApvcGVuY2Vuc3VzMIICIjANBgkqhkiG
6+
9w0BAQEFAAOCAg8AMIICCgKCAgEAy9JQiAOMzArcdiS4szbTuzg5yYijSSY6SvGj
7+
XMs4/LEFLxgGmFfyHXxoVQzV26lTu/AiUFlZi4JY2qlkZyPwmmmSg4fmzikpVPiC
8+
Vv9pvSIojs8gs0sHaOt40Q8ym43bNt3Mh8rYrs+XMERi6Ol9//j4LnfePkNU5uEo
9+
qC8KQamckaMR6UEHFNunyOwvNBsipgTPldQUPGVnCsNKk8olYGAXS7DR25bgbPli
10+
4T9VCSElsSPAODmyo+2MEDagVXa1vVYxKyO2k6oeBS0lsvdRqRTmGggcg0B/dk+a
11+
H1CL9ful0cu9P3dQif+hfGay8udPkwDLPEq1+WnjJFut3Pmbk3SqUCas5iWt76kK
12+
eKFh4k8fCy4yiaZxzvSbm9+bEBHAl0ZXd8pjvAsBfCKe6G9SBzE1DK4FjWiiEGCb
13+
5dGsyTKr33q3DekLvT3LF8ZeON/13d9toucX9PqG2HDwMP/Fb4WjQIzOc/H9wIak
14+
pf7u6QBDGUiCMmoDrp1d8RsI1RPbEhoywH0YlLmwgf+cr1dU7vlISf576EsGxFz4
15+
+/sZjIBvZBHn/x0MH+bs4J8V3vMujfDoRdhL07bK7q/AkEALUxljKEfoWeqiuVzK
16+
F9BVv3xNhiua2kgPVbMNWPrQ5uotkNp8IykJ3QOuQ3p5pzxdGfpLd6f8gmJDmcbi
17+
AI9dWTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAVVi4t/Sumre+AGTaU7np9dl2
18+
tpllbES5ixe6m2uezt5wAzYNNyuQ2mMG2XrSkMy5gvBZRT9nRNSmLV8VEcxZihG0
19+
YHS5soXnLL3Jdlwxp98WTDPvM1ntxcHyEyqrrg9YDfKn4sOrr5vo2yZzoKwtxtc7
20+
lue9JormVx7GxMi7NwaUtCbnwAIcqJJpFjt1EhmJOxGqTJPgUvTBdeGvRj30c6fk
21+
pqpUdPbZ7RKPEtbLoMoCBujKnErv+H0G6Vp9WyCHN+Mi9uTMsGwH14cmJjmfwGDC
22+
8/WF4LdlawFnf/arIp9YcVwcP91d4ywyvbuuo2M7qdosQ7k4uRZ3tyggLYShS3RW
23+
BMEhMRDz9dM0oKGF+HnaS824BIh6O6Hn82Vt8uCKS7IbEX99/kkN1KcqqQe6Lwjq
24+
tG/lm4K5yf+FJVDivpZ9mYTvqTBjhTaOp6m3HYSNJfS0hLQVvEuBNXd8bHiXkcLp
25+
rmFOYUWsjxV1Qku3U5Rner0UpB2Fuw9nJcXuDgWG0gjwzAZ83y3du1VIZp0Ad8Vv
26+
IYpaucbImGJszMtNXn3l72K1wvQVIhm9eRwYc3QteJzweHaDsbytZEoS/GhTrZIT
27+
wRe5ZGrjJBJngRANRSm1BH8j6PjLem9mzPb2eytwJJA0lLhUk4vYproVvXcx0vow
28+
5F+5VB1YB8/tbWePmpo=
29+
-----END CERTIFICATE-----

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/census-instrumentation/opencensus-service
33
require (
44
cloud.google.com/go v0.32.0 // indirect
55
contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0
6-
contrib.go.opencensus.io/exporter/ocagent v0.4.4
6+
contrib.go.opencensus.io/exporter/ocagent v0.4.6
77
contrib.go.opencensus.io/exporter/stackdriver v0.9.1
88
git.apache.org/thrift.git v0.0.0-20181101003639-92be4f312b88 // indirect
99
github.com/Azure/azure-sdk-for-go v6.0.0-beta+incompatible // indirect

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0 h1:YsbW
88
contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA=
99
contrib.go.opencensus.io/exporter/ocagent v0.4.4 h1:6v7OlUmiBDhvbYcHPWp8LHO8wh9jJY8f4mO34J4GJiA=
1010
contrib.go.opencensus.io/exporter/ocagent v0.4.4/go.mod h1:YuG83h+XWwqWjvCqn7vK4KSyLKhThY3+gNGQ37iS2V0=
11+
contrib.go.opencensus.io/exporter/ocagent v0.4.6 h1:xVeoJwnzMbseoL9YWhohR6SN/GncvP1p/fznasLkT/E=
12+
contrib.go.opencensus.io/exporter/ocagent v0.4.6/go.mod h1:YuG83h+XWwqWjvCqn7vK4KSyLKhThY3+gNGQ37iS2V0=
1113
contrib.go.opencensus.io/exporter/stackdriver v0.9.1 h1:W6APgQ9we4BH8U8bnq/FvwLKo2WSMHuiMkkS/Slkg30=
1214
contrib.go.opencensus.io/exporter/stackdriver v0.9.1/go.mod h1:hNe5qQofPbg6bLQY5wHCvQ7o+2E5P8PkegEuQ+MyRw0=
1315
git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999 h1:sihTnRgTOUSCQz0iS0pjZuFQy/z7GXCJgSBg3+rZKHw=

0 commit comments

Comments
 (0)