Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Configure OTEL Collector to observe Internal Telemetry #5752

Merged
merged 38 commits into from
Jul 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
35c9f22
Test configuration changes
Wise-Wizard Jul 16, 2024
64fbda6
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 16, 2024
9fa70b5
Check if tracer is configured properly
Wise-Wizard Jul 16, 2024
3b20fb9
Revert changes
Wise-Wizard Jul 16, 2024
29d0096
Removed Comments
Wise-Wizard Jul 16, 2024
153ae08
Made changes to configuration
Wise-Wizard Jul 17, 2024
f1bbcbf
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 17, 2024
325f86a
Fix Test
Wise-Wizard Jul 17, 2024
b4aa97a
Revert Changes
Wise-Wizard Jul 17, 2024
81b356b
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 17, 2024
6f13e50
Removed unneccessary config
Wise-Wizard Jul 17, 2024
24f5a02
Added endpoint
Wise-Wizard Jul 17, 2024
4d65a4b
Added Debugging to Test
Wise-Wizard Jul 17, 2024
a024fff
Made change in Endpoint
Wise-Wizard Jul 17, 2024
ce37882
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 17, 2024
bc15455
fix
yurishkuro Jul 17, 2024
dfb9633
Temp Fix
Wise-Wizard Jul 17, 2024
a71c17b
Fix Test
Wise-Wizard Jul 17, 2024
128cbcb
Update cmd/jaeger/internal/all-in-one.yaml
Wise-Wizard Jul 17, 2024
9eecdd6
Add resource attr
Wise-Wizard Jul 17, 2024
b2f18ee
Merge branch 'OTEL_Config/Telemetry' of https://github.com/Wise-Wizar…
Wise-Wizard Jul 17, 2024
eb87c18
Ran make fmt
Wise-Wizard Jul 17, 2024
4a76314
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 19, 2024
885c057
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 21, 2024
eedb4c5
Reverted Changes
Wise-Wizard Jul 21, 2024
495577a
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 22, 2024
f410b06
Enable Query Metrics for V2
Wise-Wizard Jul 23, 2024
ae542e5
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 23, 2024
74f234b
Add Issue link
Wise-Wizard Jul 23, 2024
e186026
Added tmp folder to compare metrics in JSON Format
Wise-Wizard Jul 24, 2024
1ffdd72
Added differences
Wise-Wizard Jul 24, 2024
0f797f6
Sorted Lists
Wise-Wizard Jul 24, 2024
2056e10
Added labels per metric
Wise-Wizard Jul 24, 2024
f734071
Deleted JSON
Wise-Wizard Jul 24, 2024
ee81032
Merge branch 'main' into OTEL_Config/Telemetry
Wise-Wizard Jul 25, 2024
0493b6c
Added script to compare JSON
Wise-Wizard Jul 25, 2024
aeb7646
Fix Test
Wise-Wizard Jul 25, 2024
9a3536d
Add Script
Wise-Wizard Jul 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cmd/all-in-one/all_in_one_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ func healthCheck(t *testing.T) {
}

