Skip to content

Commit 387a703

Browse files
[8.x](backport #5767) Add support for running EDOT inside of running Elastic Agent (#6096)
* Add support for running EDOT inside of running Elastic Agent (#5767) (cherry picked from commit b07566b) --------- Co-authored-by: Blake Rouse <blake.rouse@elastic.co>
1 parent ab5e07a commit 387a703

File tree

79 files changed

+3179
-1009
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+3179
-1009
lines changed

.github/workflows/golangci-lint.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ jobs:
2525
go-version-file: .go-version
2626

2727
- name: golangci-lint
28-
uses: golangci/golangci-lint-action@v6
28+
uses: golangci/golangci-lint-action@v6.1.1
2929
with:
3030
# Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version
31-
version: v1.55.2
31+
version: v1.61.0
3232

3333
# Give the job more time to execute.
3434
# Regarding `--whole-files`, the linter is supposed to support linting of changed a patch only but,

NOTICE.txt

+217-218
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Kind can be one of:
2+
# - breaking-change: a change to previously-documented behavior
3+
# - deprecation: functionality that is being removed in a later release
4+
# - bug-fix: fixes a problem in a previous version
5+
# - enhancement: extends functionality but does not break or fix existing behavior
6+
# - feature: new functionality
7+
# - known-issue: problems that we are aware of in a given version
8+
# - security: impacts on the security of a product or a user’s deployment.
9+
# - upgrade: important information for someone upgrading from a prior version
10+
# - other: does not fit into any of the other categories
11+
kind: feature
12+
13+
# Change summary; a 80ish characters long description of the change.
14+
summary: Add ability to run Elastic Distribution of OTel Collector at the same time as other inputs
15+
16+
# Long description; in case the summary is not enough to describe the change
17+
# this field accommodate a description without length limits.
18+
# NOTE: This field will be rendered only for breaking-change and known-issue kinds at the moment.
19+
#description:
20+
21+
# Affected component; usually one of "elastic-agent", "fleet-server", "filebeat", "metricbeat", "auditbeat", "all", etc.
22+
component: elastic-agent
23+
24+
# PR URL; optional; the PR number that added the changeset.
25+
# If not present is automatically filled by the tooling finding the PR where this changelog fragment has been added.
26+
# NOTE: the tooling supports backports, so it's able to fill the original PR number instead of the backport PR number.
27+
# Please provide it if you are adding a fragment for a different PR.
28+
pr: https://github.com/elastic/elastic-agent/pull/5767
29+
30+
# Issue URL; optional; the GitHub issue related to this changeset (either closes or is part of).
31+
# If not present is automatically filled by the tooling with the issue linked to the PR number.
32+
#issue: https://github.com/owner/repo/1234

control_v2.proto

+27
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ enum State {
2323
ROLLBACK = 8;
2424
}
2525

26+
// CollectorComponentStatus used for OTel collector components.
27+
enum CollectorComponentStatus {
28+
StatusNone = 0;
29+
StatusStarting = 1;
30+
StatusOK = 2;
31+
StatusRecoverableError = 3;
32+
StatusPermanentError = 4;
33+
StatusFatalError = 5;
34+
StatusStopping = 6;
35+
StatusStopped = 7;
36+
}
37+
2638
// Unit Type running inside a component.
2739
enum UnitType {
2840
INPUT = 0;
@@ -173,6 +185,18 @@ message StateAgentInfo {
173185
bool isManaged = 8;
174186
}
175187

188+
// CollectorComponent is the status of an OTel collector component.
189+
message CollectorComponent {
190+
// Status of the component.
191+
CollectorComponentStatus status = 1;
192+
// Error is set to the reported error.
193+
string error = 2;
194+
// Timestamp of status.
195+
string timestamp = 3;
196+
// Status information for sub-components of this component.
197+
map<string, CollectorComponent> ComponentStatusMap = 4;
198+
}
199+
176200
// StateResponse is the current state of Elastic Agent.
177201
// Next unused id: 8
178202
message StateResponse {
@@ -194,6 +218,9 @@ message StateResponse {
194218

195219
// Upgrade details
196220
UpgradeDetails upgrade_details = 7;
221+
222+
// OTel collector component status information.
223+
CollectorComponent collector = 8;
197224
}
198225

199226
// UpgradeDetails captures the details of an ongoing Agent upgrade.

go.mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ require (
4444
github.com/oklog/ulid/v2 v2.1.0
4545
github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.113.0
4646
github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.113.0
47+
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.113.0
4748
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.113.0
4849
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.113.0
4950
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.113.0
@@ -63,6 +64,7 @@ require (
6364
go.elastic.co/apm/v2 v2.6.0
6465
go.elastic.co/ecszap v1.0.2
6566
go.elastic.co/go-licence-detector v0.7.0
67+
go.opentelemetry.io/collector/component/componentstatus v0.113.0
6668
go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0
6769
go.uber.org/zap v1.27.0
6870
golang.org/x/crypto v0.28.0
@@ -109,7 +111,6 @@ require (
109111
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.113.0
110112
go.opentelemetry.io/collector/component v0.113.0
111113
go.opentelemetry.io/collector/confmap v1.19.0
112-
go.opentelemetry.io/collector/confmap/converter/expandconverter v0.113.0
113114
go.opentelemetry.io/collector/confmap/provider/envprovider v1.19.0
114115
go.opentelemetry.io/collector/confmap/provider/fileprovider v1.19.0
115116
go.opentelemetry.io/collector/confmap/provider/httpprovider v1.19.0
@@ -497,7 +498,6 @@ require (
497498
go.opencensus.io v0.24.0 // indirect
498499
go.opentelemetry.io/collector v0.113.0 // indirect
499500
go.opentelemetry.io/collector/client v1.19.0 // indirect
500-
go.opentelemetry.io/collector/component/componentstatus v0.113.0 // indirect
501501
go.opentelemetry.io/collector/config/configauth v0.113.0 // indirect
502502
go.opentelemetry.io/collector/config/configcompression v1.19.0 // indirect
503503
go.opentelemetry.io/collector/config/configgrpc v0.113.0 // indirect

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -1154,6 +1154,8 @@ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.113.0
11541154
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling v0.113.0/go.mod h1:X25Nhlw6xhuNSd/C0FeEwmD4PGmcXDl7pa2jR0UREkU=
11551155
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.113.0 h1:G8w+wg4nnqBqe297fBWnjJ5Tg2OYDVEMsdWA9/3ozxQ=
11561156
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.113.0/go.mod h1:m3hDVsXPQzQfeji3+hn7NYJPHDRlHhQRNd5T7N5wZqc=
1157+
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.113.0 h1:3cHaq0xbqzoEBxcHDl8h0YpUZ1W3St7UG5YQ8f9qCxw=
1158+
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/status v0.113.0/go.mod h1:aJlolKULr8dNC4PlPkqpnBYGHrbanp4+cODG/8V/GW8=
11571159
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.113.0 h1:mFYOvag34kGXceVj29k0ZpBUyjEX7VZq+KctUSfNiG0=
11581160
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.113.0/go.mod h1:54P38b2i1CgHvZLxD3EAzVccqreamGEz2U4pqy9DuHw=
11591161
github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.113.0 h1:vKtNSM3VQBTJx1ecf+I1iqn4kj7fKif1SpBLQ+numf8=
@@ -1520,8 +1522,6 @@ go.opentelemetry.io/collector/config/internal v0.113.0 h1:9RAzH8v7ItFT1npHpvP0Sv
15201522
go.opentelemetry.io/collector/config/internal v0.113.0/go.mod h1:yC7E4h1Uj0SubxcFImh6OvBHFTjMh99+A5PuyIgDWqc=
15211523
go.opentelemetry.io/collector/confmap v1.19.0 h1:TQ0lZpAKqgsE0EKk+u4JA+uBbPYeFRmWP3GH43w40CY=
15221524
go.opentelemetry.io/collector/confmap v1.19.0/go.mod h1:GgNu1ElPGmLn9govqIfjaopvdspw4PJ9KeDtWC4E2Q4=
1523-
go.opentelemetry.io/collector/confmap/converter/expandconverter v0.113.0 h1:DBjWXlVzdwVbs1ZOH+k1vmoBt3TLx8NvRK8ZK3nKdmo=
1524-
go.opentelemetry.io/collector/confmap/converter/expandconverter v0.113.0/go.mod h1:/YDWibNLalyfd0BR0V5ixiParsNCvVKkA58f3bcu/AA=
15251525
go.opentelemetry.io/collector/confmap/provider/envprovider v1.19.0 h1:f8O/I5pVRN86Gx5mHekNx92S6fGdOS4VcooRJKWe6Bs=
15261526
go.opentelemetry.io/collector/confmap/provider/envprovider v1.19.0/go.mod h1:AiaW5YW1LD0/WlZuc8eZuZPBH6PA9QqsiAYRX1iC6T0=
15271527
go.opentelemetry.io/collector/confmap/provider/fileprovider v1.19.0 h1:TYwyk4ea3U+5MYcEjrzZAaonBcLlabQu8CZeB7ekAYY=

internal/pkg/agent/application/actions/handlers/handler_action_upgrade_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func TestUpgradeHandler(t *testing.T) {
110110
return nil, nil
111111
},
112112
},
113-
nil, nil, nil, nil, nil, false)
113+
nil, nil, nil, nil, nil, false, nil)
114114
//nolint:errcheck // We don't need the termination state of the Coordinator
115115
go c.Run(ctx)
116116

@@ -169,7 +169,7 @@ func TestUpgradeHandlerSameVersion(t *testing.T) {
169169
return nil, err
170170
},
171171
},
172-
nil, nil, nil, nil, nil, false)
172+
nil, nil, nil, nil, nil, false, nil)
173173
//nolint:errcheck // We don't need the termination state of the Coordinator
174174
go c.Run(ctx)
175175

@@ -230,7 +230,7 @@ func TestUpgradeHandlerNewVersion(t *testing.T) {
230230
return nil, nil
231231
},
232232
},
233-
nil, nil, nil, nil, nil, false)
233+
nil, nil, nil, nil, nil, false, nil)
234234
//nolint:errcheck // We don't need the termination state of the Coordinator
235235
go c.Run(ctx)
236236

