Skip to content

internal: use ocb to add new components #52

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

Merged
merged 3 commits into from
Jul 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
# build
agent
output-logs
./observe-agent
dist/
agent.exe
agent.exe~
.DS_Store
observe-agent/

#integration
*.pem
*.pub
*.env


#terraform
integration/.terraform
.terraform/
Expand All @@ -22,7 +23,7 @@ tfplan
.terraform.lock.hcl
*_override.tf


#python
*pycache*
*.pyc

15 changes: 14 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,17 @@ go-test:

## release: Releases current tag through goreleaser
release:
goreleaser release --clean
goreleaser release --clean

## install-ocb: Installs correct version of ocb binary
install-ocb:
curl --proto '=https' --tlsv1.2 -L -o "$(HOME)/bin/ocb" https://github.com/open-telemetry/opentelemetry-collector/releases/download/cmd%2Fbuilder%2Fv0.104.0/ocb_0.104.0_darwin_arm64
@chmod +x "$(HOME)/bin/ocb"

## build-ocb: Builds project using ocb
build-ocb:
$(HOME)/bin/ocb --skip-compilation --config=builder-config.yaml
sed -i -e 's/package main/package observeotel/g' observe-agent/components.go
cp ./observe-agent/components.go ./cmd/collector/components.go
go mod tidy
go mod vendor
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,22 @@ To run the code you need to have `golang v1.21.7` installed. Then you can run th
go build -o observe-agent
```

## Adding new components

Before adding new components, you'll need to install the [Otel Collector Builder](https://github.com/open-telemetry/opentelemetry-collector/tree/main/cmd/builder) tool. If you're running on mac and arm64 (M chips) you can run the following command

```
make install-ocb
```

Otherwise, see instructions to install at https://opentelemetry.io/docs/collector/custom-collector/#step-1---install-the-builder

To add new components, you can modify the `builder-config.yaml` file. Add the component to the correct section and then run the following command.
```
make build-ocb
```

This command should add the new dependencies and code in the correct places. You can build the agent afterwards with `go build` to confirm.

## Running

Expand Down
52 changes: 52 additions & 0 deletions builder-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
dist:
name: observeotel
module: observe/agent
description: Observe Distribution of OTEL Collector
output_path: ./observe-agent
otelcol_version: 0.103.0

exporters:
- gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.103.0
- gomod: go.opentelemetry.io/collector/exporter/loggingexporter v0.103.0
- gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.103.0

- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.103.0

processors:
- gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.103.0
- gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.103.0

- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.103.0

receivers:
- gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.103.0

- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.103.0

extensions:
- gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.103.0

- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.103.0
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.103.0

connectors:
- gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.103.0
113 changes: 113 additions & 0 deletions cmd/collector/components.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

102 changes: 1 addition & 101 deletions cmd/collector/otelcollector.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,6 @@ package observeotel
import (
"observe/agent/build"

"github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver"
"github.com/spf13/cobra"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/confmap"
Expand All @@ -36,21 +11,9 @@ import (
"go.opentelemetry.io/collector/confmap/provider/httpprovider"
"go.opentelemetry.io/collector/confmap/provider/httpsprovider"
"go.opentelemetry.io/collector/confmap/provider/yamlprovider"
"go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/debugexporter"
"go.opentelemetry.io/collector/exporter/loggingexporter"
"go.opentelemetry.io/collector/exporter/otlphttpexporter"
"go.opentelemetry.io/collector/extension"
"go.opentelemetry.io/collector/extension/zpagesextension"
"go.opentelemetry.io/collector/processor/batchprocessor"
"go.opentelemetry.io/collector/processor/memorylimiterprocessor"

"go.opentelemetry.io/collector/otelcol"
collector "go.opentelemetry.io/collector/otelcol"
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/receiver/otlpreceiver"
)

func makeMapProvidersMap(providers ...confmap.Provider) map[string]confmap.Provider {
Expand All @@ -69,7 +32,7 @@ func GenerateCollectorSettings(URIs []string) *collector.CollectorSettings {
}
set := &collector.CollectorSettings{
BuildInfo: buildInfo,
Factories: baseFactories,
Factories: components,
ConfigProviderSettings: collector.ConfigProviderSettings{
ResolverSettings: confmap.ResolverSettings{
URIs: URIs,
Expand All @@ -86,69 +49,6 @@ func GenerateCollectorSettings(URIs []string) *collector.CollectorSettings {
return set
}

// Each module's factories needs to be manually included here for the parser to then handle that config.
func baseFactories() (otelcol.Factories, error) {
var factories otelcol.Factories
var err error

if factories.Extensions, err = extension.MakeFactoryMap(
healthcheckextension.NewFactory(),
filestorage.NewFactory(),
zpagesextension.NewFactory(),
); err != nil {
return otelcol.Factories{}, err
}

if factories.Receivers, err = receiver.MakeFactoryMap(
awsecscontainermetricsreceiver.NewFactory(),
dockerstatsreceiver.NewFactory(),
elasticsearchreceiver.NewFactory(),
filelogreceiver.NewFactory(),
filestatsreceiver.NewFactory(),
hostmetricsreceiver.NewFactory(),
iisreceiver.NewFactory(),
journaldreceiver.NewFactory(),
k8sclusterreceiver.NewFactory(),
k8sobjectsreceiver.NewFactory(),
kafkametricsreceiver.NewFactory(),
kafkareceiver.NewFactory(),
kubeletstatsreceiver.NewFactory(),
otlpreceiver.NewFactory(),
prometheusreceiver.NewFactory(),
redisreceiver.NewFactory(),
statsdreceiver.NewFactory(),
windowseventlogreceiver.NewFactory(),
); err != nil {
return otelcol.Factories{}, err
}

if factories.Exporters, err = exporter.MakeFactoryMap(
loggingexporter.NewFactory(),
debugexporter.NewFactory(),
otlphttpexporter.NewFactory(),
fileexporter.NewFactory(),
); err != nil {
return otelcol.Factories{}, err
}

if factories.Processors, err = processor.MakeFactoryMap(
attributesprocessor.NewFactory(),
batchprocessor.NewFactory(),
memorylimiterprocessor.NewFactory(),
k8sattributesprocessor.NewFactory(),
resourcedetectionprocessor.NewFactory(),
transformprocessor.NewFactory(),
); err != nil {
return otelcol.Factories{}, err
}

if factories.Connectors, err = connector.MakeFactoryMap(countconnector.NewFactory()); err != nil {
return otelcol.Factories{}, err
}

return factories, err
}

func GetOtelCollectorCommand(otelconfig *collector.CollectorSettings) *cobra.Command {
cmd := otelcol.NewCommand(*otelconfig)
return cmd
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ require (
go.uber.org/zap v1.27.0 // indirect
golang.org/x/crypto v0.24.0 // indirect
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 // indirect
golang.org/x/mod v0.18.0 // indirect
golang.org/x/mod v0.19.0 // indirect
golang.org/x/net v0.26.0 // indirect
golang.org/x/oauth2 v0.21.0 // indirect
golang.org/x/sync v0.7.0 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -994,8 +994,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand Down
Loading
Loading