func httpGet(t *testing.T, url string) (*http.Response, []byte) {
t.Logf("Executing HTTP GET %s", url)
req, err := http.NewRequest(http.MethodGet, url, nil)
require.NoError(t, err)
req.Close = true // avoid persistent connections which leak goroutines
Expand Down
7 changes: 7 additions & 0 deletions cmd/jaeger/internal/all-in-one.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ service:
receivers: [otlp, jaeger, zipkin]
processors: [batch]
exporters: [jaeger_storage_exporter]
telemetry:
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is just one of many config files, we need to make similar changes to all of them, and to validate that the unique metrics produced by each binary/config are the same as in v1.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, that can be taken as the next step.

resource:
service.name: jaeger
metrics:
level: detailed
# TODO Initialize telemetery tracer once OTEL released new feature.
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved
# https://github.com/open-telemetry/opentelemetry-collector/issues/10663

extensions:
jaeger_query:
Expand Down
10 changes: 8 additions & 2 deletions cmd/jaeger/internal/extension/jaegerquery/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ import (
"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage"
queryApp "github.com/jaegertracing/jaeger/cmd/query/app"
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
"github.com/jaegertracing/jaeger/internal/metrics/otelmetrics"
"github.com/jaegertracing/jaeger/pkg/jtracer"
"github.com/jaegertracing/jaeger/pkg/metrics"
"github.com/jaegertracing/jaeger/pkg/telemetery"
"github.com/jaegertracing/jaeger/pkg/tenancy"
"github.com/jaegertracing/jaeger/plugin/metrics/disabled"
"github.com/jaegertracing/jaeger/storage/metricsstore"
storageMetrics "github.com/jaegertracing/jaeger/storage/spanstore/metrics"
)

var (
Expand Down Expand Up @@ -46,6 +49,8 @@ func (*server) Dependencies() []component.ID {
}

func (s *server) Start(_ context.Context, host component.Host) error {
mf := otelmetrics.NewFactory(s.telset.MeterProvider)
queryMetricsFactory := mf.Namespace(metrics.NSOptions{Name: "query"})
f, err := jaegerstorage.GetStorageFactory(s.config.TraceStoragePrimary, host)
if err != nil {
return fmt.Errorf("cannot find primary storage %s: %w", s.config.TraceStoragePrimary, err)
Expand All @@ -55,8 +60,8 @@ func (s *server) Start(_ context.Context, host component.Host) error {
if err != nil {
return fmt.Errorf("cannot create span reader: %w", err)
}
// TODO
// spanReader = storageMetrics.NewReadMetricsDecorator(spanReader, baseFactory.Namespace(metrics.NSOptions{Name: "query"}))

spanReader = storageMetrics.NewReadMetricsDecorator(spanReader, queryMetricsFactory)
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved

depReader, err := f.CreateDependencyReader()
if err != nil {
Expand Down Expand Up @@ -87,6 +92,7 @@ func (s *server) Start(_ context.Context, host component.Host) error {
telset := telemetery.Setting{
Logger: s.telset.Logger,
TracerProvider: tracerProvider.OTEL,
Metrics: queryMetricsFactory,
ReportStatus: s.telset.ReportStatus,
}

Expand Down
6 changes: 4 additions & 2 deletions cmd/jaeger/internal/extension/jaegerquery/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
noopMeter "go.opentelemetry.io/otel/metric/noop"
"go.uber.org/zap"
"go.uber.org/zap/zaptest"

Expand Down Expand Up @@ -186,8 +187,9 @@ func TestServerStart(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
telemetrySettings := component.TelemetrySettings{
Logger: zaptest.NewLogger(t, zaptest.WrapOptions(zap.AddCaller())),
ReportStatus: func(*component.StatusEvent) {},
Logger: zaptest.NewLogger(t, zaptest.WrapOptions(zap.AddCaller())),
MeterProvider: noopMeter.NewMeterProvider(),
ReportStatus: func(*component.StatusEvent) {},
}
tt.config.HTTP.Endpoint = ":0"
tt.config.GRPC.NetAddr.Endpoint = ":0"
Expand Down
62 changes: 62 additions & 0 deletions scripts/compare_metrics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Run the following commands first to create the JSON files:
# Run V1 Binary
# prom2json http://localhost:14269/metrics > V1_Metrics.json
# Run V2 Binary
# prom2json http://localhost:8888/metrics > V2_Metrics.json

import json

# Load the JSON files
v1_metrics_path = "./V1_Metrics.json"
v2_metrics_path = "./V2_Metrics.json"

with open(v1_metrics_path, 'r') as file:
v1_metrics = json.load(file)

with open(v2_metrics_path, 'r') as file:
v2_metrics = json.load(file)

# Extract names and labels of the metrics
def extract_metrics_with_labels(metrics):
result = {}
for metric in metrics:
name = metric['name']
labels = {}
if 'metrics' in metric and 'labels' in metric['metrics'][0]:
labels = metric['metrics'][0]['labels']
result[name] = labels
return result

v1_metrics_with_labels = extract_metrics_with_labels(v1_metrics)
v2_metrics_with_labels = extract_metrics_with_labels(v2_metrics)

# Compare the metrics names and labels
common_metrics = {}
v1_only_metrics = {}
v2_only_metrics = {}

for name, labels in v1_metrics_with_labels.items():
if name in v2_metrics_with_labels:
if labels == v2_metrics_with_labels[name]:
common_metrics[name] = labels
else:
v1_only_metrics[name] = labels
else:
v1_only_metrics[name] = labels

for name, labels in v2_metrics_with_labels.items():
if name not in v1_metrics_with_labels:
v2_only_metrics[name] = labels

differences = {
"common_metrics": common_metrics,
"v1_only_metrics": v1_only_metrics,
"v2_only_metrics": v2_only_metrics
}

# Write the differences to a new JSON file
differences_path = "./differences.json"
with open(differences_path, 'w') as file:
json.dump(differences, file, indent=4)

print(f"Differences written to {differences_path}")
Loading