internal/pkg/agent/application/apm_config_modifier.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func getAPMConfigFromMap(cfg map[string]any) (*monitoringcfg.APMConfig, error) {
9797
}
9898

9999
monitoringConfig := new(monitoringcfg.APMConfig)
100-
err = newConfigFrom.Unpack(monitoringConfig)
100+
err = newConfigFrom.UnpackTo(monitoringConfig)
101101
if err != nil {
102102
return nil, fmt.Errorf("error unpacking apm config: %w", err)
103103
}

internal/pkg/agent/application/application.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,6 @@ import (
99
"fmt"
1010
"time"
1111

12-
"github.com/elastic/elastic-agent/pkg/features"
13-
"github.com/elastic/elastic-agent/pkg/limits"
14-
"github.com/elastic/elastic-agent/version"
15-
1612
"go.elastic.co/apm/v2"
1713

1814
"github.com/elastic/elastic-agent-libs/logp"
@@ -28,10 +24,14 @@ import (
2824
"github.com/elastic/elastic-agent/internal/pkg/capabilities"
2925
"github.com/elastic/elastic-agent/internal/pkg/composable"
3026
"github.com/elastic/elastic-agent/internal/pkg/config"
27+
otelmanager "github.com/elastic/elastic-agent/internal/pkg/otel/manager"
3128
"github.com/elastic/elastic-agent/internal/pkg/release"
3229
"github.com/elastic/elastic-agent/pkg/component"
3330
"github.com/elastic/elastic-agent/pkg/component/runtime"
3431
"github.com/elastic/elastic-agent/pkg/core/logger"
32+
"github.com/elastic/elastic-agent/pkg/features"
33+
"github.com/elastic/elastic-agent/pkg/limits"
34+
"github.com/elastic/elastic-agent/version"
3535
)
3636

3737
// New creates a new Agent and bootstrap the required subsystem.
@@ -176,13 +176,13 @@ func New(
176176
}
177177
}
178178

