Skip to content

Commit 944c7b1

Browse files
authored
[exporter/Sematext] Third PR of New component: Sematext Exporter (#38492)
Description: Third PR of New component: Sematext Exporter. Advanced Implementation of Metrics. Link to tracking Issue: #36465
1 parent 99733d6 commit 944c7b1

File tree

7 files changed

+651
-6
lines changed

7 files changed

+651
-6
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: new_component
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: sematextexporter
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Advanced metrics implementation
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [36465]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: [user]

exporter/sematextexporter/factory.go

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,19 @@ package sematextexporter // import "github.com/open-telemetry/opentelemetry-coll
77

88
import (
99
"context"
10+
"fmt"
1011
"time"
1112

1213
"github.com/google/uuid"
1314
"github.com/influxdata/influxdb-observability/common"
15+
"github.com/influxdata/influxdb-observability/otel2influx"
1416
"go.opentelemetry.io/collector/component"
1517
"go.opentelemetry.io/collector/config/confighttp"
1618
"go.opentelemetry.io/collector/config/configopaque"
1719
"go.opentelemetry.io/collector/config/configretry"
1820
"go.opentelemetry.io/collector/exporter"
1921
"go.opentelemetry.io/collector/exporter/exporterhelper"
2022
"go.opentelemetry.io/collector/pdata/plog"
21-
"go.opentelemetry.io/collector/pdata/pmetric"
2223

2324
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sematextexporter/internal/metadata"
2425
)
@@ -61,13 +62,37 @@ func createMetricsExporter(
6162
) (exporter.Metrics, error) {
6263
cfg := config.(*Config)
6364

65+
// Initialize the logger for Sematext
66+
logger := newZapSematextLogger(set.Logger)
67+
68+
// Create a writer for sending metrics to Sematext
69+
writer, err := newSematextHTTPWriter(logger, cfg, set.TelemetrySettings)
70+
if err != nil {
71+
return nil, fmt.Errorf("failed to create Sematext HTTP writer: %w", err)
72+
}
73+
schema, found := common.MetricsSchemata[cfg.MetricsSchema]
74+
if !found {
75+
return nil, fmt.Errorf("schema '%s' not recognized", cfg.MetricsSchema)
76+
}
77+
78+
expConfig := otel2influx.DefaultOtelMetricsToLineProtocolConfig()
79+
expConfig.Logger = logger
80+
expConfig.Writer = writer
81+
expConfig.Schema = schema
82+
exp, err := otel2influx.NewOtelMetricsToLineProtocol(expConfig)
83+
if err != nil {
84+
return nil, err
85+
}
86+
6487
return exporterhelper.NewMetrics(
6588
ctx,
6689
set,
6790
cfg,
68-
func(_ context.Context, _ pmetric.Metrics) error {
69-
return nil
70-
},
91+
exp.WriteMetrics,
92+
exporterhelper.WithQueue(cfg.QueueSettings),
93+
exporterhelper.WithRetry(cfg.BackOffConfig),
94+
exporterhelper.WithStart(writer.Start),
95+
exporterhelper.WithShutdown(writer.Shutdown),
7196
)
7297
}
7398

exporter/sematextexporter/go.mod

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ require (
66
github.com/cenkalti/backoff/v4 v4.3.0
77
github.com/google/uuid v1.6.0
88
github.com/influxdata/influxdb-observability/common v0.5.12
9+
github.com/influxdata/influxdb-observability/otel2influx v0.5.12
10+
github.com/influxdata/line-protocol/v2 v2.2.1
911
github.com/stretchr/testify v1.10.0
1012
go.opentelemetry.io/collector/component v1.27.1-0.20250307194215-7d3e03e500b0
1113
go.opentelemetry.io/collector/component/componenttest v0.121.1-0.20250307194215-7d3e03e500b0
@@ -14,10 +16,12 @@ require (
1416
go.opentelemetry.io/collector/config/configretry v1.27.1-0.20250307194215-7d3e03e500b0
1517
go.opentelemetry.io/collector/confmap v1.27.1-0.20250307194215-7d3e03e500b0
1618
go.opentelemetry.io/collector/confmap/xconfmap v0.121.1-0.20250307164521-7c787571daa5
19+
go.opentelemetry.io/collector/consumer/consumererror v0.121.1-0.20250307194215-7d3e03e500b0
1720
go.opentelemetry.io/collector/exporter v0.121.1-0.20250307194215-7d3e03e500b0
1821
go.opentelemetry.io/collector/exporter/exportertest v0.121.1-0.20250307194215-7d3e03e500b0
1922
go.opentelemetry.io/collector/pdata v1.27.1-0.20250307194215-7d3e03e500b0
2023
go.uber.org/goleak v1.3.0
24+
go.uber.org/zap v1.27.0
2125
)
2226

2327
require go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
@@ -50,7 +54,6 @@ require (
5054
go.opentelemetry.io/collector/config/configcompression v1.27.1-0.20250307194215-7d3e03e500b0 // indirect
5155
go.opentelemetry.io/collector/config/configtls v1.27.1-0.20250307194215-7d3e03e500b0 // indirect
5256
go.opentelemetry.io/collector/consumer v1.27.1-0.20250307194215-7d3e03e500b0 // indirect
53-
go.opentelemetry.io/collector/consumer/consumererror v0.121.1-0.20250307194215-7d3e03e500b0 // indirect
5457
go.opentelemetry.io/collector/consumer/consumertest v0.121.1-0.20250307194215-7d3e03e500b0 // indirect
5558
go.opentelemetry.io/collector/consumer/xconsumer v0.121.1-0.20250307194215-7d3e03e500b0 // indirect
5659
go.opentelemetry.io/collector/exporter/xexporter v0.121.1-0.20250307194215-7d3e03e500b0 // indirect
@@ -70,7 +73,7 @@ require (
7073
go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect
7174
go.opentelemetry.io/otel/trace v1.35.0 // indirect
7275
go.uber.org/multierr v1.11.0 // indirect
73-
go.uber.org/zap v1.27.0 // indirect
76+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
7477
golang.org/x/net v0.36.0 // indirect
7578
golang.org/x/sys v0.30.0 // indirect
7679
golang.org/x/text v0.22.0 // indirect

exporter/sematextexporter/go.sum

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

exporter/sematextexporter/logger.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright The OpenTelemetry Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package sematextexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sematextexporter"
5+
6+
import (
7+
"github.com/influxdata/influxdb-observability/common"
8+
"go.uber.org/zap"
9+
)
10+
11+
type zapSematextLogger struct {
12+
*zap.SugaredLogger
13+
}
14+
15+
func newZapSematextLogger(logger *zap.Logger) common.Logger {
16+
return &common.ErrorLogger{
17+
Logger: &zapSematextLogger{
18+
logger.Sugar(),
19+
},
20+
}
21+
}
22+
23+
func (l zapSematextLogger) Debug(msg string, kv ...any) {
24+
l.SugaredLogger.Debugw(msg, kv...)
25+
}

0 commit comments

Comments
 (0)