Skip to content

Commit

Permalink
Merge branch 'main' into codesmon/exporter/azuremonitor/persistent_queue
Browse files Browse the repository at this point in the history
  • Loading branch information
codesmon authored Oct 31, 2023
2 parents a15b380 + 1c63ac9 commit 8576048
Show file tree
Hide file tree
Showing 31 changed files with 463 additions and 80 deletions.
27 changes: 27 additions & 0 deletions .chloggen/collectd-http-server-settings-api.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: breaking

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: collectdreceiver

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Move to use confighttp.HTTPServerSettings

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [28811]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: [api]
27 changes: 27 additions & 0 deletions .chloggen/collectd-http-server-settings.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: collectdreceiver

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Add support of confighttp.HTTPServerSettings

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [28811]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: []
27 changes: 27 additions & 0 deletions .chloggen/cpuinfo_frequency_metric.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: enhancement

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: receiver/hostmetricsreceiver

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Added support for host's cpuinfo frequnecies.

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [27445]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext: In Linux the current frequency is populated using the values from /proc/cpuinfo. An os specific implementation will be needed for Windows and others.

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: []
31 changes: 31 additions & 0 deletions .chloggen/k8sattrs-move-time-format-feature-gate-to-beta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: breaking

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: processor/k8sattributes

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: Graduate "k8sattr.rfc3339" feature gate to Beta.

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [28817]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext: |
Time format of `k8s.pod.start_time` attribute value migrated from RFC3339:
Before: 2023-07-10 12:34:39.740638 -0700 PDT m=+0.020184946
After: 2023-07-10T12:39:53.112485-07:00
The feature gate can be temporary reverted back by adding `--feature-gate=-k8sattr.rfc3339` to the command line.
# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: [user]
2 changes: 1 addition & 1 deletion exporter/datadogexporter/traces_exporter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,6 @@ func TestTracesSource(t *testing.T) {
}