179-
// no need for vars in otel mode
180179
varsManager, err := composable.New(log, rawConfig, composableManaged)
181180
if err != nil {
182181
return nil, nil, nil, errors.New(err, "failed to initialize composable controller")
183182
}
184183

185-
coord := coordinator.New(log, cfg, logLevel, agentInfo, specs, reexec, upgrader, runtime, configMgr, varsManager, caps, monitor, isManaged, compModifiers...)
184+
otelManager := otelmanager.NewOTelManager(log.Named("otel_manager"))
185+
coord := coordinator.New(log, cfg, logLevel, agentInfo, specs, reexec, upgrader, runtime, configMgr, varsManager, caps, monitor, isManaged, otelManager, compModifiers...)
186186
if managed != nil {
187187
// the coordinator requires the config manager as well as in managed-mode the config manager requires the
188188
// coordinator, so it must be set here once the coordinator is created

internal/pkg/agent/application/config_test.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func testMgmtMode(t *testing.T) {
2424
t.Run("succeed when local mode is selected", func(t *testing.T) {
2525
c := mustWithConfigMode(true)
2626
m := localConfig{}
27-
err := c.Unpack(&m)
27+
err := c.UnpackTo(&m)
2828
require.NoError(t, err)
2929
assert.Equal(t, false, m.Fleet.Enabled)
3030
assert.Equal(t, true, configuration.IsStandalone(m.Fleet))
@@ -34,7 +34,7 @@ func testMgmtMode(t *testing.T) {
3434
t.Run("succeed when fleet mode is selected", func(t *testing.T) {
3535
c := mustWithConfigMode(false)
3636
m := localConfig{}
37-
err := c.Unpack(&m)
37+
err := c.UnpackTo(&m)
3838
require.NoError(t, err)
3939
assert.Equal(t, true, m.Fleet.Enabled)
4040
assert.Equal(t, false, configuration.IsStandalone(m.Fleet))
@@ -49,15 +49,15 @@ func testLocalConfig(t *testing.T) {
4949
})
5050

5151
m := configuration.ReloadConfig{}
52-
err := c.Unpack(&m)
52+
err := c.UnpackTo(&m)
5353
assert.Error(t, err)
5454

5555
c = config.MustNewConfigFrom(map[string]interface{}{
5656
"enabled": true,
5757
"period": 1,
5858
})
5959

60-
err = c.Unpack(&m)
60+
err = c.UnpackTo(&m)
6161
assert.NoError(t, err)
6262
assert.Equal(t, 1*time.Second, m.Period)
6363
})

0 commit comments

Comments
 (0)