Skip to content

Commit

Permalink
internal: use ocb to add new components (#52)
Browse files Browse the repository at this point in the history
### Description

OB-34473: internal: use ocb to add new components

### Checklist
- [x] Created tests which fail without the change (if possible)
- [x] Extended the README / documentation, if necessary
  • Loading branch information
obs-gh-alexlew authored Jul 16, 2024
1 parent ab93dc5 commit 71e9128
Show file tree
Hide file tree
Showing 9 changed files with 203 additions and 110 deletions.
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

0 comments on commit 71e9128

Please sign in to comment.