func TestTraceExporter(t *testing.T) {
t.Skip("Flaky test on CI, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/27630")
metricsServer := testutil.DatadogServerMock()
defer metricsServer.Close()

Expand Down Expand Up @@ -259,6 +258,7 @@ func TestTraceExporter(t *testing.T) {
},
IgnoreResources: []string{},
flushInterval: 0.1,
TraceBuffer: 2,
},
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ func (cc *Client) putRequestOnChan(r *request) error {

func (cc *Client) putRequestOnRetryChan(r *request) error {
// handle request counter
if requestcounter.GetRequestCount(r.ctx) == cc.maxAttempts {
if requestcounter.GetRequestCount(r.ctx) >= cc.maxAttempts {
return errMaxAttempts
}
requestcounter.IncrementRequestCount(r.ctx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ func setup(t *testing.T) (CorrelationClient, chan *request, *atomic.Value, *atom
MaxBuffered: 10,
MaxRetries: 4,
LogUpdates: true,
RetryDelay: 0,
CleanupInterval: 0,
RetryDelay: 0 * time.Second,
CleanupInterval: 1 * time.Minute,
},
AccessToken: "",
URL: serverURL,
Expand Down Expand Up @@ -180,7 +180,6 @@ func setup(t *testing.T) (CorrelationClient, chan *request, *atomic.Value, *atom
}

func TestCorrelationClient(t *testing.T) {
t.Skip("See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/27059")
client, serverCh, forcedRespCode, forcedRespPayload, cancel := setup(t)
defer close(serverCh)
defer cancel()
Expand Down Expand Up @@ -248,6 +247,7 @@ func TestCorrelationClient(t *testing.T) {

cors := waitForCors(serverCh, 1, 4)
require.Len(t, cors, 0)
require.Equal(t, uint32(5), client.(*Client).maxAttempts)
require.Equal(t, int64(5), atomic.LoadInt64(&client.(*Client).TotalRetriedUpdates))

forcedRespCode.Store(200)
Expand Down
4 changes: 2 additions & 2 deletions processor/k8sattributesprocessor/internal/kube/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor/internal/observability"
)

// Upgrade to StageBeta in v0.83.0
// Upgrade to StageStable in v0.92.0
var enableRFC3339Timestamp = featuregate.GlobalRegistry().MustRegister(
"k8sattr.rfc3339",
featuregate.StageAlpha,
featuregate.StageBeta,
featuregate.WithRegisterDescription("When enabled, uses RFC3339 format for k8s.pod.start_time value"),
featuregate.WithRegisterFromVersion("v0.82.0"),
)
Expand Down
6 changes: 0 additions & 6 deletions processor/k8sattributesprocessor/processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,6 @@ func (kp *kubernetesprocessor) initKubeClient(logger *zap.Logger, kubeClient kub
}

func (kp *kubernetesprocessor) Start(_ context.Context, _ component.Host) error {
if kp.rules.StartTime {
kp.logger.Warn("k8s.pod.start_time value will be changed to use RFC3339 format in v0.83.0. " +
"see https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/24016 for more information. " +
"enable feature-gate k8sattr.rfc3339 to opt into this change.")
}

if !kp.passthroughMode {
go kp.kc.Start()
}
Expand Down
4 changes: 3 additions & 1 deletion receiver/collectdreceiver/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,12 @@ value `field[a=b, k=v]`, this receiver will extract `a` and `b` as label keys
and, `k` and `v` as the respective label values.

## Configuration
The configuration includes the Opentelemetry collector's server [confighttp](https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/confighttp#server-configuration),
which allows for a variety of settings. Only the most relevant ones will be discussed here, but all are available.

The following settings are required:

- `endpoint` (default = `localhost:8081`): Address to reach the desired Docker daemon.
- `endpoint` (default = `localhost:8081`): Endpoint exposed by this receiver to send data.

The following settings are optional:

Expand Down
23 changes: 18 additions & 5 deletions receiver/collectdreceiver/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,29 @@
package collectdreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver"

import (
"fmt"
"strings"
"time"

"go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/config/confighttp"
)

// Config defines configuration for Collectd receiver.
type Config struct {
confignet.TCPAddr `mapstructure:",squash"`
confighttp.HTTPServerSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct
Timeout time.Duration `mapstructure:"timeout"`
Encoding string `mapstructure:"encoding"`
AttributesPrefix string `mapstructure:"attributes_prefix"`
}

Timeout time.Duration `mapstructure:"timeout"`
AttributesPrefix string `mapstructure:"attributes_prefix"`
Encoding string `mapstructure:"encoding"`
func (c *Config) Validate() error {
// CollectD receiver only supports JSON encoding. We expose a config option
// to make it explicit and obvious to the users.
if strings.ToLower(c.Encoding) != defaultEncodingFormat {
return fmt.Errorf(
"CollectD only support JSON encoding format. %s is not supported",
c.Encoding,
)
}
return nil
}
15 changes: 11 additions & 4 deletions receiver/collectdreceiver/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@
package collectdreceiver

import (
"errors"
"path/filepath"
"testing"
"time"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/confmap/confmaptest"

"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver/internal/metadata"
Expand All @@ -23,6 +24,7 @@ func TestLoadConfig(t *testing.T) {
tests := []struct {
id component.ID
expected component.Config
wantErr error
}{
{
id: component.NewIDWithName(metadata.Type, ""),
Expand All @@ -31,13 +33,14 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "one"),
expected: &Config{
TCPAddr: confignet.TCPAddr{
HTTPServerSettings: confighttp.HTTPServerSettings{
Endpoint: "localhost:12345",
},
Timeout: time.Second * 50,
Timeout: 50 * time.Second,
AttributesPrefix: "dap_",
Encoding: "command",
},
wantErr: errors.New("CollectD only support JSON encoding format. command is not supported"),
},
}

Expand All @@ -53,7 +56,11 @@ func TestLoadConfig(t *testing.T) {
require.NoError(t, err)
require.NoError(t, component.UnmarshalConfig(sub, cfg))

assert.NoError(t, component.ValidateConfig(cfg))
if tt.wantErr == nil {
assert.NoError(t, component.ValidateConfig(cfg))
} else {
assert.Equal(t, tt.wantErr, component.ValidateConfig(cfg))
}
assert.Equal(t, tt.expected, cfg)
})
}
Expand Down
20 changes: 4 additions & 16 deletions receiver/collectdreceiver/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@ package collectdreceiver // import "github.com/open-telemetry/opentelemetry-coll

import (
"context"
"fmt"
"strings"
"time"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/receiver"

Expand All @@ -21,7 +19,6 @@ import (

const (
defaultBindEndpoint = "localhost:8081"
defaultTimeout = time.Second * 30
defaultEncodingFormat = "json"
)

Expand All @@ -34,10 +31,10 @@ func NewFactory() receiver.Factory {
}
func createDefaultConfig() component.Config {
return &Config{
TCPAddr: confignet.TCPAddr{
HTTPServerSettings: confighttp.HTTPServerSettings{
Endpoint: defaultBindEndpoint,
},
Timeout: defaultTimeout,
Timeout: 30 * time.Second,
Encoding: defaultEncodingFormat,
}
}
Expand All @@ -49,14 +46,5 @@ func createMetricsReceiver(
nextConsumer consumer.Metrics,
) (receiver.Metrics, error) {
c := cfg.(*Config)
c.Encoding = strings.ToLower(c.Encoding)
// CollectD receiver only supports JSON encoding. We expose a config option
// to make it explicit and obvious to the users.
if c.Encoding != defaultEncodingFormat {
return nil, fmt.Errorf(
"CollectD only support JSON encoding format. %s is not supported",
c.Encoding,
)
}
return newCollectdReceiver(cs.Logger, c.Endpoint, c.Timeout, c.AttributesPrefix, nextConsumer, cs)
return newCollectdReceiver(cs.Logger, c, c.AttributesPrefix, nextConsumer, cs)
}
17 changes: 16 additions & 1 deletion receiver/collectdreceiver/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require (
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.88.0
github.com/stretchr/testify v1.8.4
go.opentelemetry.io/collector/component v0.88.1-0.20231026220224-6405e152a2d9
go.opentelemetry.io/collector/config/confignet v0.88.1-0.20231026220224-6405e152a2d9
go.opentelemetry.io/collector/config/confighttp v0.88.1-0.20231026220224-6405e152a2d9
go.opentelemetry.io/collector/confmap v0.88.1-0.20231026220224-6405e152a2d9
go.opentelemetry.io/collector/consumer v0.88.1-0.20231026220224-6405e152a2d9
go.opentelemetry.io/collector/pdata v1.0.0-rcv0017.0.20231026220224-6405e152a2d9
Expand All @@ -19,9 +19,15 @@ require (
require (
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/logr v1.2.4 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.2 // indirect
github.com/knadh/koanf/maps v0.1.1 // indirect
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
github.com/knadh/koanf/v2 v2.0.1 // indirect
Expand All @@ -32,10 +38,19 @@ require (
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.88.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/cors v1.10.1 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/collector v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/config/configauth v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/config/configcompression v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/config/configopaque v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/config/configtelemetry v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/config/configtls v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/config/internal v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/extension v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/extension/auth v0.88.1-0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/collector/featuregate v1.0.0-rcv0017.0.20231026220224-6405e152a2d9 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect
go.opentelemetry.io/otel v1.19.0 // indirect
go.opentelemetry.io/otel/metric v1.19.0 // indirect
go.opentelemetry.io/otel/trace v1.19.0 // indirect
Expand Down
Loading

0 comments on commit 8576048

Please sign in to comment.