├── .dockerignore
├── .github
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
├── PULL_REQUEST_TEMPLATE.md
├── actions
│ ├── build
│ │ └── cli
│ │ │ └── action.yml
│ ├── chaos-tests
│ │ └── action.yml
│ ├── cross-cloud-tests
│ │ └── action.yml
│ └── nightly
│ │ └── report
│ │ └── action.yml
├── dependabot.yml
└── workflows
│ ├── build-dev-images.yml
│ ├── build.yaml
│ ├── chaos-tests.yml
│ ├── check-links.yml
│ ├── close-stale.yml
│ ├── cross-cloud-tests.yaml
│ ├── e2e.yaml
│ ├── generated-docs.yaml
│ ├── go-mod-tidy.yml
│ ├── golangci-lint.yml
│ ├── helm-lint.yml
│ ├── nightly.yml
│ ├── openshift-preflight.yml
│ ├── publish-modules.yml
│ ├── publish-odiglet-base-builder.yaml
│ ├── release-artifactregistry.yml
│ ├── release.yml
│ ├── sync-logos-s3-bucket.yml
│ ├── tag-patch.yaml
│ ├── trigger-odigos-enterprise.yaml
│ ├── update-otel-versions.yml
│ ├── verify-api-crds.yml
│ ├── verify-collector-ocb.yml
│ └── verify-odiglet-base-builder.yaml
├── .gitignore
├── .golangci.yml
├── .goreleaser.yaml
├── .vscode
├── launch.json
└── settings.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── DEVELOPMENT.md
├── Dockerfile
├── Dockerfile.rhel
├── LICENSE
├── MIGRATION.md
├── Makefile
├── README.md
├── SECURITY.md
├── agents
├── nodejs-native-community
│ ├── .dockerignore
│ ├── autoinstrumentation.js
│ ├── package.json
│ └── yarn.lock
└── python
│ ├── README.md
│ ├── configurator
│ └── __init__.py
│ └── setup.py
├── api
├── .gitignore
├── DEVELOPMENT.md
├── LICENSE
├── Makefile
├── actions
│ └── v1alpha1
│ │ ├── addclusterinfo_types.go
│ │ ├── deleteattribute_types.go
│ │ ├── errorsampler_types.go
│ │ ├── groupversion_info.go
│ │ ├── k8sattributes_types.go
│ │ ├── latencysampler_types.go
│ │ ├── piimasking_types.go
│ │ ├── probabilisticsampler_types.go
│ │ ├── renameattribute_types.go
│ │ ├── servicenamesampler_types.go
│ │ ├── spanattributesampler_types.go
│ │ └── zz_generated.deepcopy.go
├── config
│ └── crd
│ │ └── bases
│ │ ├── actions.odigos.io_addclusterinfos.yaml
│ │ ├── actions.odigos.io_deleteattributes.yaml
│ │ ├── actions.odigos.io_errorsamplers.yaml
│ │ ├── actions.odigos.io_k8sattributesresolvers.yaml
│ │ ├── actions.odigos.io_latencysamplers.yaml
│ │ ├── actions.odigos.io_piimaskings.yaml
│ │ ├── actions.odigos.io_probabilisticsamplers.yaml
│ │ ├── actions.odigos.io_renameattributes.yaml
│ │ ├── actions.odigos.io_servicenamesamplers.yaml
│ │ ├── actions.odigos.io_spanattributesamplers.yaml
│ │ ├── odigos.io_actions.yaml
│ │ ├── odigos.io_collectorsgroups.yaml
│ │ ├── odigos.io_destinations.yaml
│ │ ├── odigos.io_instrumentationconfigs.yaml
│ │ ├── odigos.io_instrumentationinstances.yaml
│ │ ├── odigos.io_instrumentationrules.yaml
│ │ ├── odigos.io_instrumentedapplications.yaml
│ │ ├── odigos.io_processors.yaml
│ │ └── odigos.io_sources.yaml
├── generated
│ ├── actions
│ │ ├── applyconfiguration
│ │ │ ├── actions
│ │ │ │ └── v1alpha1
│ │ │ │ │ ├── addclusterinfo.go
│ │ │ │ │ ├── addclusterinfospec.go
│ │ │ │ │ ├── addclusterinfostatus.go
│ │ │ │ │ ├── attributecondition.go
│ │ │ │ │ ├── booleanattributecondition.go
│ │ │ │ │ ├── deleteattribute.go
│ │ │ │ │ ├── deleteattributespec.go
│ │ │ │ │ ├── deleteattributestatus.go
│ │ │ │ │ ├── errorsampler.go
│ │ │ │ │ ├── errorsamplerspec.go
│ │ │ │ │ ├── errorsamplerstatus.go
│ │ │ │ │ ├── httproutefilter.go
│ │ │ │ │ ├── jsonattributecondition.go
│ │ │ │ │ ├── k8sannotationattribute.go
│ │ │ │ │ ├── k8sattributesresolver.go
│ │ │ │ │ ├── k8sattributesspec.go
│ │ │ │ │ ├── k8sattributesstatus.go
│ │ │ │ │ ├── k8slabelattribute.go
│ │ │ │ │ ├── latencysampler.go
│ │ │ │ │ ├── latencysamplerspec.go
│ │ │ │ │ ├── latencysamplerstatus.go
│ │ │ │ │ ├── numberattributecondition.go
│ │ │ │ │ ├── otelattributewithvalue.go
│ │ │ │ │ ├── piimasking.go
│ │ │ │ │ ├── piimaskingspec.go
│ │ │ │ │ ├── piimaskingstatus.go
│ │ │ │ │ ├── probabilisticsampler.go
│ │ │ │ │ ├── probabilisticsamplerspec.go
│ │ │ │ │ ├── probabilisticsamplerstatus.go
│ │ │ │ │ ├── renameattribute.go
│ │ │ │ │ ├── renameattributespec.go
│ │ │ │ │ ├── renameattributestatus.go
│ │ │ │ │ ├── servicenamefilter.go
│ │ │ │ │ ├── servicenamesampler.go
│ │ │ │ │ ├── servicenamesamplerspec.go
│ │ │ │ │ ├── servicenamesamplerstatus.go
│ │ │ │ │ ├── spanattributefilter.go
│ │ │ │ │ ├── spanattributesampler.go
│ │ │ │ │ ├── spanattributesamplerspec.go
│ │ │ │ │ ├── spanattributesamplerstatus.go
│ │ │ │ │ └── stringattributecondition.go
│ │ │ ├── internal
│ │ │ │ └── internal.go
│ │ │ └── utils.go
│ │ ├── clientset
│ │ │ └── versioned
│ │ │ │ ├── clientset.go
│ │ │ │ ├── fake
│ │ │ │ ├── clientset_generated.go
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ │ ├── scheme
│ │ │ │ ├── doc.go
│ │ │ │ └── register.go
│ │ │ │ └── typed
│ │ │ │ └── actions
│ │ │ │ └── v1alpha1
│ │ │ │ ├── actions_client.go
│ │ │ │ ├── addclusterinfo.go
│ │ │ │ ├── deleteattribute.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── errorsampler.go
│ │ │ │ ├── fake
│ │ │ │ ├── doc.go
│ │ │ │ ├── fake_actions_client.go
│ │ │ │ ├── fake_addclusterinfo.go
│ │ │ │ ├── fake_deleteattribute.go
│ │ │ │ ├── fake_errorsampler.go
│ │ │ │ ├── fake_k8sattributesresolver.go
│ │ │ │ ├── fake_latencysampler.go
│ │ │ │ ├── fake_piimasking.go
│ │ │ │ ├── fake_probabilisticsampler.go
│ │ │ │ ├── fake_renameattribute.go
│ │ │ │ ├── fake_servicenamesampler.go
│ │ │ │ └── fake_spanattributesampler.go
│ │ │ │ ├── generated_expansion.go
│ │ │ │ ├── k8sattributesresolver.go
│ │ │ │ ├── latencysampler.go
│ │ │ │ ├── piimasking.go
│ │ │ │ ├── probabilisticsampler.go
│ │ │ │ ├── renameattribute.go
│ │ │ │ ├── servicenamesampler.go
│ │ │ │ └── spanattributesampler.go
│ │ ├── informers
│ │ │ └── externalversions
│ │ │ │ ├── actions
│ │ │ │ ├── interface.go
│ │ │ │ └── v1alpha1
│ │ │ │ │ ├── addclusterinfo.go
│ │ │ │ │ ├── deleteattribute.go
│ │ │ │ │ ├── errorsampler.go
│ │ │ │ │ ├── interface.go
│ │ │ │ │ ├── k8sattributesresolver.go
│ │ │ │ │ ├── latencysampler.go
│ │ │ │ │ ├── piimasking.go
│ │ │ │ │ ├── probabilisticsampler.go
│ │ │ │ │ ├── renameattribute.go
│ │ │ │ │ ├── servicenamesampler.go
│ │ │ │ │ └── spanattributesampler.go
│ │ │ │ ├── factory.go
│ │ │ │ ├── generic.go
│ │ │ │ └── internalinterfaces
│ │ │ │ └── factory_interfaces.go
│ │ └── listers
│ │ │ └── actions
│ │ │ └── v1alpha1
│ │ │ ├── addclusterinfo.go
│ │ │ ├── deleteattribute.go
│ │ │ ├── errorsampler.go
│ │ │ ├── expansion_generated.go
│ │ │ ├── k8sattributesresolver.go
│ │ │ ├── latencysampler.go
│ │ │ ├── piimasking.go
│ │ │ ├── probabilisticsampler.go
│ │ │ ├── renameattribute.go
│ │ │ ├── servicenamesampler.go
│ │ │ └── spanattributesampler.go
│ └── odigos
│ │ ├── applyconfiguration
│ │ ├── internal
│ │ │ └── internal.go
│ │ ├── odigos
│ │ │ └── v1alpha1
│ │ │ │ ├── action.go
│ │ │ │ ├── actionspec.go
│ │ │ │ ├── actionstatus.go
│ │ │ │ ├── attribute.go
│ │ │ │ ├── attributecondition.go
│ │ │ │ ├── attributesandsamplerrule.go
│ │ │ │ ├── collectorsgroup.go
│ │ │ │ ├── collectorsgroupresourcessettings.go
│ │ │ │ ├── collectorsgroupspec.go
│ │ │ │ ├── collectorsgroupstatus.go
│ │ │ │ ├── configoption.go
│ │ │ │ ├── containeragentconfig.go
│ │ │ │ ├── destination.go
│ │ │ │ ├── destinationspec.go
│ │ │ │ ├── destinationstatus.go
│ │ │ │ ├── envvar.go
│ │ │ │ ├── headsamplingconfig.go
│ │ │ │ ├── instrumentationconfig.go
│ │ │ │ ├── instrumentationconfigspec.go
│ │ │ │ ├── instrumentationconfigstatus.go
│ │ │ │ ├── instrumentationinstance.go
│ │ │ │ ├── instrumentationinstancespec.go
│ │ │ │ ├── instrumentationinstancestatus.go
│ │ │ │ ├── instrumentationlibraryconfig.go
│ │ │ │ ├── instrumentationlibraryconfigtraces.go
│ │ │ │ ├── instrumentationlibraryglobalid.go
│ │ │ │ ├── instrumentationlibraryid.go
│ │ │ │ ├── instrumentationlibraryoptions.go
│ │ │ │ ├── instrumentationlibrarystatus.go
│ │ │ │ ├── instrumentationrule.go
│ │ │ │ ├── instrumentationrulespec.go
│ │ │ │ ├── instrumentationrulestatus.go
│ │ │ │ ├── instrumentedapplication.go
│ │ │ │ ├── instrumentedapplicationspec.go
│ │ │ │ ├── instrumentedapplicationstatus.go
│ │ │ │ ├── optionbycontainer.go
│ │ │ │ ├── otheragent.go
│ │ │ │ ├── processor.go
│ │ │ │ ├── processorspec.go
│ │ │ │ ├── runtimedetailsbycontainer.go
│ │ │ │ ├── sdkconfig.go
│ │ │ │ ├── source.go
│ │ │ │ ├── sourceselector.go
│ │ │ │ ├── sourcespec.go
│ │ │ │ └── sourcestatus.go
│ │ └── utils.go
│ │ ├── clientset
│ │ └── versioned
│ │ │ ├── clientset.go
│ │ │ ├── fake
│ │ │ ├── clientset_generated.go
│ │ │ ├── doc.go
│ │ │ └── register.go
│ │ │ ├── scheme
│ │ │ ├── doc.go
│ │ │ └── register.go
│ │ │ └── typed
│ │ │ └── odigos
│ │ │ └── v1alpha1
│ │ │ ├── action.go
│ │ │ ├── collectorsgroup.go
│ │ │ ├── destination.go
│ │ │ ├── doc.go
│ │ │ ├── fake
│ │ │ ├── doc.go
│ │ │ ├── fake_action.go
│ │ │ ├── fake_collectorsgroup.go
│ │ │ ├── fake_destination.go
│ │ │ ├── fake_instrumentationconfig.go
│ │ │ ├── fake_instrumentationinstance.go
│ │ │ ├── fake_instrumentationrule.go
│ │ │ ├── fake_instrumentedapplication.go
│ │ │ ├── fake_odigos_client.go
│ │ │ ├── fake_processor.go
│ │ │ └── fake_source.go
│ │ │ ├── generated_expansion.go
│ │ │ ├── instrumentationconfig.go
│ │ │ ├── instrumentationinstance.go
│ │ │ ├── instrumentationrule.go
│ │ │ ├── instrumentedapplication.go
│ │ │ ├── odigos_client.go
│ │ │ ├── processor.go
│ │ │ └── source.go
│ │ ├── informers
│ │ └── externalversions
│ │ │ ├── factory.go
│ │ │ ├── generic.go
│ │ │ ├── internalinterfaces
│ │ │ └── factory_interfaces.go
│ │ │ └── odigos
│ │ │ ├── interface.go
│ │ │ └── v1alpha1
│ │ │ ├── action.go
│ │ │ ├── collectorsgroup.go
│ │ │ ├── destination.go
│ │ │ ├── instrumentationconfig.go
│ │ │ ├── instrumentationinstance.go
│ │ │ ├── instrumentationrule.go
│ │ │ ├── instrumentedapplication.go
│ │ │ ├── interface.go
│ │ │ ├── processor.go
│ │ │ └── source.go
│ │ └── listers
│ │ └── odigos
│ │ └── v1alpha1
│ │ ├── action.go
│ │ ├── collectorsgroup.go
│ │ ├── destination.go
│ │ ├── expansion_generated.go
│ │ ├── instrumentationconfig.go
│ │ ├── instrumentationinstance.go
│ │ ├── instrumentationrule.go
│ │ ├── instrumentedapplication.go
│ │ ├── processor.go
│ │ └── source.go
├── genref-config.yaml
├── go.mod
├── go.sum
├── hack
│ ├── boilerplate.go.txt
│ ├── tools.go
│ ├── update-codegen.sh
│ └── verify-codegen.sh
├── k8sconsts
│ ├── agent.go
│ ├── autoscaler.go
│ ├── cli.go
│ ├── client.go
│ ├── clustercollector.go
│ ├── collectors.go
│ ├── consts.go
│ ├── device.go
│ ├── envvars.go
│ ├── instrumentor.go
│ ├── keyvalproxy.go
│ ├── node.go
│ ├── nodecollector.go
│ ├── odiglet.go
│ ├── odigos_system.go
│ ├── odigoscentral.go
│ ├── odigosdeployment.go
│ ├── odigospro.go
│ ├── podworkload.go
│ ├── resources.go
│ ├── scheduler.go
│ ├── source.go
│ └── ui.go
├── markdown
│ ├── members.tpl
│ ├── pkg.tpl
│ └── type.tpl
├── odigos
│ └── v1alpha1
│ │ ├── action_types.go
│ │ ├── collectorsgroup_types.go
│ │ ├── destination_types.go
│ │ ├── doc.go
│ │ ├── groupversion_info.go
│ │ ├── instrumentationconfig_types.go
│ │ ├── instrumentationinstance_types.go
│ │ ├── instrumentationrule_type.go
│ │ ├── instrumentationrules
│ │ ├── code-attributes.go
│ │ ├── http_headers.go
│ │ ├── otel-sdk.go
│ │ ├── payloadcollection.go
│ │ └── zz_generated.deepcopy.go
│ │ ├── instrumentedapplication_types.go
│ │ ├── processor_types.go
│ │ ├── source_types.go
│ │ └── zz_generated.deepcopy.go
├── render.go
└── render_test.go
├── autoscaler
├── .dockerignore
├── .gitignore
├── LICENSE
├── Makefile
├── PROJECT
├── cmd
│ └── main.go
├── controllers
│ ├── actions
│ │ ├── action_controller.go
│ │ ├── actions_webhook.go
│ │ ├── addclusterinfo_controller.go
│ │ ├── deleteattribute_controller.go
│ │ ├── k8sattributesresolver_controller.go
│ │ ├── piimasking_controller.go
│ │ ├── probabilisticsampler_controller.go
│ │ ├── renameattribute_controller.go
│ │ ├── root.go
│ │ ├── sampling
│ │ │ ├── action_handler.go
│ │ │ ├── config.go
│ │ │ ├── errorsampler.go
│ │ │ ├── groupbytrace.go
│ │ │ ├── latencysampler.go
│ │ │ ├── rule.go
│ │ │ ├── servicenamesampler.go
│ │ │ └── spanattributesampler.go
│ │ ├── sampling_controller.go
│ │ └── types.go
│ ├── clustercollector
│ │ ├── collectorsgroup_controller.go
│ │ ├── configmap.go
│ │ ├── configmap_test.go
│ │ ├── deployment.go
│ │ ├── destination_controller.go
│ │ ├── gatewaydeployment_controller.go
│ │ ├── hpa.go
│ │ ├── manager.go
│ │ ├── processor_controller.go
│ │ ├── secret_controller.go
│ │ ├── secrets.go
│ │ ├── service.go
│ │ ├── source_controller.go
│ │ └── sync.go
│ ├── common
│ │ ├── config.go
│ │ ├── deployedcondition.go
│ │ ├── hash.go
│ │ ├── memorylimiter.go
│ │ ├── processors.go
│ │ └── signals.go
│ ├── controller_config
│ │ └── controller_config.go
│ ├── manager.go
│ └── nodecollector
│ │ ├── collectorsgroup_controller.go
│ │ ├── configmap.go
│ │ ├── configmap_test.go
│ │ ├── daemonset.go
│ │ ├── daemonset_controller.go
│ │ ├── instrumentationconfig_controller.go
│ │ ├── manager.go
│ │ ├── processor_controller.go
│ │ ├── service.go
│ │ ├── sync.go
│ │ └── testdata
│ │ └── logs_included.yaml
├── go.mod
├── go.sum
└── hack
│ └── boilerplate.go.txt
├── cli
├── .gitignore
├── .ko.yaml
├── LICENSE
├── cmd
│ ├── cloud.go
│ ├── config.go
│ ├── describe.go
│ ├── diagnose.go
│ ├── diagnose_util
│ │ ├── crd_utils.go
│ │ ├── logs_util.go
│ │ └── profiling_util.go
│ ├── install.go
│ ├── login.go
│ ├── logout.go
│ ├── migrations
│ │ └── json-patch.go
│ ├── pro.go
│ ├── profile.go
│ ├── resources
│ │ ├── README.md
│ │ ├── applyresources.go
│ │ ├── autoscaler.go
│ │ ├── centralmanagers.go
│ │ ├── centralodigos
│ │ │ ├── centralbackend.go
│ │ │ ├── centralproxy.go
│ │ │ ├── centralui.go
│ │ │ └── redis.go
│ │ ├── datacollection.go
│ │ ├── gateway.go
│ │ ├── instrumentor.go
│ │ ├── keyvalproxy.go
│ │ ├── managers.go
│ │ ├── namespace.go
│ │ ├── odiglet.go
│ │ ├── odigosconfig.go
│ │ ├── odigosdeployment.go
│ │ ├── odigospro
│ │ │ ├── manager.go
│ │ │ ├── manifests.go
│ │ │ └── utils.go
│ │ ├── owntelemetry.go
│ │ ├── resourcemanager
│ │ │ └── resourcemanager.go
│ │ ├── scheduler.go
│ │ └── ui.go
│ ├── root.go
│ ├── sources.go
│ ├── sources_utils
│ │ └── sources_utils.go
│ ├── ui.go
│ ├── uninstall.go
│ ├── upgrade.go
│ └── version.go
├── go.mod
├── go.sum
├── main.go
└── pkg
│ ├── autodetect
│ ├── aks.go
│ ├── eks.go
│ ├── gke.go
│ ├── k3s.go
│ ├── kind.go
│ ├── kindkind.go
│ ├── minikube.go
│ └── openshift.go
│ ├── cmd_context
│ ├── client.go
│ └── cluster_info.go
│ ├── confirm
│ └── confirm.go
│ ├── containers
│ ├── name.go
│ └── name_test.go
│ ├── kube
│ ├── client.go
│ ├── dynamic.go
│ ├── portforward.go
│ └── resources.go
│ ├── labels
│ └── labels.go
│ └── log
│ └── logger.go
├── collector
├── .gitignore
├── .goreleaser.yaml
├── Dockerfile
├── Dockerfile.rhel
├── LICENSE
├── Makefile
├── README.md
├── builder-config.yaml
├── distribution
│ └── odigos-otelcol
│ │ ├── config.yaml
│ │ ├── odigos-otelcol.conf
│ │ ├── odigos-otelcol.service
│ │ ├── postinstall.sh
│ │ ├── preinstall.sh
│ │ └── preremove.sh
├── examples
│ └── test-config.yaml
├── exporters
│ ├── azureblobstorageexporter
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── blob_marshaler.go
│ │ ├── blob_writer.go
│ │ ├── config.go
│ │ ├── data_writer.go
│ │ ├── exporter.go
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ └── metadata
│ │ │ │ ├── generated_status.go
│ │ │ │ ├── generated_telemetry.go
│ │ │ │ └── generated_telemetry_test.go
│ │ ├── marshaler.go
│ │ └── metadata.yaml
│ ├── googlecloudstorageexporter
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── config.go
│ │ ├── data_writer.go
│ │ ├── exporter.go
│ │ ├── factory.go
│ │ ├── gcs_marshaler.go
│ │ ├── gcs_writer.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ └── metadata
│ │ │ │ ├── generated_status.go
│ │ │ │ ├── generated_telemetry.go
│ │ │ │ └── generated_telemetry_test.go
│ │ ├── marshaler.go
│ │ └── metadata.yaml
│ └── mockdestinationexporter
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── exporter.go
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ └── metadata
│ │ │ ├── generated_status.go
│ │ │ ├── generated_telemetry.go
│ │ │ └── generated_telemetry_test.go
│ │ └── metadata.yaml
├── internal
│ └── tools
│ │ ├── Makefile
│ │ ├── go.mod
│ │ ├── go.sum
│ │ └── tools.go
├── odigosotelcol
│ ├── .gitignore
│ ├── components.go
│ ├── components_test.go
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ ├── main_others.go
│ └── main_windows.go
├── processors
│ ├── odigosconditionalattributes
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── config.go
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ └── metadata
│ │ │ │ └── generated_status.go
│ │ ├── metadata.yaml
│ │ └── processor.go
│ ├── odigossamplingprocessor
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── config.go
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ ├── metadata
│ │ │ │ ├── generated_status.go
│ │ │ │ ├── generated_telemetry.go
│ │ │ │ └── generated_telemetry_test.go
│ │ │ └── sampling
│ │ │ │ ├── error.go
│ │ │ │ ├── error_test.go
│ │ │ │ ├── latency.go
│ │ │ │ ├── latency_test.go
│ │ │ │ ├── sampling.go
│ │ │ │ ├── servicename.go
│ │ │ │ ├── servicename_test.go
│ │ │ │ ├── spanattribute.go
│ │ │ │ ├── spanattribute_test.go
│ │ │ │ └── testutil
│ │ │ │ └── tracefactory.go
│ │ ├── metadata.yaml
│ │ ├── processor.go
│ │ ├── rule_engine.go
│ │ └── rule_engine_test.go
│ ├── odigossourcesfilterprocessor
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── config.go
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ └── metadata
│ │ │ │ └── generated_status.go
│ │ ├── metadata.yaml
│ │ └── processor.go
│ ├── odigossqldboperationprocessor
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── config.go
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ └── metadata
│ │ │ │ └── generated_status.go
│ │ ├── metadata.yaml
│ │ ├── processor.go
│ │ └── processor_test.go
│ ├── odigostrafficmetrics
│ │ ├── LICENSE
│ │ ├── config.go
│ │ ├── documentation.md
│ │ ├── factory.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ │ ├── metadata
│ │ │ │ ├── generated_status.go
│ │ │ │ ├── generated_telemetry.go
│ │ │ │ └── generated_telemetry_test.go
│ │ │ └── metadatatest
│ │ │ │ ├── generated_telemetrytest.go
│ │ │ │ └── generated_telemetrytest_test.go
│ │ ├── metadata.yaml
│ │ ├── processor.go
│ │ └── processor_test.go
│ └── odigosurltemplateprocessor
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── config.go
│ │ ├── factory.go
│ │ ├── factory_test.go
│ │ ├── filtermatcher.go
│ │ ├── generated_component_test.go
│ │ ├── generated_package_test.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── internal
│ │ └── metadata
│ │ │ └── generated_status.go
│ │ ├── metadata.yaml
│ │ ├── processor.go
│ │ ├── processor_test.go
│ │ └── templatize.go
└── providers
│ └── odigosk8scmprovider
│ ├── LICENSE
│ ├── go.mod
│ ├── go.sum
│ └── provider.go
├── common
├── LICENSE
├── Makefile
├── agent_health_status.go
├── config
│ ├── alibabacloud.go
│ ├── appdynamics.go
│ ├── awscloudwatch.go
│ ├── awss3.go
│ ├── awsxray.go
│ ├── axiom.go
│ ├── azureblob.go
│ ├── betterstack.go
│ ├── bonree.go
│ ├── causely.go
│ ├── causely_test.go
│ ├── checkly.go
│ ├── chronosphere.go
│ ├── chronosphere_test.go
│ ├── clickhouse.go
│ ├── config.go
│ ├── coralogix.go
│ ├── dash0.go
│ ├── datadog.go
│ ├── debug.go
│ ├── dynamic.go
│ ├── dynatrace.go
│ ├── elasticapm.go
│ ├── elasticsearch.go
│ ├── elasticsearch_test.go
│ ├── gcp.go
│ ├── gcs.go
│ ├── genericotlp.go
│ ├── grafanacloudloki.go
│ ├── grafanacloudprometheus.go
│ ├── grafanacloudtempo.go
│ ├── greptime.go
│ ├── groundcover.go
│ ├── honeycomb.go
│ ├── hyperdx.go
│ ├── instana.go
│ ├── jaeger.go
│ ├── kafka.go
│ ├── kloudmate.go
│ ├── last9.go
│ ├── lightstep.go
│ ├── logzio.go
│ ├── loki.go
│ ├── loki_test.go
│ ├── lumigo.go
│ ├── middleware.go
│ ├── mockdestination.go
│ ├── newrelic.go
│ ├── nop.go
│ ├── observe.go
│ ├── oneuptime.go
│ ├── openobserve.go
│ ├── opsverse.go
│ ├── oracle.go
│ ├── otlphttp.go
│ ├── otlphttp_test.go
│ ├── processor.go
│ ├── prometheus.go
│ ├── qryn.go
│ ├── qryn_oss.go
│ ├── quickwit.go
│ ├── root.go
│ ├── root_test.go
│ ├── sentry.go
│ ├── seq.go
│ ├── signoz.go
│ ├── splunk.go
│ ├── sumologic.go
│ ├── telemetryhub.go
│ ├── tempo.go
│ ├── testdata
│ │ ├── debugexporter.yaml
│ │ ├── minimal.yaml
│ │ └── withbaseminimal.yaml
│ ├── tingyun.go
│ ├── traceloop.go
│ ├── uptrace.go
│ ├── utils.go
│ ├── utils_test.go
│ └── victoriametricscloud.go
├── consts
│ └── consts.go
├── dests.go
├── envOverwrite
│ ├── originalenv.go
│ └── overwriter.go
├── env_injection_method.go
├── go.mod
├── go.sum
├── instrumentationdevice.go
├── instrumentationdevice_test.go
├── lang_detection.go
├── libc_types.go
├── mount.go
├── odigos_config.go
├── otelsdk.go
├── pprof.go
├── signals.go
├── spankind.go
├── spankind_test.go
└── tiers.go
├── destinations
├── LICENSE
├── data
│ ├── alibabacloud.yaml
│ ├── appdynamics.yaml
│ ├── awscloudwatch.yaml
│ ├── awss3.yaml
│ ├── awsxray.yaml
│ ├── axiom.yaml
│ ├── azureblob.yaml
│ ├── betterstack.yaml
│ ├── bonree.yaml
│ ├── causely.yaml
│ ├── checkly.yaml
│ ├── chronosphere.yaml
│ ├── clickhouse.yaml
│ ├── coralogix.yaml
│ ├── dash0.yaml
│ ├── datadog.yaml
│ ├── dynamic.yaml
│ ├── dynatrace.yaml
│ ├── elasticapm.yaml
│ ├── elasticsearch.yaml
│ ├── gigapipe.yaml
│ ├── googlecloudmonitoring.yaml
│ ├── grafanacloudloki.yaml
│ ├── grafanacloudprometheus.yaml
│ ├── grafanacloudtempo.yaml
│ ├── greptime.yaml
│ ├── groundcover.yaml
│ ├── honeycomb.yaml
│ ├── hyperdx.yaml
│ ├── instana.yaml
│ ├── jaeger.yaml
│ ├── kafka.yaml
│ ├── kloudmate.yaml
│ ├── last9.yaml
│ ├── lightstep.yaml
│ ├── logzio.yaml
│ ├── loki.yaml
│ ├── lumigo.yaml
│ ├── middleware.yaml
│ ├── newrelic.yaml
│ ├── observe.yaml
│ ├── oneuptime.yaml
│ ├── openobserve.yaml
│ ├── opsverse.yaml
│ ├── oracle.yaml
│ ├── otlp.yaml
│ ├── otlphttp.yaml
│ ├── prometheus.yaml
│ ├── qryn.yaml
│ ├── quickwit.yaml
│ ├── seq.yaml
│ ├── signoz.yaml
│ ├── splunk.yaml
│ ├── sumologic.yaml
│ ├── telemetryhub.yaml
│ ├── tempo.yaml
│ ├── tingyun.yaml
│ ├── traceloop.yaml
│ ├── uptrace.yaml
│ └── victoriametricscloud.yaml
├── go.mod
├── go.sum
├── load.go
├── logos
│ ├── alibabacloud.svg
│ ├── appdynamics.svg
│ ├── awscloudwatch.svg
│ ├── awss3.svg
│ ├── awsxray.svg
│ ├── axiom.svg
│ ├── betterstack.svg
│ ├── blobstorage.svg
│ ├── bonree.svg
│ ├── causely.svg
│ ├── checkly.svg
│ ├── chronosphere.svg
│ ├── clickhouse.svg
│ ├── coralogix.svg
│ ├── dash0.svg
│ ├── datadog.svg
│ ├── dynatrace.svg
│ ├── elasticapm.svg
│ ├── elasticsearch.svg
│ ├── gcp.svg
│ ├── gcs.svg
│ ├── gigapipe.svg
│ ├── grafana.svg
│ ├── greptime.svg
│ ├── groundcover.svg
│ ├── honeycomb.svg
│ ├── hyperdx.svg
│ ├── instana.svg
│ ├── jaeger.svg
│ ├── kafka.svg
│ ├── kloudmate.svg
│ ├── last9.svg
│ ├── lightstep.svg
│ ├── logzio.svg
│ ├── loki.svg
│ ├── lumigo.svg
│ ├── middleware.svg
│ ├── newrelic.svg
│ ├── observe.svg
│ ├── oneuptime.svg
│ ├── openobserve.svg
│ ├── opentelemetry.svg
│ ├── opsverse.svg
│ ├── oracle.svg
│ ├── prometheus.svg
│ ├── qryn.svg
│ ├── quickwit.svg
│ ├── sentry.svg
│ ├── seq.svg
│ ├── signoz.svg
│ ├── splunk.svg
│ ├── sumologic.svg
│ ├── telemetryhub.svg
│ ├── tempo.svg
│ ├── tingyun.svg
│ ├── traceloop.svg
│ ├── uptrace.svg
│ └── victoriametrics.svg
└── model.go
├── distros
├── LICENSE
├── distro
│ └── oteldistribution.go
├── go.mod
├── go.sum
├── oteldistributions.go
└── yamls
│ ├── dotnet-community.yaml
│ ├── dotnet-legacy.yaml
│ ├── golang-community.yaml
│ ├── java-community.yaml
│ ├── nodejs-community.yaml
│ ├── php-community.yaml
│ ├── python-community.yaml
│ └── render.go
├── docs
├── README.md
├── adding-new-dest.mdx
├── api-reference
│ ├── actions.odigos.io.v1alpha1.mdx
│ ├── odigos.io.v1alpha1.mdx
│ └── operator.odigos.io.v1alpha1.mdx
├── backends-overview.mdx
├── backends
│ ├── alibabacloud.mdx
│ ├── appdynamics.mdx
│ ├── awscloudwatch.mdx
│ ├── awss3.mdx
│ ├── awsxray.mdx
│ ├── axiom.mdx
│ ├── azureblob.mdx
│ ├── betterstack.mdx
│ ├── bonree.mdx
│ ├── causely.mdx
│ ├── checkly.mdx
│ ├── chronosphere.mdx
│ ├── clickhouse.mdx
│ ├── coralogix.mdx
│ ├── dash0.mdx
│ ├── datadog.mdx
│ ├── dynamic.mdx
│ ├── dynatrace.mdx
│ ├── elasticapm.mdx
│ ├── elasticsearch.mdx
│ ├── gigapipe.mdx
│ ├── googlecloudmonitoring.mdx
│ ├── googlecloudstorage.mdx
│ ├── grafanacloudloki.mdx
│ ├── grafanacloudprometheus.mdx
│ ├── grafanacloudtempo.mdx
│ ├── greptime.mdx
│ ├── groundcover.mdx
│ ├── honeycomb.mdx
│ ├── hyperdx.mdx
│ ├── images
│ │ ├── datadog1.png
│ │ ├── datadog2.png
│ │ ├── dynatrace1.png
│ │ ├── grafanacloud1.png
│ │ ├── grafanacloud2.png
│ │ ├── grafanacloud3.png
│ │ ├── grafanacloud4.png
│ │ ├── honeycomb.png
│ │ ├── honeycombcreateapikey.png
│ │ ├── honeycombcreateapikeymodal.png
│ │ ├── honeycombenv.png
│ │ ├── honeycombenvsettings.png
│ │ ├── newrelic1.png
│ │ ├── newrelic2.png
│ │ ├── splunk1.png
│ │ └── splunk2.png
│ ├── instana.mdx
│ ├── jaeger.mdx
│ ├── kafka.mdx
│ ├── kloudmate.mdx
│ ├── last9.mdx
│ ├── lightstep.mdx
│ ├── logzio.mdx
│ ├── loki.mdx
│ ├── lumigo.mdx
│ ├── middleware.mdx
│ ├── newrelic.mdx
│ ├── observe.mdx
│ ├── oneuptime.mdx
│ ├── openobserve.mdx
│ ├── opsverse.mdx
│ ├── oracle.mdx
│ ├── otlp.mdx
│ ├── otlphttp.mdx
│ ├── prometheus.mdx
│ ├── qryn.mdx
│ ├── quickwit.mdx
│ ├── sentry.mdx
│ ├── seq.mdx
│ ├── signoz.mdx
│ ├── splunk.mdx
│ ├── sumologic.mdx
│ ├── telemetryhub.mdx
│ ├── tempo.mdx
│ ├── tingyun.mdx
│ ├── traceloop.mdx
│ ├── uptrace.mdx
│ └── victoriametricscloud.mdx
├── benchmarks.mdx
├── cli
│ ├── odigos.mdx
│ ├── odigos_cloud.mdx
│ ├── odigos_cloud_login.mdx
│ ├── odigos_cloud_logout.mdx
│ ├── odigos_cloud_update.mdx
│ ├── odigos_config.mdx
│ ├── odigos_config_set.mdx
│ ├── odigos_describe.mdx
│ ├── odigos_describe_source.mdx
│ ├── odigos_describe_source_daemonset.mdx
│ ├── odigos_describe_source_deployment.mdx
│ ├── odigos_describe_source_statefulset.mdx
│ ├── odigos_diagnose.mdx
│ ├── odigos_install.mdx
│ ├── odigos_pro.mdx
│ ├── odigos_pro_central.mdx
│ ├── odigos_pro_central_install.mdx
│ ├── odigos_pro_central_ui.mdx
│ ├── odigos_pro_update-offsets.mdx
│ ├── odigos_profile.mdx
│ ├── odigos_profile_add.mdx
│ ├── odigos_profile_remove.mdx
│ ├── odigos_sources.mdx
│ ├── odigos_sources_create.mdx
│ ├── odigos_sources_delete.mdx
│ ├── odigos_sources_disable.mdx
│ ├── odigos_sources_disable_daemonset.mdx
│ ├── odigos_sources_disable_deployment.mdx
│ ├── odigos_sources_disable_namespace.mdx
│ ├── odigos_sources_disable_statefulset.mdx
│ ├── odigos_sources_enable.mdx
│ ├── odigos_sources_enable_daemonset.mdx
│ ├── odigos_sources_enable_deployment.mdx
│ ├── odigos_sources_enable_namespace.mdx
│ ├── odigos_sources_enable_statefulset.mdx
│ ├── odigos_sources_status.mdx
│ ├── odigos_sources_update.mdx
│ ├── odigos_ui.mdx
│ ├── odigos_uninstall.mdx
│ ├── odigos_upgrade.mdx
│ └── odigos_version.mdx
├── custom-resources.mdx
├── debugging.mdx
├── favicon.svg
├── images
│ ├── collectors_ready.png
│ ├── demo_architecture.png
│ ├── demo_frontend_app.png
│ ├── jaeger_ui.png
│ ├── odigos_architecture.png
│ ├── odigos_banner.png
│ ├── operator
│ │ ├── operator-2.png
│ │ ├── operator-3.png
│ │ ├── operator-4.png
│ │ ├── operator-5.png
│ │ ├── operator-6.png
│ │ ├── operator-7.png
│ │ ├── operator-8.png
│ │ └── operator-9.png
│ ├── pods_ready.png
│ ├── ui_choose_apps.png
│ ├── ui_choose_dest.png
│ ├── ui_jaeger_connection.png
│ └── ui_overview.png
├── instrumentations
│ ├── configuration
│ │ └── mount-method.mdx
│ ├── dotnet
│ │ ├── enrichment.mdx
│ │ └── native.mdx
│ ├── golang
│ │ ├── ebpf.mdx
│ │ └── enrichment.mdx
│ ├── java
│ │ ├── ebpf.mdx
│ │ ├── enrichment.mdx
│ │ └── native.mdx
│ ├── nodejs
│ │ ├── ebpf.mdx
│ │ ├── enrichment.mdx
│ │ └── native.mdx
│ ├── overview.mdx
│ ├── php
│ │ ├── enrichment.mdx
│ │ └── native.mdx
│ └── python
│ │ ├── enrichment.mdx
│ │ └── native.mdx
├── logo
│ ├── icon.svg
│ ├── logo_black.svg
│ └── logo_white.svg
├── mint.json
├── overview.mdx
├── package.json
├── permissions.mdx
├── pipeline
│ ├── actions
│ │ ├── attributes
│ │ │ ├── addclusterinfo.mdx
│ │ │ ├── deleteattribute.mdx
│ │ │ ├── k8sattributes.mdx
│ │ │ ├── piimasking.mdx
│ │ │ └── renameattribute.mdx
│ │ ├── crd.mdx
│ │ ├── introduction.mdx
│ │ ├── sampling
│ │ │ ├── errorsampler.mdx
│ │ │ ├── latencysampler.mdx
│ │ │ ├── probabilisticsampler.mdx
│ │ │ ├── servicenamesampler.mdx
│ │ │ └── spanattributesampler.mdx
│ │ └── troubleshooting.mdx
│ ├── configuration.mdx
│ ├── overview.mdx
│ ├── rules
│ │ ├── codeattributes.mdx
│ │ ├── headerscollection.mdx
│ │ ├── introduction.mdx
│ │ └── payloadcollection.mdx
│ └── sources
│ │ ├── create.mdx
│ │ ├── delete.mdx
│ │ ├── introduction.mdx
│ │ ├── troubleshooting.mdx
│ │ └── update.mdx
├── quickstart
│ ├── building-a-pipeline.mdx
│ ├── generation-data.mdx
│ ├── installation-guide-for-beginners.mdx
│ ├── installation.mdx
│ ├── introduction.mdx
│ ├── next-steps.mdx
│ └── viewing-traces.mdx
├── reo.js
├── requirements.txt
├── setup
│ ├── docker-registry.mdx
│ ├── installation-options.mdx
│ ├── installation.mdx
│ ├── odigos-with-argocd.mdx
│ ├── odigos-with-karpenter.mdx
│ ├── system-requirements.mdx
│ ├── uninstall.mdx
│ └── upgrade.mdx
├── snippets
│ ├── assume-no-meaning.mdx
│ ├── aws-credentials.mdx
│ ├── beta-warning.mdx
│ ├── ebpf-kernel-version-note.mdx
│ ├── enrichment-intro.mdx
│ ├── getting-help-section.mdx
│ └── languages-card.mdx
├── sync-dest-doc.py
├── sync-instru-doc.py
├── telemetry-types.mdx
├── usage-reports.mdx
├── vmagent
│ ├── architecture.mdx
│ ├── configuration
│ │ ├── reference.mdx
│ │ └── updating.mdx
│ ├── overview.mdx
│ ├── quickstart
│ │ ├── building-a-pipeline.mdx
│ │ ├── generating-data.mdx
│ │ ├── installation.mdx
│ │ ├── introduction.mdx
│ │ └── preparation.mdx
│ └── setup
│ │ ├── configuration
│ │ ├── agent.mdx
│ │ └── service.mdx
│ │ ├── installation.mdx
│ │ ├── preparation.mdx
│ │ └── uninstall.mdx
└── yarn.lock
├── e2e-test.sh
├── frontend
├── .gitignore
├── .vscode
│ └── settings.json
├── Dockerfile
├── Dockerfile.rhel
├── LICENSE
├── Makefile
├── go.mod
├── go.sum
├── gqlgen.yml
├── graph
│ ├── common.go
│ ├── conversions.go
│ ├── generated.go
│ ├── model
│ │ ├── destination.go
│ │ └── models_gen.go
│ ├── resolver.go
│ ├── schema.graphqls
│ └── schema.resolvers.go
├── kube
│ ├── client.go
│ └── watchers
│ │ ├── batcher.go
│ │ ├── common.go
│ │ ├── destination_watcher.go
│ │ └── instrumentation_config_watcher.go
├── main.go
├── services
│ ├── actions
│ │ ├── addclusterinfo.go
│ │ ├── constants.go
│ │ ├── deleteattribute.go
│ │ ├── errorsampler.go
│ │ ├── k8sattributes.go
│ │ ├── latencysampler.go
│ │ ├── piimasking.go
│ │ ├── probabilisticsampler.go
│ │ ├── renameattribute.go
│ │ ├── servicenamesampler.go
│ │ └── spanattributessampler.go
│ ├── collector_metrics
│ │ ├── README.md
│ │ ├── cluster_collector.go
│ │ ├── collector_metrics.go
│ │ ├── node_collector.go
│ │ ├── utils.go
│ │ ├── utils_test.go
│ │ └── watchers.go
│ ├── common
│ │ └── source.go
│ ├── config.go
│ ├── data_stream.go
│ ├── db
│ │ ├── database.go
│ │ ├── models.go
│ │ └── sqlite.go
│ ├── describe.go
│ ├── describe
│ │ ├── odigos_describe
│ │ │ └── odigos_describe.go
│ │ ├── source_describe
│ │ │ └── source_describe.go
│ │ └── utils
│ │ │ └── conversion.go
│ ├── destination_recognition
│ │ ├── destination_finder.go
│ │ ├── elasticsearch.go
│ │ └── jaeger.go
│ ├── destinations.go
│ ├── instrumentationrule.go
│ ├── namespaces.go
│ ├── pro.go
│ ├── sources.go
│ ├── sse
│ │ └── sse.go
│ ├── test_connection
│ │ ├── conversion.go
│ │ ├── otlp_test_connection.go
│ │ ├── otlphttp_test_connection.go
│ │ ├── test_connection.go
│ │ ├── utils.go
│ │ └── utils_test.go
│ └── utils.go
├── version
│ └── version.go
└── webapp
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── .prettierrc
│ ├── README.md
│ ├── app
│ ├── (overview)
│ │ ├── actions
│ │ │ └── page.tsx
│ │ ├── destinations
│ │ │ └── page.tsx
│ │ ├── instrumentation-rules
│ │ │ └── page.tsx
│ │ ├── layout.tsx
│ │ ├── overview
│ │ │ └── page.tsx
│ │ └── sources
│ │ │ └── page.tsx
│ ├── (setup)
│ │ ├── choose-destination
│ │ │ └── page.tsx
│ │ ├── choose-sources
│ │ │ └── page.tsx
│ │ ├── choose-stream
│ │ │ └── page.tsx
│ │ ├── layout.tsx
│ │ └── setup-summary
│ │ │ └── page.tsx
│ ├── layout.tsx
│ └── page.tsx
│ ├── components
│ ├── index.ts
│ ├── lib-imports
│ │ ├── index.ts
│ │ ├── overview-header.tsx
│ │ ├── overview-modals-and-drawers.tsx
│ │ └── setup-header.tsx
│ └── styled.tsx
│ ├── cypress.config.ts
│ ├── cypress
│ ├── .gitignore
│ ├── constants
│ │ └── index.ts
│ ├── e2e
│ │ ├── 01-connection.cy.ts
│ │ ├── 02-onboarding.cy.ts
│ │ ├── 03-sources.cy.ts
│ │ ├── 04-destinations.cy.ts
│ │ ├── 05-actions.cy.ts
│ │ └── 06-rules.cy.ts
│ └── functions
│ │ ├── cy-alias.ts
│ │ └── index.ts
│ ├── graphql
│ ├── index.ts
│ ├── mutations
│ │ ├── action.ts
│ │ ├── data-stream.ts
│ │ ├── destination.ts
│ │ ├── index.ts
│ │ ├── instrumentation-rule.ts
│ │ ├── namespace.ts
│ │ ├── source.ts
│ │ └── token.ts
│ └── queries
│ │ ├── actions.ts
│ │ ├── config.ts
│ │ ├── data-streams.ts
│ │ ├── describe.ts
│ │ ├── destination.ts
│ │ ├── index.ts
│ │ ├── instrumentation-rules.ts
│ │ ├── metrics.ts
│ │ ├── namespaces.ts
│ │ ├── source.ts
│ │ └── tokens.ts
│ ├── hooks
│ ├── actions
│ │ ├── index.ts
│ │ └── useActionCRUD.ts
│ ├── common
│ │ ├── index.ts
│ │ └── useSetupHelpers.ts
│ ├── config
│ │ ├── index.ts
│ │ └── useConfig.ts
│ ├── data-streams
│ │ ├── index.ts
│ │ └── useDataStreamsCRUD.ts
│ ├── describe
│ │ ├── index.ts
│ │ └── useDescribe.ts
│ ├── destinations
│ │ ├── index.ts
│ │ ├── useDestinationCRUD.ts
│ │ ├── useDestinationCategories.ts
│ │ ├── usePotentialDestinations.ts
│ │ └── useTestConnection.ts
│ ├── index.ts
│ ├── instrumentation-rules
│ │ ├── index.ts
│ │ └── useInstrumentationRuleCRUD.ts
│ ├── metrics
│ │ ├── index.ts
│ │ └── useMetrics.ts
│ ├── namespaces
│ │ ├── index.ts
│ │ └── useNamespace.ts
│ ├── notification
│ │ ├── index.ts
│ │ └── useSSE.ts
│ ├── sources
│ │ ├── index.ts
│ │ └── useSourceCRUD.ts
│ └── tokens
│ │ ├── index.ts
│ │ ├── useTokenCRUD.ts
│ │ └── useTokenTracker.ts
│ ├── lib
│ ├── apollo-provider.tsx
│ └── theme-provider.tsx
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.js
│ ├── public
│ ├── favicon.svg
│ └── manifest.json
│ ├── store
│ ├── index.ts
│ └── useStatusStore.ts
│ ├── tsconfig.json
│ ├── types
│ ├── actions.ts
│ ├── common.ts
│ ├── config.ts
│ ├── destinations.ts
│ ├── index.ts
│ ├── namespaces.ts
│ └── sources.ts
│ ├── utils
│ ├── constants
│ │ ├── index.ts
│ │ ├── keys.ts
│ │ ├── props.ts
│ │ └── routes.tsx
│ ├── functions
│ │ ├── actions.ts
│ │ ├── destinations.ts
│ │ ├── index.ts
│ │ └── sources.ts
│ └── index.ts
│ └── yarn.lock
├── helm
├── README.md
├── odigos-central
│ ├── Chart.yaml
│ ├── templates
│ │ ├── _helpers.tpl
│ │ ├── centralbackend
│ │ │ ├── central-backend-service.yaml
│ │ │ ├── deployment.yaml
│ │ │ └── secret.yaml
│ │ ├── centralui
│ │ │ └── deployment.yaml
│ │ └── redis
│ │ │ ├── redis-service.yaml
│ │ │ └── redis.yaml
│ └── values.yaml
└── odigos
│ ├── .helmignore
│ ├── Chart.yaml
│ ├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── autoscaler
│ │ ├── clusterrole.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── deployment.yaml
│ │ ├── leader-election-rolebinding.yaml
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ ├── service.yaml
│ │ ├── serviceaccount.yaml
│ │ └── webhooks.yaml
│ ├── centralproxy
│ │ ├── deployment.yaml
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ └── serviceaccount.yaml
│ ├── cleanup
│ │ ├── cleanup-clusterrole.yaml
│ │ ├── cleanup-clusterrolebinding.yaml
│ │ ├── cleanup-job.yaml
│ │ ├── cleanup-role.yaml
│ │ ├── cleanup-rolebinding.yaml
│ │ └── service-account.yaml
│ ├── crds
│ │ ├── actions.odigos.io_addclusterinfos.yaml
│ │ ├── actions.odigos.io_deleteattributes.yaml
│ │ ├── actions.odigos.io_errorsamplers.yaml
│ │ ├── actions.odigos.io_k8sattributesresolvers.yaml
│ │ ├── actions.odigos.io_latencysamplers.yaml
│ │ ├── actions.odigos.io_piimaskings.yaml
│ │ ├── actions.odigos.io_probabilisticsamplers.yaml
│ │ ├── actions.odigos.io_renameattributes.yaml
│ │ ├── actions.odigos.io_servicenamesamplers.yaml
│ │ ├── actions.odigos.io_spanattributesamplers.yaml
│ │ ├── odigos.io_actions.yaml
│ │ ├── odigos.io_collectorsgroups.yaml
│ │ ├── odigos.io_destinations.yaml
│ │ ├── odigos.io_instrumentationconfigs.yaml
│ │ ├── odigos.io_instrumentationinstances.yaml
│ │ ├── odigos.io_instrumentationrules.yaml
│ │ ├── odigos.io_instrumentedapplications.yaml
│ │ ├── odigos.io_processors.yaml
│ │ └── odigos.io_sources.yaml
│ ├── datacollection
│ │ ├── clusterrole.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ └── serviceaccount.yaml
│ ├── gateway
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ └── serviceaccount.yaml
│ ├── instrumentor
│ │ ├── clusterrole.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── deployment.yaml
│ │ ├── leader-election-rolebinding.yaml
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ ├── service.yaml
│ │ ├── serviceaccount.yaml
│ │ └── webhooks.yaml
│ ├── leader-election-role.yaml
│ ├── odiglet
│ │ ├── clusterrole.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── daemonset.yaml
│ │ ├── gooffsetsconfigmap.yaml
│ │ ├── local-service.yaml
│ │ ├── resourcequota.yaml
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ ├── secret.yaml
│ │ └── serviceaccount.yaml
│ ├── odigos-config-cm.yaml
│ ├── odigos-deployment.yaml
│ ├── odigos-own-telemetry-otel-config.yaml
│ ├── scheduler
│ │ ├── clusterrole.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── deployment.yaml
│ │ ├── leader-election-rolebinding.yaml
│ │ ├── role-binding.yaml
│ │ ├── role.yaml
│ │ └── serviceaccount.yaml
│ └── ui
│ │ ├── clusterrole.yaml
│ │ ├── clusterrolebinding.yaml
│ │ ├── deployment.yaml
│ │ ├── role.yaml
│ │ ├── rolebinding.yaml
│ │ ├── service.yaml
│ │ └── serviceaccount.yaml
│ └── values.yaml
├── instrumentation
├── LICENSE
├── detector
│ └── detector.go
├── factory.go
├── go.mod
├── go.sum
├── manager.go
└── types.go
├── instrumentor
├── .dockerignore
├── .gitignore
├── LICENSE
├── Makefile
├── PROJECT
├── README.md
├── cmd
│ └── main.go
├── controllers
│ ├── agentenabled
│ │ ├── collectorsgroup_controller.go
│ │ ├── effectiveconfig_controller.go
│ │ ├── instrumentationconfig_controller.go
│ │ ├── instrumentationrule_controller.go
│ │ ├── manager.go
│ │ ├── pods_webhook.go
│ │ ├── podswebhook
│ │ │ ├── device.go
│ │ │ ├── env.go
│ │ │ ├── mount.go
│ │ │ └── otelresource.go
│ │ ├── resources.go
│ │ ├── rollout
│ │ │ ├── hash.go
│ │ │ ├── hash_test.go
│ │ │ └── rollout.go
│ │ └── sync.go
│ ├── instrumentationconfig
│ │ ├── common.go
│ │ ├── common_test.go
│ │ ├── instrumentationconfig_controller.go
│ │ ├── instrumentationrule_controller.go
│ │ ├── manager.go
│ │ └── source_controller.go
│ ├── manager.go
│ ├── sourceinstrumentation
│ │ ├── common.go
│ │ ├── conditions.go
│ │ ├── deployment_controller_test.go
│ │ ├── instrumentationconfig_controller.go
│ │ ├── instrumentationconfig_controller_test.go
│ │ ├── instrumentedapp_migration_controller.go
│ │ ├── manager.go
│ │ ├── namespace_controller.go
│ │ ├── namespace_controller_test.go
│ │ ├── source_controller.go
│ │ ├── source_controller_test.go
│ │ ├── suite_test.go
│ │ └── workload_controllers.go
│ ├── sources_webhooks.go
│ ├── utils
│ │ ├── instrumentationrules.go
│ │ └── predicates
│ │ │ ├── instrumentation_rule.go
│ │ │ └── runtime_details_changed.go
│ └── workloadmigrations
│ │ ├── controllers.go
│ │ └── manager.go
├── go.mod
├── go.sum
├── hack
│ └── boilerplate.go.txt
├── instrumentor.go
├── internal
│ ├── pod
│ │ └── pod.go
│ ├── testutil
│ │ ├── assertions.go
│ │ ├── helpers.go
│ │ └── mocks.go
│ └── webhook_env_injector
│ │ └── webhook_env_injector.go
├── report
│ └── events.go
├── runtimemigration
│ ├── runtimemigration.go
│ └── utils.go
└── sdks
│ └── sdks.go
├── k8sutils
├── LICENSE
├── go.mod
├── go.sum
└── pkg
│ ├── certs
│ └── secrets_migration.go
│ ├── client
│ ├── client.go
│ └── pager.go
│ ├── conditions
│ ├── conditions.go
│ └── deployment.go
│ ├── container
│ └── container.go
│ ├── cri
│ └── criwrapper.go
│ ├── describe
│ ├── common.go
│ ├── odigos.go
│ ├── odigos
│ │ ├── analyze.go
│ │ └── resources.go
│ ├── properties
│ │ ├── properties.go
│ │ └── utils.go
│ ├── source.go
│ └── source
│ │ ├── analyze.go
│ │ ├── resources.go
│ │ └── source.go
│ ├── env
│ ├── env.go
│ └── env_test.go
│ ├── envoverwrite
│ └── origenv.go
│ ├── feature
│ ├── feature.go
│ └── feature_test.go
│ ├── getters
│ └── odigosversion.go
│ ├── installationmethod
│ └── installationmethod.go
│ ├── instrumentation_instance
│ ├── object.go
│ └── status.go
│ ├── node
│ └── node.go
│ ├── predicate
│ ├── cgbecomesready.go
│ ├── containers_ready.go
│ ├── creation.go
│ ├── deletion.go
│ ├── existence.go
│ ├── objectname.go
│ └── onlyupdate.go
│ ├── pro
│ └── common.go
│ ├── service
│ └── service.go
│ ├── source
│ └── source.go
│ ├── utils
│ ├── collectorgroup_util.go
│ ├── config_util.go
│ ├── config_utils.go
│ ├── object.go
│ ├── other_agent.go
│ ├── retrynoeffectiveconfig.go
│ ├── retryonconflict.go
│ └── tiers.go
│ └── workload
│ ├── ownerreferece_test.go
│ ├── ownerreference.go
│ ├── runtimeobjects.go
│ ├── runtimeobjects_test.go
│ ├── workload.go
│ ├── workload_test.go
│ ├── workloadkinds.go
│ └── workloadkinds_test.go
├── odiglet
├── .gitignore
├── Dockerfile
├── Dockerfile.rhel
├── LICENSE
├── Makefile
├── README.md
├── base.Dockerfile
├── cmd
│ └── main.go
├── debug.Dockerfile
├── go.mod
├── go.sum
├── odiglet.go
└── pkg
│ ├── detector
│ └── detector.go
│ ├── ebpf
│ ├── common.go
│ ├── configprovider.go
│ ├── distribution_matcher.go
│ ├── reporter.go
│ ├── resolvers.go
│ ├── sdks
│ │ └── go.go
│ └── settings_getter.go
│ ├── env
│ └── current.go
│ ├── instrumentation
│ ├── devices
│ │ └── ids_manager.go
│ ├── fs
│ │ ├── agents.go
│ │ ├── copy.go
│ │ ├── copy_test.go
│ │ └── remove.go
│ ├── instrumentlang
│ │ ├── dotnet.go
│ │ ├── golang.go
│ │ ├── java.go
│ │ ├── nginx.go
│ │ ├── nodejs.go
│ │ └── python.go
│ ├── lister.go
│ └── plugin.go
│ ├── kube
│ ├── instrumentation_ebpf
│ │ ├── instrumentationconfig.go
│ │ └── manager.go
│ ├── manager.go
│ ├── runtime_details
│ │ ├── common.go
│ │ ├── inspection.go
│ │ ├── instrumentationconfigs_controller.go
│ │ ├── manager.go
│ │ └── pods_controller.go
│ └── utils
│ │ └── utils.go
│ ├── log
│ └── logger.go
│ └── process
│ ├── process_linux.go
│ └── process_other.go
├── opampserver
├── LICENSE
├── README.md
├── go.mod
├── go.sum
├── pkg
│ ├── connection
│ │ ├── conncache.go
│ │ ├── remoteconfig.go
│ │ ├── remoteconfig_test.go
│ │ └── types.go
│ ├── sdkconfig
│ │ ├── collectorsgroup_controller.go
│ │ ├── configresolvers
│ │ │ └── resourceattributes.go
│ │ ├── configsections
│ │ │ ├── instrumentationconfig.go
│ │ │ ├── instrumentationlibraries.go
│ │ │ ├── sdk.go
│ │ │ └── types.go
│ │ ├── instrumentationconfigs_controller.go
│ │ └── sdkconfig.go
│ └── server
│ │ ├── handlers.go
│ │ ├── server.go
│ │ └── utils.go
└── protobufs
│ ├── anyvalue.pb.go
│ └── opamp.pb.go
├── operator
├── .dockerignore
├── .gitignore
├── .golangci.yml
├── DEVELOPMENT.md
├── Dockerfile
├── Dockerfile.rhel
├── LICENSE
├── Makefile
├── PROJECT
├── README.md
├── api
│ └── v1alpha1
│ │ ├── groupversion_info.go
│ │ ├── odigos_types.go
│ │ └── zz_generated.deepcopy.go
├── bundle.Dockerfile
├── bundle
│ ├── manifests
│ │ ├── odigos-operator-controller-manager-metrics-service_v1_service.yaml
│ │ ├── odigos-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ ├── odigos-operator-odigos-editor-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ ├── odigos-operator-odigos-version-bccd424bcm_v1_configmap.yaml
│ │ ├── odigos-operator-odigos-version-db9k7g76mc_v1_configmap.yaml
│ │ ├── odigos-operator-odigos-version-m5529f26df_v1_configmap.yaml
│ │ ├── odigos-operator-odigos-version-mk99cdcf27_v1_configmap.yaml
│ │ ├── odigos-operator-odigos-version-t9g2c28b4f_v1_configmap.yaml
│ │ ├── odigos-operator-odigos-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml
│ │ ├── odigos-operator.clusterserviceversion.yaml
│ │ └── operator.odigos.io_odigos.yaml
│ ├── metadata
│ │ └── annotations.yaml
│ └── tests
│ │ └── scorecard
│ │ └── config.yaml
├── cmd
│ └── main.go
├── config
│ ├── crd
│ │ ├── bases
│ │ │ └── operator.odigos.io_odigos.yaml
│ │ ├── kustomization.yaml
│ │ └── kustomizeconfig.yaml
│ ├── default
│ │ ├── kustomization.yaml
│ │ ├── manager_metrics_patch.yaml
│ │ └── metrics_service.yaml
│ ├── manager
│ │ ├── kustomization.yaml
│ │ └── manager.yaml
│ ├── manifests
│ │ ├── bases
│ │ │ └── odigos-operator.clusterserviceversion.yaml
│ │ └── kustomization.yaml
│ ├── network-policy
│ │ ├── allow-metrics-traffic.yaml
│ │ └── kustomization.yaml
│ ├── prometheus
│ │ ├── kustomization.yaml
│ │ └── monitor.yaml
│ ├── rbac
│ │ ├── kustomization.yaml
│ │ ├── leader_election_role.yaml
│ │ ├── leader_election_role_binding.yaml
│ │ ├── metrics_auth_role.yaml
│ │ ├── metrics_auth_role_binding.yaml
│ │ ├── metrics_reader_role.yaml
│ │ ├── odigos_editor_role.yaml
│ │ ├── odigos_viewer_role.yaml
│ │ ├── role.yaml
│ │ ├── role_binding.yaml
│ │ └── service_account.yaml
│ ├── samples
│ │ ├── kustomization.yaml
│ │ └── operator_v1alpha1_odigos.yaml
│ └── scorecard
│ │ ├── bases
│ │ └── config.yaml
│ │ ├── kustomization.yaml
│ │ └── patches
│ │ ├── basic.config.yaml
│ │ └── olm.config.yaml
├── example-odigos.yaml
├── go.mod
├── go.sum
├── hack
│ └── boilerplate.go.txt
├── internal
│ └── controller
│ │ ├── odigos_controller.go
│ │ ├── odigos_controller_test.go
│ │ └── suite_test.go
└── test
│ ├── e2e
│ ├── e2e_suite_test.go
│ └── e2e_test.go
│ └── utils
│ └── utils.go
├── procdiscovery
├── LICENSE
├── go.mod
├── go.sum
└── pkg
│ ├── inspectors
│ ├── dotnet
│ │ └── dotnet.go
│ ├── golang
│ │ └── golang.go
│ ├── java
│ │ └── java.go
│ ├── langdetect.go
│ ├── mysql
│ │ └── mysql.go
│ ├── nginx
│ │ └── nginx.go
│ ├── nodejs
│ │ └── nodejs.go
│ ├── php
│ │ └── php.go
│ ├── postgres
│ │ └── postgres.go
│ ├── python
│ │ └── python.go
│ ├── redis
│ │ └── redis.go
│ ├── ruby
│ │ └── ruby.go
│ ├── rust
│ │ └── rust.go
│ └── utils
│ │ └── inspectUtils.go
│ ├── libc
│ └── utils.go
│ └── process
│ ├── process.go
│ ├── process_test.go
│ ├── utils.go
│ └── utils_test.go
├── profiles
├── LICENSE
├── aggregators
│ ├── greatwall.go
│ └── kratos.go
├── allprofiles.go
├── attributes
│ ├── categoryattributes.go
│ ├── codeattributes.go
│ ├── copyscope.go
│ ├── hostnameaspodname.go
│ ├── payloadcollection.go
│ ├── queryoperationdetector.go
│ ├── reducespannamecardinality.go
│ └── semconvupgrader.go
├── go.mod
├── go.sum
├── instrumentation
│ ├── concurentagents.go
│ ├── dotnet_distro.go
│ ├── envvar_injection.go
│ ├── java-distro.go
│ └── mount-method.go
├── manifests
│ ├── category-attributes.yaml
│ ├── code-attributes.yaml
│ ├── copy-scope.yaml
│ ├── db-payload-collection.yaml
│ ├── full-payload-collection.yaml
│ ├── hostname-as-podname.yaml
│ ├── java-ebpf-instrumentations.yaml
│ ├── legacy-dotnet-instrumentation.yaml
│ ├── query-operation-detector.yaml
│ ├── reduce-span-name-cardinality.yaml
│ ├── render.go
│ ├── semconv.yaml
│ └── small-batches.yaml
├── pipeline
│ └── smallbatches.go
├── profile
│ └── profile.go
└── sizing
│ └── sizing.go
├── scheduler
├── .dockerignore
├── .gitignore
├── LICENSE
├── Makefile
├── PROJECT
├── clusterinfo
│ └── clusterinfo.go
├── cmd
│ └── main.go
├── controllers
│ ├── clustercollectorsgroup
│ │ ├── common.go
│ │ ├── destinations_controller.go
│ │ ├── manager.go
│ │ ├── odigosconfig_controller.go
│ │ └── resource_config.go
│ ├── nodecollectorsgroup
│ │ ├── clustercollectorsgroup_controller.go
│ │ ├── common.go
│ │ ├── instrumentationconfig_controller.go
│ │ ├── manager.go
│ │ └── odigosconfig_controller.go
│ ├── odigosconfig
│ │ ├── manager.go
│ │ ├── odigosconfig_controller.go
│ │ ├── profileutils.go
│ │ └── utils.go
│ ├── odigospro
│ │ ├── manager.go
│ │ └── odigospro_controller.go
│ └── suite_test.go
├── go.mod
├── go.sum
└── hack
│ └── boilerplate.go.txt
├── scripts
├── cli-docgen
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── install.sh
├── rbac-docgen
│ ├── go.mod
│ ├── go.sum
│ └── main.go
└── release-charts.sh
├── tests-infrastructure
└── terraform
│ ├── aks
│ ├── main.tf
│ ├── outputs.tf
│ ├── provider.tf
│ └── variables.tf
│ └── eks
│ ├── main.tf
│ ├── outputs.tf
│ ├── provider.tf
│ └── variables.tf
└── tests
├── backpressure-exporter.yaml
├── chaos
├── README.md
├── common
│ └── install_chaos_mesh.sh
├── experiments
│ └── network-latency.yaml
└── network-latency
│ └── leader-election
│ └── chainsaw-test.yaml
├── common
├── apply
│ ├── add-simple-trace-db-destination.yaml
│ ├── generate-traffic-job.yaml
│ ├── install-jaeger.yaml
│ ├── install-simple-demo.yaml
│ ├── instrument-default-ns.yaml
│ ├── kind-config.yaml
│ └── simple-trace-db-deployment.yaml
├── assert-multiple-yaml-files.sh
├── assert
│ ├── jaeger-installed.yaml
│ ├── node-odiglet-label.yaml
│ ├── odigos-installed.yaml
│ ├── odigos-upgraded.yaml
│ ├── pipeline-ready.yaml
│ ├── simple-demo-installed.yaml
│ ├── simple-demo-instrumented-full.yaml
│ ├── simple-demo-instrumented.yaml
│ ├── simple-demo-runtime-detected.yaml
│ └── simple-trace-db-running.yaml
├── assert_collector_metrics_from_ui.sh
├── assert_config_value.sh
├── assert_odigos_uninstalled.sh
├── assert_pipeline_pods_ready.sh
├── queries
│ ├── context-propagation-reported.yaml
│ ├── context-propagation.yaml
│ ├── resource-attributes.yaml
│ ├── span-attributes-reported.yaml
│ ├── span-attributes.yaml
│ ├── wait-for-trace-reported.yaml
│ └── wait-for-trace.yaml
├── simple_trace_db_query_runner.sh
└── verify_odigos_installation.sh
├── debug-exporter.yaml
├── dynamic-exporter.yaml
├── e2e
├── README.md
├── cli-upgrade
│ ├── .gitignore
│ └── chainsaw-test.yaml
├── env-injection
│ ├── 01-assert-apps-installed.yaml
│ ├── 01-assert-env-vars.yaml
│ ├── 01-assert-runtime-detected.yaml
│ ├── 01-install-test-apps.yaml
│ ├── 02-assert-env-vars.yaml
│ ├── 03-assert-env-vars.yaml
│ └── chainsaw-test.yaml
├── helm-chart
│ └── chainsaw-test.yaml
├── source
│ ├── 01-sources.yaml
│ ├── 01-workloads.yaml
│ ├── 02-workloads.yaml
│ ├── README.md
│ ├── chainsaw-test.yaml
│ └── wait_for_rollout.sh
├── ui
│ └── chainsaw-test.yaml
├── webhooks
│ ├── chainsaw-test.yaml
│ ├── defaulting-01-assert-source-without-labels.yaml
│ ├── defaulting-01-source-without-labels.yaml
│ ├── defaulting-02-source-with-labels.yaml
│ ├── defaulting-03-assert-source-with-incorrect-labels.yaml
│ ├── defaulting-03-source-with-incorrect-labels.yaml
│ ├── defaulting-04-assert-finalizer.yaml
│ ├── defaulting-04-finalizer.yaml
│ ├── defaulting-05-assert-disabled-finalizer.yaml
│ ├── defaulting-05-assert-enabled-finalizer.yaml
│ ├── defaulting-05-disabled-finalizer.yaml
│ ├── migration-01-assert-source-with-old-finalizer.yaml
│ ├── migration-01-source-with-old-finalizer.yaml
│ ├── migration-02-assert-source-with-old-finalizer.yaml
│ ├── migration-02-source-with-old-finalizer.yaml
│ ├── validating-01-normal-source.yaml
│ ├── validating-02-excluded-source.yaml
│ ├── validating-03-namespace-source.yaml
│ ├── validating-04-duplicate-normal-source.yaml
│ ├── validating-05-duplicate-excluded-source.yaml
│ ├── validating-06-duplicate-namespace-source.yaml
│ ├── validating-07-valid-workload-existing-ns-source.yaml
│ ├── validating-08-invalid-namespace-name-source.yaml
│ ├── validating-09-invalid-workload-kind-source.yaml
│ ├── validating-10-namespace-workload-namespace-source.yaml
│ ├── validating-action-11-no-config.yaml
│ ├── validating-action-12-multi-config.yaml
│ ├── validating-action-13-addClusterInfo.yaml
│ ├── validating-action-14-deleteAttribute.yaml
│ ├── validating-action-15-renameAttribute.yaml
│ └── validating-action-16-piiMasking.yaml
└── workload-lifecycle
│ ├── 01-assert-apps-installed.yaml
│ ├── 01-assert-instrumented.yaml
│ ├── 01-assert-runtime-detected.yaml
│ ├── 01-assert-workloads.yaml
│ ├── 01-generate-traffic.yaml
│ ├── 01-install-test-apps.yaml
│ ├── 01-wait-for-trace.yaml
│ ├── 02-assert-ic-service-names.yaml
│ ├── 02-assert-workload-update.yaml
│ ├── 02-sources-reported-names.yaml
│ ├── 02-update-workload-manifests.yaml
│ ├── 02-wait-for-trace.yaml
│ ├── 03-assert-action-created.yaml
│ ├── 03-create-action.yaml
│ ├── 03-wait-for-trace.yaml
│ ├── README.md
│ ├── chainsaw-test.yaml
│ └── services
│ ├── cpp-http-server
│ ├── Dockerfile
│ └── server.cpp
│ ├── dotnet-http-server
│ ├── Program.cs
│ ├── dotnet-http-server.csproj
│ ├── net6-glibc.Dockerfile
│ ├── net6-musl.Dockerfile
│ ├── net8-glibc.Dockerfile
│ ├── net8-musl.Dockerfile
│ └── obj
│ │ ├── dotnet-http-server.csproj.nuget.dgspec.json
│ │ ├── dotnet-http-server.csproj.nuget.g.props
│ │ ├── dotnet-http-server.csproj.nuget.g.targets
│ │ ├── project.assets.json
│ │ └── project.nuget.cache
│ ├── java-http-server
│ ├── java-azul.Dockerfile
│ ├── java-latest-version.Dockerfile
│ ├── java-old-version.Dockerfile
│ ├── java-supported-docker-env.Dockerfile
│ ├── java-supported-manifest-env.Dockerfile
│ ├── java-supported-version.Dockerfile
│ ├── mvnw
│ ├── mvnw.cmd
│ ├── pom.xml
│ ├── pom11.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── dev
│ │ │ └── keyval
│ │ │ └── kvshop
│ │ │ └── frontend
│ │ │ ├── FrontendApplication.java
│ │ │ └── HelloController.java
│ │ └── resources
│ │ └── application.properties
│ ├── nodejs-http-server
│ ├── .dockerignore
│ ├── dockerfile-env.Dockerfile
│ ├── execute_before.js
│ ├── index.js
│ ├── latest-version.Dockerfile
│ ├── manifest-env.Dockerfile
│ ├── minimum-version.Dockerfile
│ ├── package.json
│ ├── unsupported-version.Dockerfile
│ ├── very-old-version.Dockerfile
│ └── yarn.lock
│ └── python-http-server
│ ├── Dockerfile.python-alpine
│ ├── Dockerfile.python-latest
│ ├── Dockerfile.python-min-version
│ ├── Dockerfile.python-not-supported-version
│ ├── Dockerfile.python-other-agent
│ ├── entrypoint.sh
│ ├── manage.py
│ ├── myapp
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
│ ├── myapp_core
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── proto
│ │ ├── __init__.py
│ │ ├── example.proto
│ │ ├── example_pb2.py
│ │ └── example_pb2_legacy.py
│ └── views.py
│ ├── requirements-legacy.txt
│ └── requirements.txt
└── nop-exporter.yaml
/.dockerignore:
--------------------------------------------------------------------------------
1 | frontend/webapp/node_modules
2 | .git/
3 | Dockerfile
4 | odiglet/Dockerfile
5 | odiglet/base.Dockerfile
6 | odiglet/debug.Dockerfile
7 | tests # not needed in context for odigos components builds
8 | go.work
9 | go.work.sum
10 | gha-creds-*.json
11 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | #####################################################
2 | #
3 | # List of approvers for this repository
4 | #
5 | #####################################################
6 | #
7 | #
8 | # Learn about CODEOWNERS file format:
9 | # https://help.github.com/en/articles/about-code-owners
10 | #
11 |
12 | * @keyval-dev/odigos-maintainers
--------------------------------------------------------------------------------
/.github/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | Odigos follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md).
4 |
--------------------------------------------------------------------------------
/.github/actions/build/cli/action.yml:
--------------------------------------------------------------------------------
1 | name: "Build Odigos CLI"
2 | description: "Build odigos CLI binary"
3 | runs:
4 | using: "composite"
5 | steps:
6 | - name: Build
7 | shell: bash
8 | run: |
9 | cd cli
10 | go build -tags=embed_manifests -o odigos
11 | chmod +x odigos
12 |
--------------------------------------------------------------------------------
/.github/workflows/chaos-tests.yml:
--------------------------------------------------------------------------------
1 | # This pipeline was created in order to allow manual triggering of the job (Build images + run)
2 | name: Run chaos tests
3 |
4 | on:
5 | workflow_dispatch: # Manual trigger
6 |
7 | permissions:
8 | id-token: write
9 | contents: read
10 |
11 | jobs:
12 | build-images:
13 | uses: ./.github/workflows/build-dev-images.yml
14 |
15 | chaos-tests:
16 | needs: build-images
17 | runs-on: warp-ubuntu-latest-x64-8x-spot
18 | steps:
19 | - name: Run chaos-tests
20 | uses: ./.github/actions/chaos-tests
21 | env:
22 | GITHUB_SHA: ${{ github.sha }}
--------------------------------------------------------------------------------
/.github/workflows/go-mod-tidy.yml:
--------------------------------------------------------------------------------
1 | name: go mod tidy
2 | on:
3 | merge_group:
4 | pull_request:
5 |
6 | jobs:
7 | go-mod-tidy:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - name: Checkout Repo
11 | uses: actions/checkout@v4
12 | - uses: actions/setup-go@v5
13 | with:
14 | go-version: "1.24"
15 | - name: run make go-mod-tidy
16 | run: make go-mod-tidy
17 | - name: Check clean repository
18 | run: make check-clean-work-tree
19 |
--------------------------------------------------------------------------------
/.github/workflows/golangci-lint.yml:
--------------------------------------------------------------------------------
1 | name: golangci-lint
2 | on:
3 | pull_request:
4 |
5 | permissions:
6 | contents: read
7 |
8 | jobs:
9 | golangci:
10 | strategy:
11 | matrix:
12 | modules: [common, k8sutils, profiles, destinations, procdiscovery]
13 | name: lint
14 | runs-on: ubuntu-latest
15 | steps:
16 | - uses: actions/checkout@v4
17 | - uses: actions/setup-go@v5
18 | with:
19 | go-version: "1.24.0"
20 | - name: golangci-lint
21 | uses: golangci/golangci-lint-action@v8
22 | with:
23 | version: v2.1.6
24 | working-directory: ${{ matrix.modules }}
25 |
--------------------------------------------------------------------------------
/.github/workflows/helm-lint.yml:
--------------------------------------------------------------------------------
1 | name: Lint Charts
2 |
3 | on:
4 | pull_request:
5 | paths:
6 | - helm/**
7 |
8 | jobs:
9 | lint-charts:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout
13 | uses: actions/checkout@v4
14 | - name: Install Helm
15 | uses: azure/setup-helm@v4
16 | - name: Lint Charts
17 | run: |
18 | shopt -s extglob
19 | helm lint helm/!(*.md)
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | dist/
3 | node_modules
4 | .DS_Store
5 | go.work.sum
6 | go.work
7 | cli/odigos
8 | .venv
9 | **/__pycache__/
10 | **/*.pyc
11 | serving-certs/
12 | **/.tools/
13 | **/LICENSES
14 | /odigos
15 | gha-creds-*.json
16 | artifacts/
17 | preflight*
18 |
19 | **.tfstate
20 | **.tfstate.backup
21 | **.terraform**
22 |
23 | *.log
24 | *.logs
25 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.words": [
3 | "Chronosphere",
4 | "Ebpf",
5 | "instrumentor",
6 | "odigos",
7 | "Otel"
8 | ],
9 |
10 | "go.buildTags": "embed_manifests",
11 | }
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Reporting a Vulnerability
4 |
5 | To report a vulnerability please contact support@keyval.dev
6 |
--------------------------------------------------------------------------------
/agents/nodejs-native-community/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/agents/nodejs-native-community/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@odigos/opentelemetry-node-native-community",
3 | "version": "0.0.1",
4 | "main": "index.js",
5 | "dependencies": {
6 | "@odigos/opentelemetry-node": "file:../../../opentelemetry-node"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/agents/python/configurator/__init__.py:
--------------------------------------------------------------------------------
1 | import opentelemetry.sdk._configuration as sdk_config
2 | from initializer.components import initialize_components
3 |
4 |
5 | MINIMUM_PYTHON_SUPPORTED_VERSION = (3, 8)
6 |
7 | class OdigosPythonConfigurator(sdk_config._BaseConfigurator):
8 | def _configure(self, **kwargs):
9 | initialize_components(trace_exporters=True)
--------------------------------------------------------------------------------
/api/.gitignore:
--------------------------------------------------------------------------------
1 | bin
2 | vendor
--------------------------------------------------------------------------------
/api/hack/boilerplate.go.txt:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
--------------------------------------------------------------------------------
/api/hack/tools.go:
--------------------------------------------------------------------------------
1 | //go:build tools
2 | // +build tools
3 |
4 | // This package imports things required by build scripts, to force `go mod` to see them as dependencies
5 | package tools
6 |
7 | import _ "k8s.io/code-generator"
8 |
--------------------------------------------------------------------------------
/api/k8sconsts/agent.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | OdigosAgentsDirectory = "/var/odigos"
5 | OdigosAgentMountVolumeName = "odigos-agent"
6 | )
7 |
--------------------------------------------------------------------------------
/api/k8sconsts/cli.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | // Diagnose command
4 | const (
5 | LogsDir = "Logs"
6 | CRDsDir = "CRDs"
7 | ProfileDir = "Profile"
8 | MetricsDir = "Metrics"
9 | )
10 |
--------------------------------------------------------------------------------
/api/k8sconsts/client.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | // These are currently "magic" numbers that we are using to set the QPS and Burst for the Kubernetes client.
5 | // They allow for better performance relative to the default values, but with the cost of potentially
6 | // overloading the Kubernetes API server.
7 | // More info about these can be found in https://kubernetes.io/docs/reference/config-api/apiserver-eventratelimit.v1alpha1/
8 | K8sClientDefaultQPS = 100
9 | K8sClientDefaultBurst = 100
10 | )
11 |
--------------------------------------------------------------------------------
/api/k8sconsts/collectors.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | type CollectorRole string
4 |
5 | const (
6 | CollectorsRoleClusterGateway CollectorRole = "CLUSTER_GATEWAY"
7 | CollectorsRoleNodeCollector CollectorRole = "NODE_COLLECTOR"
8 | )
9 |
10 | const OdigosCollectorConfigMapProviderScheme = "k8scm"
11 |
--------------------------------------------------------------------------------
/api/k8sconsts/device.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | // the name of the device that only mounts the odigos agents root directory,
5 | // allowing any agent to be access it's files.
6 | // it would be more ideal to only mount what is needed,
7 | // but it's not desirable to have tons of different devices for each case.
8 | OdigosGenericDeviceName = "instrumentation.odigos.io/generic"
9 | )
10 |
--------------------------------------------------------------------------------
/api/k8sconsts/envvars.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | OdigosEnvVarNamespace = "ODIGOS_WORKLOAD_NAMESPACE"
5 | OdigosEnvVarContainerName = "ODIGOS_CONTAINER_NAME"
6 | OdigosEnvVarPodName = "ODIGOS_POD_NAME"
7 | OdigosEnvVarDistroName = "ODIGOS_DISTRO_NAME"
8 | CustomContainerRuntimeSocketEnvVar = "CONTAINER_RUNTIME_SOCK"
9 | )
10 |
11 | func OdigosInjectedEnvVars() []string {
12 | return []string{
13 | OdigosEnvVarNamespace,
14 | OdigosEnvVarContainerName,
15 | OdigosEnvVarPodName,
16 | OdigosEnvVarDistroName,
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/api/k8sconsts/keyvalproxy.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | OdigosCloudProxyVersion = "v0.11.0"
5 | KeyvalProxyServiceName = "odigos-cloud-k8s"
6 | KeyvalProxyImage = "odigos-proxy-k8s"
7 | KeyvalProxyAppName = "odigos-cloud-proxy"
8 | KeyvalProxyDeploymentName = "odigos-cloud-proxy"
9 | KeyvalProxyServiceAccountName = "odigos-cloud-proxy"
10 | KeyvalProxyRoleName = "odigos-cloud-proxy"
11 | KeyvalProxyRoleBindingName = "odigos-cloud-proxy"
12 | KeyvalProxyClusterRoleName = "odigos-cloud-proxy"
13 | KeyvalProxyClusterRoleBindingName = "odigos-cloud-proxy"
14 | )
15 |
--------------------------------------------------------------------------------
/api/k8sconsts/node.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | NodeNameEnvVar = "NODE_NAME"
5 | NodeIPEnvVar = "NODE_IP"
6 | )
7 |
--------------------------------------------------------------------------------
/api/k8sconsts/odigos_system.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | OdigosSystemLabelKey = "odigos.io/system-object"
5 | OdigosSystemConfigLabelKey = "odigos.io/config"
6 | OdigosSystemLabelValue = "true"
7 | )
8 |
--------------------------------------------------------------------------------
/api/k8sconsts/odigospro.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | OdigosProSecretName = "odigos-pro"
5 | OdigosCloudApiKeySecretKey = "odigos-cloud-api-key"
6 | OdigosOnpremTokenSecretKey = "odigos-onprem-token"
7 | OdigosCloudTokenEnvName = "ODIGOS_CLOUD_TOKEN"
8 | OdigosOnpremTokenEnvName = "ODIGOS_ONPREM_TOKEN"
9 | OdigosProSecretTokenKeyName = "odigos-onprem-token"
10 | OdigosCentralSecretName = "odigos-central"
11 | )
12 |
--------------------------------------------------------------------------------
/api/k8sconsts/ui.go:
--------------------------------------------------------------------------------
1 | package k8sconsts
2 |
3 | const (
4 | UIImage = "odigos-ui"
5 | UIImageUBI9 = "odigos-ui-ubi9"
6 | UIServiceName = "ui"
7 | UIDeploymentName = "odigos-ui"
8 | UIAppLabelValue = "odigos-ui"
9 | UIContainerName = "ui"
10 | UIServiceAccountName = "odigos-ui"
11 | )
12 |
--------------------------------------------------------------------------------
/api/odigos/v1alpha1/instrumentationrules/http_headers.go:
--------------------------------------------------------------------------------
1 | package instrumentationrules
2 |
3 | // +kubebuilder:object:generate=true
4 | // +kubebuilder:deepcopy-gen=true
5 | type HttpHeadersCollection struct {
6 |
7 | // Limit payload collection to specific header keys.
8 | HeaderKeys []string `json:"headerKeys,omitempty"`
9 | }
10 |
--------------------------------------------------------------------------------
/api/render_test.go:
--------------------------------------------------------------------------------
1 | package api
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | )
8 |
9 | func TestGetCRD(t *testing.T) {
10 | crds, err := GetCRDs([]string{"odigos.io_instrumentationconfigs.yaml"})
11 | assert.NoError(t, err)
12 | assert.NotEmpty(t, crds)
13 | for _, crd := range crds {
14 | assert.NotEqual(t, "instrumentationconfigs.odigos.io", crd.Name)
15 | }
16 | }
--------------------------------------------------------------------------------
/autoscaler/.dockerignore:
--------------------------------------------------------------------------------
1 | # More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file
2 | # Ignore build and test binaries.
3 | bin/
4 | testbin/
5 |
--------------------------------------------------------------------------------
/autoscaler/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 | bin
9 | testbin/*
10 |
11 | # Test binary, build with `go test -c`
12 | *.test
13 |
14 | # Output of the go coverage tool, specifically when used with LiteIDE
15 | *.out
16 |
17 | # Kubernetes Generated files - skip generated files, except for vendored files
18 |
19 | !vendor/**/zz_generated.*
20 |
21 | # editor and IDE paraphernalia
22 | .idea
23 | *.swp
24 | *.swo
25 | *~
26 | __debug_bin*
--------------------------------------------------------------------------------
/autoscaler/controllers/actions/sampling/groupbytrace.go:
--------------------------------------------------------------------------------
1 | package sampling
2 |
3 | const (
4 | DefaultWaitDuraiton = "30s"
5 | )
6 |
7 | type GroupByTraceConfig struct {
8 | WaitDuration string `json:"wait_duration"`
9 | }
10 |
--------------------------------------------------------------------------------
/autoscaler/controllers/actions/sampling/rule.go:
--------------------------------------------------------------------------------
1 | package sampling
2 |
3 | type RuleDetails interface {
4 | Validate() error
5 | }
6 |
--------------------------------------------------------------------------------
/autoscaler/controllers/common/hash.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | import (
4 | "crypto/sha256"
5 | "encoding/base64"
6 | )
7 |
8 | func Sha256Hash(value string) string {
9 | h := sha256.New()
10 | h.Write([]byte(value))
11 | b := h.Sum(nil)
12 | return base64.StdEncoding.EncodeToString(b)
13 | }
14 |
--------------------------------------------------------------------------------
/autoscaler/controllers/controller_config/controller_config.go:
--------------------------------------------------------------------------------
1 | package controllerconfig
2 |
3 | import "k8s.io/apimachinery/pkg/util/version"
4 |
5 | type ControllerConfig struct {
6 | // TODO: this should be removed once the hpa logic uses the feature package for its checks
7 | K8sVersion *version.Version
8 | CollectorImage string
9 |
10 | // TODO: remove this once https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/issues/1026 is handled
11 | OnGKE bool
12 | }
13 |
--------------------------------------------------------------------------------
/autoscaler/hack/boilerplate.go.txt:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
--------------------------------------------------------------------------------
/cli/.gitignore:
--------------------------------------------------------------------------------
1 | vendor/
2 |
3 | dist/
4 |
--------------------------------------------------------------------------------
/cli/.ko.yaml:
--------------------------------------------------------------------------------
1 | builds:
2 | - id: cli
3 | main: "."
4 | ldflags:
5 | - -X github.com/odigos-io/odigos/cli/cmd.OdigosVersion={{ .Env.VERSION }}
6 | - -X github.com/odigos-io/odigos/cli/cmd.OdigosCommit={{ .Env.SHORT_COMMIT }}
7 | - -X github.com/odigos-io/odigos/cli/cmd.OdigosDate={{ .Env.DATE }}
8 | flags:
9 | - -tags=embed_manifests
10 |
--------------------------------------------------------------------------------
/cli/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import "github.com/odigos-io/odigos/cli/cmd"
4 |
5 | func main() {
6 | cmd.Execute()
7 | }
8 |
--------------------------------------------------------------------------------
/cli/pkg/autodetect/eks.go:
--------------------------------------------------------------------------------
1 | package autodetect
2 |
3 | import (
4 | "context"
5 | "strings"
6 | )
7 |
8 | type eksDetector struct{}
9 |
10 | var _ ClusterKindDetector = &eksDetector{}
11 |
12 | func (e eksDetector) Detect(ctx context.Context, args DetectionArguments) bool {
13 | if strings.Contains(args.ServerVersion, "-eks-") {
14 | return true
15 | }
16 |
17 | if strings.HasSuffix(args.ClusterName, ".eksctl.io") {
18 | return true
19 | }
20 |
21 | if strings.HasSuffix(args.ServerEndpoint, "eks.amazonaws.com") {
22 | return true
23 | }
24 |
25 | return false
26 | }
27 |
28 | func (e eksDetector) Kind() Kind {
29 | return KindEKS
30 | }
31 |
--------------------------------------------------------------------------------
/cli/pkg/autodetect/gke.go:
--------------------------------------------------------------------------------
1 | package autodetect
2 |
3 | import (
4 | "context"
5 | "strings"
6 | )
7 |
8 | type gkeDetector struct{}
9 |
10 | var _ ClusterKindDetector = &gkeDetector{}
11 |
12 | func (g gkeDetector) Detect(ctx context.Context, args DetectionArguments) bool {
13 | if strings.Contains(args.ServerVersion, "-gke.") {
14 | return true
15 | }
16 |
17 | if strings.HasPrefix(args.ClusterName, "gke_") {
18 | return true
19 | }
20 |
21 | return false
22 | }
23 |
24 | func (g gkeDetector) Kind() Kind {
25 | return KindGKE
26 | }
27 |
--------------------------------------------------------------------------------
/cli/pkg/autodetect/k3s.go:
--------------------------------------------------------------------------------
1 | package autodetect
2 |
3 | import (
4 | "context"
5 | "strings"
6 | )
7 |
8 | type k3sDetector struct{}
9 |
10 | var _ ClusterKindDetector = &k3sDetector{}
11 |
12 | func (k k3sDetector) Detect(ctx context.Context, args DetectionArguments) bool {
13 | if strings.Contains(args.ServerVersion, "+k3s") {
14 | return true
15 | }
16 |
17 | return false
18 | }
19 |
20 | func (k k3sDetector) Kind() Kind {
21 | return KindK3s
22 | }
23 |
--------------------------------------------------------------------------------
/cli/pkg/autodetect/kindkind.go:
--------------------------------------------------------------------------------
1 | package autodetect
2 |
3 | import (
4 | "context"
5 | "strings"
6 | )
7 |
8 | type kindDetector struct{}
9 |
10 | var _ ClusterKindDetector = &kindDetector{}
11 |
12 | func (k kindDetector) Detect(ctx context.Context, args DetectionArguments) bool {
13 | if strings.HasPrefix(args.ClusterName, "kind-") || strings.HasPrefix(args.CurrentContext, "kind-") {
14 | return true
15 | }
16 |
17 | return false
18 | }
19 |
20 | func (k kindDetector) Kind() Kind {
21 | return KindKind
22 | }
23 |
--------------------------------------------------------------------------------
/cli/pkg/autodetect/minikube.go:
--------------------------------------------------------------------------------
1 | package autodetect
2 |
3 | import "context"
4 |
5 | type minikubeDetector struct{}
6 |
7 | var _ ClusterKindDetector = &minikubeDetector{}
8 |
9 | func (m minikubeDetector) Detect(ctx context.Context, args DetectionArguments) bool {
10 | if args.ClusterName == "minikube" {
11 | return true
12 | }
13 |
14 | if args.CurrentContext == "minikube" {
15 | return true
16 | }
17 |
18 | return false
19 | }
20 |
21 | func (m minikubeDetector) Kind() Kind {
22 | return KindMinikube
23 | }
24 |
--------------------------------------------------------------------------------
/cli/pkg/autodetect/openshift.go:
--------------------------------------------------------------------------------
1 | package autodetect
2 |
3 | import "context"
4 |
5 | type openshiftDetector struct{}
6 |
7 | var _ ClusterKindDetector = &openshiftDetector{}
8 |
9 | func (o openshiftDetector) Detect(ctx context.Context, args DetectionArguments) bool {
10 | apiList, err := args.KubeClient.Discovery().ServerGroups()
11 | if err != nil {
12 | return false
13 | }
14 |
15 | apiGroups := apiList.Groups
16 | for i := 0; i < len(apiGroups); i++ {
17 | if apiGroups[i].Name == "route.openshift.io" {
18 | return true
19 | }
20 | }
21 |
22 | return false
23 | }
24 |
25 | func (o openshiftDetector) Kind() Kind {
26 | return KindOpenShift
27 | }
28 |
--------------------------------------------------------------------------------
/cli/pkg/labels/labels.go:
--------------------------------------------------------------------------------
1 | package labels
2 |
3 | import (
4 | "github.com/odigos-io/odigos/api/k8sconsts"
5 | )
6 |
7 | var OdigosSystem = map[string]string{
8 | k8sconsts.OdigosSystemLabelKey: k8sconsts.OdigosSystemLabelValue,
9 | }
10 |
--------------------------------------------------------------------------------
/collector/.gitignore:
--------------------------------------------------------------------------------
1 | .tools
2 |
--------------------------------------------------------------------------------
/collector/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM --platform=$BUILDPLATFORM golang:1.24-bullseye AS builder
2 | COPY . /go/src/
3 | WORKDIR /go/src/
4 |
5 | ARG TARGETARCH
6 | RUN GOOS=linux GOARCH=$TARGETARCH make build-odigoscol
7 |
8 | FROM gcr.io/distroless/base:latest
9 | COPY --from=builder /go/src/odigosotelcol/odigosotelcol /odigosotelcol
10 | CMD ["/odigosotelcol"]
--------------------------------------------------------------------------------
/collector/distribution/odigos-otelcol/odigos-otelcol.conf:
--------------------------------------------------------------------------------
1 | # systemd environment file for the odiogs-otelcol service
2 |
3 | # Command-line options for the odiogs-otelcol service.
4 | # Run `/usr/bin/odiogs-otelcol --help` to see all available options.
5 | OTELCOL_OPTIONS="--config=/etc/odigos-otelcol/config.yaml"
6 |
--------------------------------------------------------------------------------
/collector/distribution/odigos-otelcol/odigos-otelcol.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Odigos Distribution of the OpenTelemetry Collector
3 | After=network.target
4 |
5 | [Service]
6 | EnvironmentFile=/etc/odigos-otelcol/odigos-otelcol.conf
7 | ExecStart=/usr/bin/odigos-otelcol $OTELCOL_OPTIONS
8 | KillMode=mixed
9 | Restart=on-failure
10 | Type=simple
11 | User=odigos
12 | Group=odigos
13 |
14 | [Install]
15 | WantedBy=multi-user.target
16 |
--------------------------------------------------------------------------------
/collector/distribution/odigos-otelcol/postinstall.sh:
--------------------------------------------------------------------------------
1 | if command -v systemctl >/dev/null 2>&1; then
2 | systemctl enable odigos-otelcol.service
3 | systemctl start odigos-otelcol.service
4 | fi
5 |
--------------------------------------------------------------------------------
/collector/distribution/odigos-otelcol/preinstall.sh:
--------------------------------------------------------------------------------
1 | getent passwd odigos >/dev/null || useradd --system --user-group --no-create-home --shell /sbin/nologin odigos
2 |
--------------------------------------------------------------------------------
/collector/distribution/odigos-otelcol/preremove.sh:
--------------------------------------------------------------------------------
1 | if command -v systemctl >/dev/null 2>&1; then
2 | systemctl stop odigos-otelcol.service
3 | systemctl disable odigos-otelcol.service
4 | fi
5 |
--------------------------------------------------------------------------------
/collector/examples/test-config.yaml:
--------------------------------------------------------------------------------
1 | receivers:
2 | otlp:
3 | protocols:
4 | grpc:
5 |
6 | processors:
7 | batch:
8 |
9 | exporters:
10 | # NOTE: Prior to v0.86.0 use `logging` instead of `debug`.
11 | debug:
12 | verbosity: detailed
13 | otlp/jaeger:
14 | endpoint: localhost:14317
15 | tls:
16 | insecure: true
17 |
18 | service:
19 | pipelines:
20 | traces:
21 | receivers: [otlp]
22 | processors: [batch]
23 | exporters: [otlp/jaeger, debug]
24 | telemetry:
25 | logs:
26 | level: debug
--------------------------------------------------------------------------------
/collector/exporters/azureblobstorageexporter/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
--------------------------------------------------------------------------------
/collector/exporters/azureblobstorageexporter/README.md:
--------------------------------------------------------------------------------
1 | # Azure Blob Storage
2 |
3 | TODO: Add a description of the exporter here.
--------------------------------------------------------------------------------
/collector/exporters/azureblobstorageexporter/data_writer.go:
--------------------------------------------------------------------------------
1 | package azureblobstorageexporter
2 |
3 | import "context"
4 |
5 | type DataWriter interface {
6 | WriteBuffer(ctx context.Context, buf []byte, config *Config, metadata string, format string) error
7 | }
8 |
--------------------------------------------------------------------------------
/collector/exporters/azureblobstorageexporter/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package azureblobstorageexporter
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/exporters/azureblobstorageexporter/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("azureblobstorage")
11 | ScopeName = "github.com/open-telemetry/opentelemetry-collector-contrib/odigos/exporter/azureblobstorageexporter"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | LogsStability = component.StabilityLevelBeta
17 | )
18 |
--------------------------------------------------------------------------------
/collector/exporters/azureblobstorageexporter/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: azureblobstorage
2 |
3 | status:
4 | class: exporter
5 | stability:
6 | beta: [traces, logs]
7 | distributions: [contrib]
8 | codeowners:
9 | active: [edeNFed]
10 |
11 | tests:
12 | expect_consumer_error: true
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/README.md:
--------------------------------------------------------------------------------
1 | # Google Cloud Storage Exporter
2 |
3 | TODO: Add a description of the exporter here.
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/config.go:
--------------------------------------------------------------------------------
1 | package googlecloudstorageexporter
2 |
3 | import (
4 | "go.uber.org/zap"
5 | )
6 |
7 | type GCSUploadConfig struct {
8 | GCSBucket string `mapstructure:"bucket"`
9 | GCSPrefix string `mapstructure:"prefix"`
10 | GCSPartition string `mapstructure:"partition"`
11 | FilePrefix string `mapstructure:"file_prefix"`
12 | }
13 |
14 | // Config contains the main configuration options for the awskinesis exporter
15 | type Config struct {
16 | GCSUploader GCSUploadConfig `mapstructure:"gcs"`
17 | MarshalerName string `mapstructure:"marshaler_name"`
18 |
19 | logger *zap.Logger
20 | }
21 |
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/data_writer.go:
--------------------------------------------------------------------------------
1 | package googlecloudstorageexporter
2 |
3 | import "context"
4 |
5 | type DataWriter interface {
6 | WriteBuffer(ctx context.Context, buf []byte, config *Config, metadata string, format string) error
7 | }
8 |
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package googlecloudstorageexporter
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("googlecloudstorage")
11 | ScopeName = "github.com/open-telemetry/opentelemetry-collector-contrib/odigos/exporter/googlecloudstorageexporter"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | LogsStability = component.StabilityLevelBeta
17 | )
18 |
--------------------------------------------------------------------------------
/collector/exporters/googlecloudstorageexporter/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: googlecloudstorage
2 |
3 | status:
4 | class: exporter
5 | stability:
6 | beta: [traces, logs]
7 | distributions: [contrib]
8 | codeowners:
9 | active: [edeNFed]
--------------------------------------------------------------------------------
/collector/exporters/mockdestinationexporter/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
--------------------------------------------------------------------------------
/collector/exporters/mockdestinationexporter/config_test.go:
--------------------------------------------------------------------------------
1 | package mockdestinationexporter
2 |
3 | import (
4 | "testing"
5 |
6 | "github.com/stretchr/testify/assert"
7 | "go.opentelemetry.io/collector/confmap"
8 | )
9 |
10 | func TestUnmarshalDefaultConfig(t *testing.T) {
11 | factory := NewFactory()
12 | cfg := factory.CreateDefaultConfig()
13 | assert.NoError(t, confmap.New().Unmarshal(&cfg))
14 | assert.Equal(t, factory.CreateDefaultConfig(), cfg)
15 | }
16 |
--------------------------------------------------------------------------------
/collector/exporters/mockdestinationexporter/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package mockdestinationexporter
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/exporters/mockdestinationexporter/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("mockdestination")
11 | ScopeName = "github.com/open-telemetry/opentelemetry-collector-contrib/odigos/exporter/mockdestinationexporter"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | MetricsStability = component.StabilityLevelBeta
17 | LogsStability = component.StabilityLevelBeta
18 | )
19 |
--------------------------------------------------------------------------------
/collector/exporters/mockdestinationexporter/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: mockdestination
2 |
3 | status:
4 | class: exporter
5 | stability:
6 | beta: [traces, metrics, logs]
7 | codeowners:
8 | active: [blumamir]
--------------------------------------------------------------------------------
/collector/internal/tools/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
--------------------------------------------------------------------------------
/collector/odigosotelcol/.gitignore:
--------------------------------------------------------------------------------
1 | odigosotelcol
2 |
--------------------------------------------------------------------------------
/collector/odigosotelcol/main_others.go:
--------------------------------------------------------------------------------
1 | // Code generated by "go.opentelemetry.io/collector/cmd/builder". DO NOT EDIT.
2 |
3 | //go:build !windows
4 |
5 | package main
6 |
7 | import "go.opentelemetry.io/collector/otelcol"
8 |
9 | func run(params otelcol.CollectorSettings) error {
10 | return runInteractive(params)
11 | }
12 |
--------------------------------------------------------------------------------
/collector/processors/odigosconditionalattributes/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
2 |
--------------------------------------------------------------------------------
/collector/processors/odigosconditionalattributes/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package odigosconditionalattributes
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/processors/odigosconditionalattributes/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("odigosconditionalattributes")
11 | ScopeName = "odigosconditionalattributes"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | )
17 |
--------------------------------------------------------------------------------
/collector/processors/odigosconditionalattributes/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: odigosconditionalattributes
2 | status:
3 | class: processor
4 | stability:
5 | beta: [traces]
6 | distributions: [contrib]
7 | codeowners:
8 | active: [tamird]
9 |
--------------------------------------------------------------------------------
/collector/processors/odigossamplingprocessor/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
2 |
--------------------------------------------------------------------------------
/collector/processors/odigossamplingprocessor/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package odigossamplingprocessor
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/processors/odigossamplingprocessor/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("odigossampling")
11 | ScopeName = "github.com/open-telemetry/opentelemetry-collector-contrib/odigos/processor/odigossamplingprocessor"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | )
17 |
--------------------------------------------------------------------------------
/collector/processors/odigossamplingprocessor/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: odigossampling
2 |
3 | status:
4 | class: processor
5 | stability:
6 | beta: [traces]
7 | distributions: [contrib]
8 | codeowners:
9 | active: [tamird]
--------------------------------------------------------------------------------
/collector/processors/odigossourcesfilterprocessor/Makefile:
--------------------------------------------------------------------------------
1 | include ../../Makefile.Common
2 |
--------------------------------------------------------------------------------
/collector/processors/odigossourcesfilterprocessor/config.go:
--------------------------------------------------------------------------------
1 | package odigossourcesfilterprocessor
2 |
3 | import (
4 | "go.opentelemetry.io/collector/component"
5 | )
6 |
7 | type Config struct {
8 | MatchConditions []string `mapstructure:"match_conditions"`
9 | }
10 |
11 | var _ component.Config = (*Config)(nil)
12 |
13 | func (cfg *Config) Validate() error {
14 | return nil
15 | }
16 |
--------------------------------------------------------------------------------
/collector/processors/odigossourcesfilterprocessor/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package odigossourcesfilterprocessor
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/processors/odigossourcesfilterprocessor/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("odigossourcesfilter")
11 | ScopeName = "github.com/odigos-io/odigos/processor/odigossourcesfilterprocessor"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | LogsStability = component.StabilityLevelBeta
17 | MetricsStability = component.StabilityLevelBeta
18 | )
19 |
--------------------------------------------------------------------------------
/collector/processors/odigossourcesfilterprocessor/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: odigossourcesfilter
2 | status:
3 | class: processor
4 | stability:
5 | beta: [traces, logs, metrics]
6 | distributions: [contrib]
7 | codeowners:
8 | active: [alon]
9 |
--------------------------------------------------------------------------------
/collector/processors/odigossqldboperationprocessor/README.md:
--------------------------------------------------------------------------------
1 | # SQL DB Operation Processor
2 |
3 | The SQL DB Operation Processor is responsible for detecting the type of SQL operation performed by analyzing the SQL query within a trace. It extracts the query text, checks for common SQL operations (SELECT, INSERT, UPDATE, DELETE, CREATE), and assigns the appropriate operation name to the trace span.
4 |
5 | This processor ensures that each trace contains clear metadata about the database operation performed, enabling better observability and trace analysis.
6 |
--------------------------------------------------------------------------------
/collector/processors/odigossqldboperationprocessor/config.go:
--------------------------------------------------------------------------------
1 | package odigossqldboperationprocessor
2 |
3 | import (
4 | "go.opentelemetry.io/collector/component"
5 | )
6 |
7 | type Config struct {
8 | }
9 |
10 | var _ component.Config = (*Config)(nil)
11 |
12 | func (cfg *Config) Validate() error {
13 |
14 | return nil
15 | }
16 |
--------------------------------------------------------------------------------
/collector/processors/odigossqldboperationprocessor/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package odigossqldboperationprocessor
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/processors/odigossqldboperationprocessor/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("odigossqldboperationprocessor")
11 | ScopeName = "odigossqldboperationprocessor"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelBeta
16 | )
17 |
--------------------------------------------------------------------------------
/collector/processors/odigossqldboperationprocessor/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: odigossqldboperationprocessor
2 | status:
3 | class: processor
4 | stability:
5 | beta: [traces]
6 | distributions: [contrib]
7 | codeowners:
8 | active: [tamird]
9 |
--------------------------------------------------------------------------------
/collector/processors/odigostrafficmetrics/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package odigostrafficmetrics
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/processors/odigostrafficmetrics/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("odigostrafficmetrics")
11 | ScopeName = "github.com/open-telemetry/opentelemetry-collector-contrib/odigos/processor/odigostrafficmetrics"
12 | )
13 |
14 | const (
15 | LogsStability = component.StabilityLevelBeta
16 | MetricsStability = component.StabilityLevelBeta
17 | TracesStability = component.StabilityLevelBeta
18 | )
19 |
--------------------------------------------------------------------------------
/collector/processors/odigosurltemplateprocessor/generated_package_test.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package odigosurltemplateprocessor
4 |
5 | import (
6 | "testing"
7 |
8 | "go.uber.org/goleak"
9 | )
10 |
11 | func TestMain(m *testing.M) {
12 | goleak.VerifyTestMain(m)
13 | }
14 |
--------------------------------------------------------------------------------
/collector/processors/odigosurltemplateprocessor/internal/metadata/generated_status.go:
--------------------------------------------------------------------------------
1 | // Code generated by mdatagen. DO NOT EDIT.
2 |
3 | package metadata
4 |
5 | import (
6 | "go.opentelemetry.io/collector/component"
7 | )
8 |
9 | var (
10 | Type = component.MustNewType("odigosurltemplate")
11 | ScopeName = "github.com/odigos-io/odigos/collector/processor/odigosurltemplateprocessor"
12 | )
13 |
14 | const (
15 | TracesStability = component.StabilityLevelAlpha
16 | )
17 |
--------------------------------------------------------------------------------
/collector/processors/odigosurltemplateprocessor/metadata.yaml:
--------------------------------------------------------------------------------
1 | type: odigosurltemplate
2 | status:
3 | class: processor
4 | stability:
5 | alpha: [traces]
6 | distributions: [odigos]
7 | codeowners:
8 | active: [blumamir]
9 |
--------------------------------------------------------------------------------
/common/Makefile:
--------------------------------------------------------------------------------
1 |
2 | .PHONY: test
3 | test:
4 | go test ./...
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/common/config/testdata/withbaseminimal.yaml:
--------------------------------------------------------------------------------
1 | receivers:
2 | otlp:
3 | protocols:
4 | grpc: {}
5 | http: {}
6 | exporters: {}
7 | processors:
8 | batch: {}
9 | extensions: {}
10 | service:
11 | extensions: []
12 | pipelines: {}
13 |
--------------------------------------------------------------------------------
/common/envOverwrite/originalenv.go:
--------------------------------------------------------------------------------
1 | package envOverwrite
2 |
3 | // Deprecated - left for migration purposes.
4 | // TODO: delete in odigos v1.1
5 | type OriginalEnv map[string]*string
6 |
--------------------------------------------------------------------------------
/common/libc_types.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | // +kubebuilder:validation:Enum=glibc;musl
4 | type LibCType string
5 |
6 | const (
7 | Glibc LibCType = "glibc"
8 | Musl LibCType = "musl"
9 | )
10 |
11 | const LibcTypeDistroParameterName = "LIBC_TYPE"
12 |
--------------------------------------------------------------------------------
/common/mount.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | // Note: this configuration is currently only relevant for k8s,
4 | // but is used in odigosconfig which is declared in the common package.
5 | // We should revisit this decision later on and consider if the config should be k8s specific,
6 | // then move it to the api module.
7 |
8 | // +kubebuilder:validation:Enum=k8s-virtual-device;k8s-host-path
9 | type MountMethod string
10 |
11 | const (
12 | K8sVirtualDeviceMountMethod MountMethod = "k8s-virtual-device"
13 | K8sHostPathMountMethod MountMethod = "k8s-host-path"
14 | )
15 |
--------------------------------------------------------------------------------
/common/signals.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | // +kubebuilder:validation:Enum=LOGS;TRACES;METRICS
4 | type ObservabilitySignal string
5 |
6 | const (
7 | LogsObservabilitySignal ObservabilitySignal = "LOGS"
8 | TracesObservabilitySignal ObservabilitySignal = "TRACES"
9 | MetricsObservabilitySignal ObservabilitySignal = "METRICS"
10 | )
11 |
--------------------------------------------------------------------------------
/common/tiers.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | type OdigosTier string
4 |
5 | const (
6 |
7 | // community is the opensource tier of odigos
8 | CommunityOdigosTier OdigosTier = "community"
9 |
10 | // cloud is the SaaS offering of odigos
11 | CloudOdigosTier OdigosTier = "cloud"
12 |
13 | // on premises comes with enterprise features and does not require
14 | // network connectivity to odigos cloud
15 | OnPremOdigosTier OdigosTier = "onprem"
16 | )
17 |
--------------------------------------------------------------------------------
/destinations/data/googlecloudmonitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: Destination
3 | metadata:
4 | type: googlecloud
5 | displayName: Google Cloud Monitoring
6 | category: managed
7 | spec:
8 | image: gcp.svg
9 | signals:
10 | traces:
11 | supported: true
12 | metrics:
13 | supported: false
14 | logs:
15 | supported: true
16 | fields: []
17 |
--------------------------------------------------------------------------------
/destinations/data/lightstep.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: Destination
3 | metadata:
4 | type: lightstep
5 | displayName: Lightstep
6 | category: managed
7 | spec:
8 | image: lightstep.svg
9 | signals:
10 | traces:
11 | supported: true
12 | metrics:
13 | supported: false
14 | logs:
15 | supported: false
16 | fields:
17 | - name: LIGHTSTEP_ACCESS_TOKEN
18 | displayName: Access Token
19 | componentType: input
20 | componentProps:
21 | type: password
22 | required: true
23 | secret: true
--------------------------------------------------------------------------------
/destinations/data/prometheus.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: Destination
3 | metadata:
4 | type: prometheus
5 | displayName: Prometheus
6 | category: self hosted
7 | spec:
8 | image: prometheus.svg
9 | signals:
10 | traces:
11 | supported: false
12 | metrics:
13 | supported: true
14 | logs:
15 | supported: false
16 | fields:
17 | - name: PROMETHEUS_REMOTEWRITE_URL
18 | displayName: Remote Write URL
19 | componentType: input
20 | componentProps:
21 | type: text
22 | required: true
23 |
--------------------------------------------------------------------------------
/destinations/data/signoz.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: Destination
3 | metadata:
4 | type: signoz
5 | displayName: SigNoz
6 | category: self hosted
7 | spec:
8 | image: signoz.svg
9 | signals:
10 | traces:
11 | supported: true
12 | metrics:
13 | supported: true
14 | logs:
15 | supported: true
16 | fields:
17 | - name: SIGNOZ_URL
18 | displayName: Collector Endpoint
19 | componentType: input
20 | componentProps:
21 | type: text
22 | required: true
23 |
--------------------------------------------------------------------------------
/destinations/data/sumologic.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: Destination
3 | metadata:
4 | type: sumologic
5 | displayName: Sumo Logic
6 | category: managed
7 | spec:
8 | image: sumologic.svg
9 | signals:
10 | traces:
11 | supported: true
12 | metrics:
13 | supported: true
14 | logs:
15 | supported: true
16 | fields:
17 | - name: SUMOLOGIC_COLLECTION_URL
18 | displayName: Source URL
19 | componentType: input
20 | componentProps:
21 | type: password
22 | required: true
23 | secret: true
24 |
--------------------------------------------------------------------------------
/destinations/data/tempo.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: Destination
3 | metadata:
4 | type: tempo
5 | displayName: Tempo
6 | category: self hosted
7 | spec:
8 | image: tempo.svg
9 | signals:
10 | traces:
11 | supported: true
12 | metrics:
13 | supported: false
14 | logs:
15 | supported: false
16 | fields:
17 | - name: TEMPO_URL
18 | displayName: Endpoint
19 | componentType: input
20 | componentProps:
21 | type: text
22 | required: true
23 |
--------------------------------------------------------------------------------
/destinations/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/odigos-io/odigos/destinations
2 |
3 | go 1.24.0
4 |
5 | require (
6 | github.com/odigos-io/odigos/common v0.0.0
7 | gopkg.in/yaml.v3 v3.0.1
8 | )
9 |
10 | require (
11 | github.com/go-logr/logr v1.4.2 // indirect
12 | github.com/hashicorp/go-version v1.7.0 // indirect
13 | go.opentelemetry.io/otel v1.35.0 // indirect
14 | go.opentelemetry.io/otel/trace v1.35.0 // indirect
15 | )
16 |
17 | replace github.com/odigos-io/odigos/common => ../common
18 |
--------------------------------------------------------------------------------
/destinations/logos/alibabacloud.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/destinations/logos/appdynamics.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/destinations/logos/clickhouse.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/destinations/logos/coralogix.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/destinations/logos/dash0.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/destinations/logos/elasticapm.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/destinations/logos/gigapipe.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/destinations/logos/newrelic.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/destinations/logos/oracle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/destinations/logos/splunk.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/distros/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/odigos-io/odigos/distros
2 |
3 | require (
4 | github.com/odigos-io/odigos/common v0.0.0
5 | gopkg.in/yaml.v3 v3.0.1
6 | )
7 |
8 | require (
9 | github.com/go-logr/logr v1.4.2 // indirect
10 | github.com/hashicorp/go-version v1.7.0 // indirect
11 | go.opentelemetry.io/otel v1.35.0 // indirect
12 | go.opentelemetry.io/otel/trace v1.35.0 // indirect
13 | )
14 |
15 | replace github.com/odigos-io/odigos/common => ../common
16 |
17 | go 1.24.0
18 |
--------------------------------------------------------------------------------
/distros/yamls/golang-community.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: internal.odigos.io/v1beta1
2 | kind: OtelDistribution
3 | metadata:
4 | name: golang-community
5 | spec:
6 | name: golang-community
7 | language: go
8 | runtimeEnvironments:
9 | - name: go-runtime
10 | supportedVersions: '>= 1.17'
11 | displayName: Golang Community eBPF Instrumentation
12 | description: |
13 | This distribution is for Golang applications using OpenTelemetry eBPF-based SDK and eBPF-based instrumentation libraries from the OpenTelemetry community.
14 |
--------------------------------------------------------------------------------
/distros/yamls/render.go:
--------------------------------------------------------------------------------
1 | package yamls
2 |
3 | import (
4 | "embed"
5 | )
6 |
7 | //go:embed *.yaml
8 | var embeddedFiles embed.FS
9 |
10 | func GetFS() embed.FS {
11 | return embeddedFiles
12 | }
13 |
--------------------------------------------------------------------------------
/docs/backends/googlecloudstorage.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Google Cloud Storage"
3 | ---
4 |
5 | Odigos exports data to Google Cloud Storage in [OTLP format](https://opentelemetry.io/docs/specs/otlp/).
6 | Data can be exported either in JSON format or in binary format (protobuf).
7 |
8 | Authentication to Google Cloud Storage is done using [Google Application Default Credentials](https://cloud.google.com/docs/authentication/production).
9 |
10 | ## Configuring Google Cloud Storage Backend
11 |
12 | The only required field is the **bucket name**. The bucket must exists and the odigos gateway pod must have write access to it.
13 |
--------------------------------------------------------------------------------
/docs/backends/images/datadog1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/datadog1.png
--------------------------------------------------------------------------------
/docs/backends/images/datadog2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/datadog2.png
--------------------------------------------------------------------------------
/docs/backends/images/dynatrace1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/dynatrace1.png
--------------------------------------------------------------------------------
/docs/backends/images/grafanacloud1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/grafanacloud1.png
--------------------------------------------------------------------------------
/docs/backends/images/grafanacloud2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/grafanacloud2.png
--------------------------------------------------------------------------------
/docs/backends/images/grafanacloud3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/grafanacloud3.png
--------------------------------------------------------------------------------
/docs/backends/images/grafanacloud4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/grafanacloud4.png
--------------------------------------------------------------------------------
/docs/backends/images/honeycomb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/honeycomb.png
--------------------------------------------------------------------------------
/docs/backends/images/honeycombcreateapikey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/honeycombcreateapikey.png
--------------------------------------------------------------------------------
/docs/backends/images/honeycombcreateapikeymodal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/honeycombcreateapikeymodal.png
--------------------------------------------------------------------------------
/docs/backends/images/honeycombenv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/honeycombenv.png
--------------------------------------------------------------------------------
/docs/backends/images/honeycombenvsettings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/honeycombenvsettings.png
--------------------------------------------------------------------------------
/docs/backends/images/newrelic1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/newrelic1.png
--------------------------------------------------------------------------------
/docs/backends/images/newrelic2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/newrelic2.png
--------------------------------------------------------------------------------
/docs/backends/images/splunk1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/splunk1.png
--------------------------------------------------------------------------------
/docs/backends/images/splunk2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/backends/images/splunk2.png
--------------------------------------------------------------------------------
/docs/backends/sentry.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Sentry"
3 | ---
4 |
5 | ## Obtaining a Sentry DSN
6 |
7 | To use Sentry, you need to obtain a DSN (Data Source Name) from your Sentry account.
8 | You can find this in the Sentry UI under "Client Keys (DSN)".
9 |
10 | ## Configuring Sentry Backend
11 |
12 | Add a new backend with the DSN from your Sentry account.
13 |
--------------------------------------------------------------------------------
/docs/images/collectors_ready.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/collectors_ready.png
--------------------------------------------------------------------------------
/docs/images/demo_architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/demo_architecture.png
--------------------------------------------------------------------------------
/docs/images/demo_frontend_app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/demo_frontend_app.png
--------------------------------------------------------------------------------
/docs/images/jaeger_ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/jaeger_ui.png
--------------------------------------------------------------------------------
/docs/images/odigos_architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/odigos_architecture.png
--------------------------------------------------------------------------------
/docs/images/odigos_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/odigos_banner.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-2.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-3.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-4.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-5.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-6.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-7.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-8.png
--------------------------------------------------------------------------------
/docs/images/operator/operator-9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/operator/operator-9.png
--------------------------------------------------------------------------------
/docs/images/pods_ready.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/pods_ready.png
--------------------------------------------------------------------------------
/docs/images/ui_choose_apps.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/ui_choose_apps.png
--------------------------------------------------------------------------------
/docs/images/ui_choose_dest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/ui_choose_dest.png
--------------------------------------------------------------------------------
/docs/images/ui_jaeger_connection.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/ui_jaeger_connection.png
--------------------------------------------------------------------------------
/docs/images/ui_overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/docs/images/ui_overview.png
--------------------------------------------------------------------------------
/docs/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@odigos/odigos-docs",
3 | "version": "1.0.0",
4 | "private": true,
5 | "description": "The content and configuration powering the Odigos documentation is available at [docs.odigos.io](https://docs.odigos.io)",
6 | "scripts": {
7 | "dev": "mintlify dev",
8 | "py-preserve-deps": "pip freeze > requirements.txt",
9 | "py-install-deps": "pip install -r requirements.txt"
10 | },
11 | "author": "Odigos",
12 | "license": "Apache-2.0",
13 | "dependencies": {
14 | "mintlify": "^4.0.552"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/docs/quickstart/viewing-traces.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Viewing traces"
3 | sidebarTitle: "Viewing traces"
4 | ---
5 |
6 | Now that we have some traces, let's view them!
7 | Access the Jaeger UI by running the following command:
8 |
9 | ```bash
10 | kubectl port-forward -n tracing svc/jaeger 16686:16686
11 | ```
12 |
13 | Then, open [http://localhost:16686](http://localhost:16686) in your browser and explore the traces.
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/docs/reo.js:
--------------------------------------------------------------------------------
1 | !function(){var e,t,n;e="756aafdccc100e4",t=function(){Reo.init({clientID:"756aafdccc100e4"})},(n=document.createElement("script")).src="https://static.reo.dev/"+e+"/reo.js",n.defer=!0,n.onload=t,document.head.appendChild(n)}();
--------------------------------------------------------------------------------
/docs/requirements.txt:
--------------------------------------------------------------------------------
1 | certifi==2025.4.26
2 | charset-normalizer==3.4.2
3 | idna==3.10
4 | numpy==2.2.3
5 | packaging==25.0
6 | PyYAML==6.0.2
7 | requests==2.32.3
8 | scipy==1.15.2
9 | svgpathtools==1.7.0
10 | svgwrite==1.4.3
11 | urllib3==2.4.0
12 |
--------------------------------------------------------------------------------
/docs/setup/uninstall.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Uninstall"
3 | sidebarTitle: "Uninstall"
4 | ---
5 |
6 | ## With CLI
7 |
8 | ```shell
9 | odigos uninstall
10 | ```
11 |
12 | ## Uninstall Existing Odigos Installation with Helm
13 |
14 | If you installed Odigos using Helm, you can uninstall it by running the following commands:
15 |
16 | ```shell
17 | helm delete odigos -n odigos-system
18 | kubectl delete ns odigos-system
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/snippets/assume-no-meaning.mdx:
--------------------------------------------------------------------------------
1 | Odigos does not use or assume any meaning from this field
--------------------------------------------------------------------------------
/docs/snippets/beta-warning.mdx:
--------------------------------------------------------------------------------
1 |
2 | This feature is in beta. It may be subject to changes and improvements based on user feedback.
3 |
4 |
--------------------------------------------------------------------------------
/docs/snippets/ebpf-kernel-version-note.mdx:
--------------------------------------------------------------------------------
1 |
2 | Odigos Enterprise data collection is done using eBPF, so Odigos requires, at minimum, platforms that have underlying Linux kernel versions of 5.4.0.
3 |
4 |
--------------------------------------------------------------------------------
/docs/snippets/getting-help-section.mdx:
--------------------------------------------------------------------------------
1 | ## Getting Help
2 |
3 | If you have any issues, or require our assistance, please open an issue in [GitHub](https://github.com/odigos-io/odigos), or reach out to us in [Odigos Slack](https://join.slack.com/t/odigos/shared_invite/zt-24u91yknm-0fLXu6qnqYfNHS_GSUgTJw)
4 |
--------------------------------------------------------------------------------
/docs/vmagent/configuration/updating.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Updating Agent Configuration"
3 | sidebarTitle: "Reloading"
4 | ---
5 |
6 | To reload the agent configuration after chaning the configuration file, run:
7 |
8 | ```bash
9 | systemctl reload odigos-vmagent
10 | ```
11 |
12 | To verify the agent after updating the configuration:
13 |
14 | ```bash
15 | systemctl status odigos-vmagent
16 | ```
17 |
18 | And check that the agent "Active" state is `active (running)`.
19 |
--------------------------------------------------------------------------------
/docs/vmagent/overview.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Overview"
3 | sidebarTitle: "Overview"
4 | ---
5 |
6 | Odigos automatic OpenTelemetry instrumentation agent for Linux [Systemd](https://systemd.io/) service manager.
7 |
8 | ## Features
9 |
10 | - Instrument systemd services running on a Linux VM.
11 | - No code changes - automatic OpenTelemetry instrumentation with eBPF
12 | - Instant distributed traces - seamless context propagation
13 |
--------------------------------------------------------------------------------
/docs/vmagent/quickstart/generating-data.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Generating Data"
3 | sidebarTitle: "Generating Data"
4 | ---
5 |
6 | Trigger the demo application by sending a request to the demo application:
7 |
8 | ```bash
9 | curl -X POST http://localhost:8080/buy?id=1
10 | ```
11 |
12 | This call will generate a trace that will be sent to the Jaeger backend.
13 |
14 | To view the traces, open http://localhost:16686 in your browser and explore the data. If Jaeger is running on a remote machine, replace localhost with the appropriate IP address.
15 |
--------------------------------------------------------------------------------
/docs/vmagent/setup/configuration/agent.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Agent Configuration"
3 | sidebarTitle: "Agent Configuration"
4 | ---
5 |
6 | After [installing the agent](/vmagent/setup/installation), you need to add a configuration file to instruct the agent which sources to instrument, which destinations to send telemetry data to, and which processors to apply to the telemetry data.
7 |
8 | Read more about the agent configuration in the [Reference](/vmagent/configuration/reference).
9 |
--------------------------------------------------------------------------------
/docs/vmagent/setup/uninstall.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: "Uninstall"
3 | sidebarTitle: "Uninstall"
4 | ---
5 |
6 | To uninstall Odigos VM Agent, follow the steps below:
7 |
8 |
9 |
10 | ```shell
11 | sudo apt remove odigos
12 | # optionally make sure to remove all configuration
13 | sudo apt purge odigos
14 | ```
15 |
16 |
17 | ```shell
18 | sudo dnf remove odigos
19 | # optionally make sure to remove all configuration
20 | sudo rm -rf /etc/odigos-vmagent /etc/odigos-otelcol
21 | ```
22 |
23 |
24 |
--------------------------------------------------------------------------------
/frontend/.gitignore:
--------------------------------------------------------------------------------
1 | odigos-ui
2 | odigos-backend
3 | .DS_Store
4 | __debug_bin*
5 | vendor
6 | .tools
--------------------------------------------------------------------------------
/frontend/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.ignoreWords": ["Keyval", "lotties", "torquiz_light"]
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/graph/model/destination.go:
--------------------------------------------------------------------------------
1 | package model
2 |
--------------------------------------------------------------------------------
/frontend/graph/resolver.go:
--------------------------------------------------------------------------------
1 | package graph
2 |
3 | import (
4 | "github.com/go-logr/logr"
5 | collectormetrics "github.com/odigos-io/odigos/frontend/services/collector_metrics"
6 | )
7 |
8 | // This file will not be regenerated automatically.
9 | // It serves as dependency injection for your app, add any dependencies you require here.
10 |
11 | type Resolver struct {
12 | MetricsConsumer *collectormetrics.OdigosMetricsConsumer
13 | Logger logr.Logger
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/kube/watchers/common.go:
--------------------------------------------------------------------------------
1 | package watchers
2 |
3 | import (
4 | "github.com/odigos-io/odigos/frontend/services/sse"
5 | )
6 |
7 | func genericErrorMessage(event sse.MessageEvent, crd string, data string) {
8 | sse.SendMessageToClient(sse.SSEMessage{
9 | Type: sse.MessageTypeError,
10 | Event: event,
11 | Data: "Something went wrong: " + data,
12 | CRDType: crd,
13 | Target: "",
14 | })
15 | }
16 |
--------------------------------------------------------------------------------
/frontend/services/actions/constants.go:
--------------------------------------------------------------------------------
1 | package services
2 |
3 | const (
4 | ActionTypeK8sAttributes = "K8sAttributesResolver"
5 | ActionTypeAddClusterInfo = "AddClusterInfo"
6 | ActionTypeDeleteAttribute = "DeleteAttribute"
7 | ActionTypeRenameAttribute = "RenameAttribute"
8 | ActionTypePiiMasking = "PiiMasking"
9 | ActionTypeErrorSampler = "ErrorSampler"
10 | ActionTypeLatencySampler = "LatencySampler"
11 | ActionTypeProbabilisticSampler = "ProbabilisticSampler"
12 | ActionTypeServiceNameSampler = "ServiceNameSampler"
13 | ActionTypeSpanAttributeSampler = "SpanAttributeSampler"
14 | )
15 |
--------------------------------------------------------------------------------
/frontend/services/collector_metrics/utils.go:
--------------------------------------------------------------------------------
1 | package collectormetrics
2 |
3 | import "time"
4 |
5 | func calculateThroughput(diff float64, currentTime, prevTime time.Time) int64 {
6 | elapsed := currentTime.Sub(prevTime).Seconds()
7 |
8 | var throughput int64
9 | if diff > 0 && elapsed > 0 {
10 | throughput = int64(diff / elapsed)
11 | }
12 |
13 | return throughput
14 | }
--------------------------------------------------------------------------------
/frontend/services/common/source.go:
--------------------------------------------------------------------------------
1 | package common
2 |
3 | import "github.com/odigos-io/odigos/api/k8sconsts"
4 |
5 | type SourceID struct {
6 | // combination of namespace, kind and name is unique
7 | Name string `json:"name"`
8 | Kind k8sconsts.WorkloadKind `json:"kind"`
9 | Namespace string `json:"namespace"`
10 | }
11 |
12 | var (
13 | DisableInstrumentationJsonKey = "disableInstrumentation"
14 | )
15 |
--------------------------------------------------------------------------------
/frontend/services/db/database.go:
--------------------------------------------------------------------------------
1 | package db
2 |
3 | import (
4 | "context"
5 | "database/sql"
6 |
7 | "gorm.io/gorm"
8 | )
9 |
10 | // Database defines common DB operations
11 | type Database interface {
12 | GetDB() *gorm.DB
13 | Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
14 | Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
15 | QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row
16 | Close() error
17 | }
18 |
--------------------------------------------------------------------------------
/frontend/version/version.go:
--------------------------------------------------------------------------------
1 | package version
2 |
3 | var (
4 | OdigosVersion string
5 | OdigosCommit string
6 | OdigosDate string
7 | )
8 |
--------------------------------------------------------------------------------
/frontend/webapp/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["next/core-web-vitals", "next/typescript"]
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/webapp/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env*.local
29 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
37 | .DS_Store
38 | *.pid
39 | *.log
40 |
--------------------------------------------------------------------------------
/frontend/webapp/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "printWidth": 200,
4 | "semi": true,
5 | "singleQuote": true,
6 | "jsxSingleQuote": true,
7 | "quoteProps": "as-needed",
8 | "trailingComma": "all",
9 | "bracketSpacing": true,
10 | "bracketSameLine": false,
11 | "arrowParens": "always",
12 | "parser": "typescript"
13 | }
--------------------------------------------------------------------------------
/frontend/webapp/app/(overview)/actions/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import React from 'react';
4 | import { ActionTable } from '@odigos/ui-kit/containers';
5 | import { TABLE_MAX_HEIGHT, TABLE_MAX_WIDTH } from '@/utils';
6 |
7 | export default function Page() {
8 | return ;
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/webapp/app/(overview)/destinations/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import React from 'react';
4 | import { useMetrics } from '@/hooks';
5 | import { TABLE_MAX_HEIGHT, TABLE_MAX_WIDTH } from '@/utils';
6 | import { DestinationTable } from '@odigos/ui-kit/containers';
7 |
8 | export default function Page() {
9 | const { metrics } = useMetrics();
10 |
11 | return ;
12 | }
13 |
--------------------------------------------------------------------------------
/frontend/webapp/app/(overview)/instrumentation-rules/page.tsx:
--------------------------------------------------------------------------------
1 | 'use client';
2 |
3 | import React from 'react';
4 | import { TABLE_MAX_HEIGHT, TABLE_MAX_WIDTH } from '@/utils';
5 | import { InstrumentationRuleTable } from '@odigos/ui-kit/containers';
6 |
7 | export default function Page() {
8 | return ;
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/webapp/components/index.ts:
--------------------------------------------------------------------------------
1 | export * from './lib-imports';
2 | export * from './styled';
3 |
--------------------------------------------------------------------------------
/frontend/webapp/components/lib-imports/index.ts:
--------------------------------------------------------------------------------
1 | export * from './overview-header';
2 | export * from './overview-modals-and-drawers';
3 | export * from './setup-header';
4 |
--------------------------------------------------------------------------------
/frontend/webapp/components/styled.tsx:
--------------------------------------------------------------------------------
1 | import styled from 'styled-components';
2 |
3 | export const OnboardingStepperWrapper = styled.div`
4 | position: absolute;
5 | left: 24px;
6 | top: 144px;
7 |
8 | @media (max-width: 1050px) {
9 | display: none;
10 | }
11 | `;
12 |
--------------------------------------------------------------------------------
/frontend/webapp/cypress/.gitignore:
--------------------------------------------------------------------------------
1 | screenshots
2 | videos
3 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/index.ts:
--------------------------------------------------------------------------------
1 | export * from './queries';
2 | export * from './mutations';
3 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/mutations/action.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const CREATE_ACTION = gql`
4 | mutation CreateAction($action: ActionInput!) {
5 | createAction(action: $action) {
6 | id
7 | type
8 | }
9 | }
10 | `;
11 |
12 | export const UPDATE_ACTION = gql`
13 | mutation UpdateAction($id: ID!, $action: ActionInput!) {
14 | updateAction(id: $id, action: $action) {
15 | id
16 | type
17 | }
18 | }
19 | `;
20 |
21 | export const DELETE_ACTION = gql`
22 | mutation DeleteAction($id: ID!, $actionType: String!) {
23 | deleteAction(id: $id, actionType: $actionType)
24 | }
25 | `;
26 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/mutations/data-stream.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const UPDATE_DATA_STREAM = gql`
4 | mutation UpdateDataStream($id: ID!, $dataStream: DataStreamInput!) {
5 | updateDataStream(id: $id, dataStream: $dataStream) {
6 | name
7 | }
8 | }
9 | `;
10 |
11 | export const DELETE_DATA_STREAM = gql`
12 | mutation DeleteDataStream($id: ID!) {
13 | deleteDataStream(id: $id)
14 | }
15 | `;
16 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/mutations/index.ts:
--------------------------------------------------------------------------------
1 | export * from './action';
2 | export * from './data-stream';
3 | export * from './destination';
4 | export * from './instrumentation-rule';
5 | export * from './namespace';
6 | export * from './source';
7 | export * from './token';
8 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/mutations/namespace.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const PERSIST_NAMESPACE = gql`
4 | mutation PersistNamespace($namespace: PersistNamespaceItemInput!) {
5 | persistK8sNamespace(namespace: $namespace)
6 | }
7 | `;
8 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/mutations/source.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const PERSIST_SOURCE = gql`
4 | mutation PersistSources($namespace: String!, $sources: [PersistNamespaceSourceInput!]!) {
5 | persistK8sSources(namespace: $namespace, sources: $sources)
6 | }
7 | `;
8 |
9 | export const UPDATE_K8S_ACTUAL_SOURCE = gql`
10 | mutation UpdateK8sActualSource($sourceId: K8sSourceId!, $patchSourceRequest: PatchSourceRequestInput!) {
11 | updateK8sActualSource(sourceId: $sourceId, patchSourceRequest: $patchSourceRequest)
12 | }
13 | `;
14 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/mutations/token.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const UPDATE_API_TOKEN = gql`
4 | mutation UpdateApiToken($token: String!) {
5 | updateApiToken(token: $token)
6 | }
7 | `;
8 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/queries/actions.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const GET_ACTIONS = gql`
4 | query GetActions {
5 | computePlatform {
6 | actions {
7 | id
8 | type
9 | spec
10 | conditions {
11 | status
12 | type
13 | reason
14 | message
15 | lastTransitionTime
16 | }
17 | }
18 | }
19 | }
20 | `;
21 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/queries/config.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | // Define the GraphQL query
4 | export const GET_CONFIG = gql`
5 | query GetConfig {
6 | config {
7 | installation
8 | tier
9 | readonly
10 | }
11 | }
12 | `;
13 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/queries/data-streams.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const GET_DATA_STREAMS = gql`
4 | query GetDataStreams {
5 | computePlatform {
6 | dataStreams {
7 | name
8 | }
9 | }
10 | }
11 | `;
12 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/queries/index.ts:
--------------------------------------------------------------------------------
1 | export * from './actions';
2 | export * from './config';
3 | export * from './data-streams';
4 | export * from './describe';
5 | export * from './destination';
6 | export * from './instrumentation-rules';
7 | export * from './metrics';
8 | export * from './namespaces';
9 | export * from './source';
10 | export * from './tokens';
11 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/queries/metrics.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const GET_METRICS = gql`
4 | query GetOverviewMetrics {
5 | getOverviewMetrics {
6 | sources {
7 | namespace
8 | kind
9 | name
10 | totalDataSent
11 | throughput
12 | }
13 | destinations {
14 | id
15 | totalDataSent
16 | throughput
17 | }
18 | }
19 | }
20 | `;
21 |
--------------------------------------------------------------------------------
/frontend/webapp/graphql/queries/tokens.ts:
--------------------------------------------------------------------------------
1 | import { gql } from '@apollo/client';
2 |
3 | export const GET_TOKENS = gql`
4 | query GetTokens {
5 | computePlatform {
6 | apiTokens {
7 | token
8 | name
9 | issuedAt
10 | expiresAt
11 | }
12 | }
13 | }
14 | `;
15 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/actions/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useActionCRUD';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/common/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useSetupHelpers';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/config/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useConfig';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/data-streams/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useDataStreamsCRUD';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/describe/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useDescribe';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/destinations/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useDestinationCategories';
2 | export * from './useDestinationCRUD';
3 | export * from './usePotentialDestinations';
4 | export * from './useTestConnection';
5 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/destinations/useDestinationCategories.ts:
--------------------------------------------------------------------------------
1 | import { useQuery } from '@apollo/client';
2 | import { GET_DESTINATION_CATEGORIES } from '@/graphql';
3 | import type { FetchedDestinationCategories } from '@/types';
4 |
5 | export const useDestinationCategories = () => {
6 | const { data } = useQuery(GET_DESTINATION_CATEGORIES);
7 |
8 | return {
9 | categories: data?.destinationCategories?.categories || [],
10 | };
11 | };
12 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/index.ts:
--------------------------------------------------------------------------------
1 | export * from './actions';
2 | export * from './common';
3 | export * from './config';
4 | export * from './data-streams';
5 | export * from './describe';
6 | export * from './destinations';
7 | export * from './instrumentation-rules';
8 | export * from './metrics';
9 | export * from './namespaces';
10 | export * from './notification';
11 | export * from './metrics';
12 | export * from './sources';
13 | export * from './tokens';
14 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/instrumentation-rules/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useInstrumentationRuleCRUD';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/metrics/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useMetrics';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/namespaces/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useNamespace';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/notification/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useSSE';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/sources/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useSourceCRUD';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/hooks/tokens/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useTokenCRUD';
2 | export * from './useTokenTracker';
3 |
--------------------------------------------------------------------------------
/frontend/webapp/next.config.ts:
--------------------------------------------------------------------------------
1 | import type { NextConfig } from 'next';
2 |
3 | const nextConfig: NextConfig = {
4 | output: 'export',
5 | reactStrictMode: false,
6 | images: {
7 | unoptimized: true,
8 | },
9 | compiler: {
10 | styledComponents: true,
11 | },
12 | };
13 |
14 | export default nextConfig;
15 |
--------------------------------------------------------------------------------
/frontend/webapp/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | },
5 | }
6 |
--------------------------------------------------------------------------------
/frontend/webapp/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Odigos",
3 | "short_name": "Odigos",
4 | "icons": [
5 | { "src": "/favicon.svg", "sizes": "16x16", "type": "image/svg" },
6 | { "src": "/favicon.svg", "sizes": "24x24", "type": "image/svg" },
7 | { "src": "/favicon.svg", "sizes": "32x32", "type": "image/svg" },
8 | { "src": "/favicon.svg", "sizes": "64x64", "type": "image/svg" },
9 | { "src": "/favicon.svg", "sizes": "192x192", "type": "image/svg" },
10 | { "src": "/favicon.svg", "sizes": "512x512", "type": "image/svg" }
11 | ],
12 | "theme_color": "#FFFFFF",
13 | "background_color": "#000000",
14 | "display": "standalone"
15 | }
--------------------------------------------------------------------------------
/frontend/webapp/store/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useStatusStore';
2 |
--------------------------------------------------------------------------------
/frontend/webapp/store/useStatusStore.ts:
--------------------------------------------------------------------------------
1 | import { create } from 'zustand';
2 | import { StatusType } from '@odigos/ui-kit/types';
3 |
4 | interface StoreValues {
5 | status: StatusType;
6 | title: string;
7 | message: string;
8 | }
9 |
10 | interface StoreSetters {
11 | setStatusStore: (s: StoreValues) => void;
12 | }
13 |
14 | export const useStatusStore = create((set) => ({
15 | status: StatusType.Default,
16 | title: 'Connecting...',
17 | message: '',
18 |
19 | setStatusStore: (s) => set(s),
20 | }));
21 |
--------------------------------------------------------------------------------
/frontend/webapp/types/common.ts:
--------------------------------------------------------------------------------
1 | export interface PaginatedData {
2 | nextPage: string
3 | items: T[]
4 | }
5 |
--------------------------------------------------------------------------------
/frontend/webapp/types/config.ts:
--------------------------------------------------------------------------------
1 | import { Tier } from '@odigos/ui-kit/types';
2 |
3 | export enum ConfigInstallation {
4 | New = 'NEW',
5 | AppsSelected = 'APPS_SELECTED',
6 | Finished = 'FINISHED',
7 | }
8 |
9 | export interface FetchedConfig {
10 | installation: ConfigInstallation;
11 | tier: Tier;
12 | readonly: boolean;
13 | }
14 |
--------------------------------------------------------------------------------
/frontend/webapp/types/destinations.ts:
--------------------------------------------------------------------------------
1 | import type { DestinationCategories } from '@odigos/ui-kit/types';
2 |
3 | export interface FetchedDestinationCategories {
4 | destinationCategories: {
5 | categories: DestinationCategories;
6 | };
7 | }
8 |
--------------------------------------------------------------------------------
/frontend/webapp/types/index.ts:
--------------------------------------------------------------------------------
1 | export * from './actions';
2 | export * from './common';
3 | export * from './config';
4 | export * from './destinations';
5 | export * from './namespaces';
6 | export * from './sources';
7 |
--------------------------------------------------------------------------------
/frontend/webapp/types/namespaces.ts:
--------------------------------------------------------------------------------
1 | export interface NamespaceInstrumentInput {
2 | name: string;
3 | futureSelected: boolean;
4 | }
5 |
--------------------------------------------------------------------------------
/frontend/webapp/types/sources.ts:
--------------------------------------------------------------------------------
1 | import type { SelectedSource } from '@odigos/ui-kit/store';
2 | import type { Condition, WorkloadId } from '@odigos/ui-kit/types';
3 |
4 | export interface SourceInstrumentInput {
5 | namespace: string;
6 | sources: Omit[];
7 | }
8 |
9 | export type SourceConditions = WorkloadId & {
10 | conditions: Condition[];
11 | };
12 |
--------------------------------------------------------------------------------
/frontend/webapp/utils/constants/index.ts:
--------------------------------------------------------------------------------
1 | export * from './keys';
2 | export * from './props';
3 | export * from './routes';
4 |
--------------------------------------------------------------------------------
/frontend/webapp/utils/constants/keys.ts:
--------------------------------------------------------------------------------
1 | export const STORAGE_KEYS = {
2 | SELECTED_DATA_STREAM: 'SELECTED_DATA_STREAM',
3 | };
4 |
--------------------------------------------------------------------------------
/frontend/webapp/utils/constants/props.ts:
--------------------------------------------------------------------------------
1 | export const OVERVIEW_HEIGHT_WITHOUT_DATA_FLOW = '176px'
2 |
3 | export const TABLE_MAX_HEIGHT = 'calc(100vh - 220px)'
4 | export const TABLE_MAX_WIDTH = 'calc(100vw - 70px)'
5 |
--------------------------------------------------------------------------------
/frontend/webapp/utils/functions/index.ts:
--------------------------------------------------------------------------------
1 | export * from './actions';
2 | export * from './destinations';
3 | export * from './sources';
4 |
--------------------------------------------------------------------------------
/frontend/webapp/utils/index.ts:
--------------------------------------------------------------------------------
1 | export * from './constants';
2 | export * from './functions';
3 |
--------------------------------------------------------------------------------
/helm/odigos-central/Chart.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v2
2 | name: odigos-central
3 | description: Centralized components for Odigos (UI + Backend)
4 | type: application
5 | version: '0.0.0'
6 | appVersion: 'v0.0.0'
7 | icon: https://d2q89wckrml3k4.cloudfront.net/logo.png
8 | kubeVersion: '>= 1.20.15-0'
9 |
--------------------------------------------------------------------------------
/helm/odigos-central/templates/_helpers.tpl:
--------------------------------------------------------------------------------
1 | {{- define "utils.imageName" -}}
2 | {{- $defaultRegistry := "registry.odigos.io" -}}
3 | {{- $redHatRegistry := "registry.connect.redhat.com/odigos" -}}
4 | {{- if $.Values.imagePrefix -}}
5 | {{- $.Values.imagePrefix -}}/
6 | {{- else -}}
7 | {{- if $.Values.openshift.enabled -}}
8 | {{- $redHatRegistry -}}/
9 | {{- else -}}
10 | {{- $defaultRegistry -}}/
11 | {{- end -}}
12 | {{- end -}}
13 | odigos-
14 | {{- .Component -}}
15 | {{- if $.Values.openshift.enabled -}}
16 | -ubi9
17 | {{- end -}}
18 | :
19 | {{- .Tag -}}
20 | {{- end -}}
21 |
--------------------------------------------------------------------------------
/helm/odigos-central/templates/centralbackend/central-backend-service.yaml:
--------------------------------------------------------------------------------
1 | {{- if .Values.onPremToken }}
2 |
3 | apiVersion: v1
4 | kind: Service
5 | metadata:
6 | name: central-backend
7 | namespace: {{ .Release.Namespace }}
8 | labels:
9 | app.kubernetes.io/name: central-backend
10 | spec:
11 | selector:
12 | app.kubernetes.io/name: central-backend
13 | type: ClusterIP
14 | ports:
15 | - name: http
16 | port: 8081
17 | targetPort: 8081
18 |
19 | {{- end }}
20 |
--------------------------------------------------------------------------------
/helm/odigos-central/templates/centralbackend/secret.yaml:
--------------------------------------------------------------------------------
1 | {{- if .Values.onPremToken }}
2 | apiVersion: v1
3 | kind: Secret
4 | metadata:
5 | name: odigos-central
6 | namespace: {{ .Release.Namespace }}
7 | type: Opaque
8 | stringData:
9 | ODIGOS_ONPREM_TOKEN: {{ .Values.onPremToken | quote }}
10 | {{- end }}
11 |
--------------------------------------------------------------------------------
/helm/odigos-central/templates/redis/redis-service.yaml:
--------------------------------------------------------------------------------
1 | {{- if .Values.onPremToken}}
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | name: redis
6 | namespace: {{ .Release.Namespace }}
7 | spec:
8 | selector:
9 | app: redis
10 | ports:
11 | - name: {{ .Values.redis.portName }}
12 | port: {{ .Values.redis.port }}
13 | targetPort: {{ .Values.redis.port }}
14 | {{- end }}
15 |
--------------------------------------------------------------------------------
/helm/odigos/.helmignore:
--------------------------------------------------------------------------------
1 | # Patterns to ignore when building packages.
2 | # This supports shell glob matching, relative path matching, and
3 | # negation (prefixed with !). Only one pattern per line.
4 | .DS_Store
5 | # Common VCS dirs
6 | .git/
7 | .gitignore
8 | .bzr/
9 | .bzrignore
10 | .hg/
11 | .hgignore
12 | .svn/
13 | # Common backup files
14 | *.swp
15 | *.bak
16 | *.tmp
17 | *.orig
18 | *~
19 | # Various IDEs
20 | .project
21 | .idea/
22 | *.tmproj
23 | .vscode/
24 | *.md
25 |
--------------------------------------------------------------------------------
/helm/odigos/Chart.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v2
2 | name: odigos
3 | description: Instant Distributed Tracing
4 | type: application
5 | # 0.0.0 will be replaced by the git tag version on release
6 | version: "0.0.0"
7 | # docker image and git tags prefix the version with "v"
8 | appVersion: "v0.0.0"
9 | icon: https://d2q89wckrml3k4.cloudfront.net/logo.png
10 | # minimum kubernetes version required, this value must be in sync with the CLI install value
11 | # we must include '-0' to allow versions such as v1.23.17-eks-ce1d5eb
12 | kubeVersion: ">= 1.20.15-0"
13 |
--------------------------------------------------------------------------------
/helm/odigos/templates/NOTES.txt:
--------------------------------------------------------------------------------
1 | Odigos installed successfully. For getting started go to the UI by running:
2 |
3 | kubectl port-forward svc/ui -n {{ .Release.Namespace }} 3000:3000
4 |
5 | or
6 |
7 | brew install odigos-io/homebrew-odigos-cli/odigos
8 | odigos ui
9 |
10 | Then, go to: http://localhost:3000
11 |
--------------------------------------------------------------------------------
/helm/odigos/templates/autoscaler/clusterrolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: odigos-autoscaler
5 | labels:
6 | odigos.io/system-object: "true"
7 | roleRef:
8 | apiGroup: rbac.authorization.k8s.io
9 | kind: ClusterRole
10 | name: odigos-autoscaler
11 | subjects:
12 | - kind: ServiceAccount
13 | name: odigos-autoscaler
14 | namespace: {{ .Release.Namespace }}
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/autoscaler/leader-election-rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-autoscaler-leader-election
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-leader-election-role
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-autoscaler
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/autoscaler/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-autoscaler
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-autoscaler
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-autoscaler
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/autoscaler/service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: odigos-autoscaler
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | spec:
9 | ports:
10 | - name: webhook-server
11 | port: 9443
12 | targetPort: 9443
13 | selector:
14 | app.kubernetes.io/name: odigos-autoscaler
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/autoscaler/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odigos-autoscaler
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/centralproxy/role.yaml:
--------------------------------------------------------------------------------
1 | {{- if and .Values.centralProxy.enabled .Values.centralProxy.centralBackendURL .Values.clusterName .Values.onPremToken}}
2 | apiVersion: rbac.authorization.k8s.io/v1
3 | kind: Role
4 | metadata:
5 | name: central-proxy
6 | namespace: {{ .Release.Namespace }}
7 | labels:
8 | odigos.io/system-object: "true"
9 | rules:
10 | - apiGroups: [""]
11 | resources: ["configmaps"]
12 | verbs: ["get"]
13 | {{- end }}
14 |
--------------------------------------------------------------------------------
/helm/odigos/templates/centralproxy/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | {{- if and .Values.centralProxy.enabled .Values.centralProxy.centralBackendURL .Values.clusterName .Values.onPremToken}}
2 | apiVersion: rbac.authorization.k8s.io/v1
3 | kind: RoleBinding
4 | metadata:
5 | name: central-proxy
6 | namespace: {{ .Release.Namespace }}
7 | labels:
8 | odigos.io/system-object: "true"
9 | subjects:
10 | - kind: ServiceAccount
11 | name: central-proxy
12 | namespace: {{ .Release.Namespace }}
13 | roleRef:
14 | kind: Role
15 | name: central-proxy
16 | apiGroup: rbac.authorization.k8s.io
17 | {{- end }}
18 |
--------------------------------------------------------------------------------
/helm/odigos/templates/centralproxy/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | {{- if and .Values.centralProxy.enabled .Values.centralProxy.centralBackendURL .Values.clusterName .Values.onPremToken}}
2 | apiVersion: v1
3 | kind: ServiceAccount
4 | metadata:
5 | name: central-proxy
6 | namespace: {{ .Release.Namespace }}
7 | labels:
8 | odigos.io/system-object: "true"
9 | {{- end }}
--------------------------------------------------------------------------------
/helm/odigos/templates/cleanup/cleanup-clusterrolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: cleanup-clusterrolebinding
5 | labels:
6 | odigos.io/system-object: "true"
7 | subjects:
8 | - kind: ServiceAccount
9 | name: cleanup-sa
10 | namespace: {{ .Release.Namespace }}
11 | roleRef:
12 | kind: ClusterRole
13 | name: cleanup-clusterrole
14 | apiGroup: rbac.authorization.k8s.io
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/cleanup/cleanup-role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: Role
3 | metadata:
4 | name: cleanup-role
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | rules:
9 | - apiGroups: [""]
10 | resources: ["namespaces", "configmaps", "secrets"]
11 | verbs: ["get", "list", "patch", "delete"]
--------------------------------------------------------------------------------
/helm/odigos/templates/cleanup/cleanup-rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: cleanup-rolebinding
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | subjects:
9 | - kind: ServiceAccount
10 | name: cleanup-sa
11 | namespace: {{ .Release.Namespace }}
12 | roleRef:
13 | kind: Role
14 | name: cleanup-role
15 | apiGroup: rbac.authorization.k8s.io
16 |
--------------------------------------------------------------------------------
/helm/odigos/templates/cleanup/service-account.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: cleanup-sa
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/datacollection/clusterrolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: odigos-data-collection
5 | labels:
6 | odigos.io/system-object: "true"
7 | roleRef:
8 | apiGroup: rbac.authorization.k8s.io
9 | kind: ClusterRole
10 | name: odigos-data-collection
11 | subjects:
12 | - kind: ServiceAccount
13 | name: odigos-data-collection
14 | namespace: {{ .Release.Namespace }}
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/datacollection/role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: Role
3 | metadata:
4 | name: odigos-data-collection
5 | namespace: '{{ .Release.Namespace }}'
6 | labels:
7 | odigos.io/system-object: "true"
8 | rules:
9 | - apiGroups:
10 | - ''
11 | resources:
12 | - configmaps
13 | resourceNames:
14 | - odigos-data-collection
15 | verbs:
16 | - get
17 | - list
18 | - watch
--------------------------------------------------------------------------------
/helm/odigos/templates/datacollection/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-data-collection
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-data-collection
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-data-collection
--------------------------------------------------------------------------------
/helm/odigos/templates/datacollection/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odigos-data-collection
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/gateway/role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: Role
3 | metadata:
4 | name: odigos-gateway
5 | namespace: '{{ .Release.Namespace }}'
6 | labels:
7 | odigos.io/system-object: "true"
8 | rules:
9 | - apiGroups:
10 | - ''
11 | resources:
12 | - configmaps
13 | resourceNames:
14 | - odigos-gateway
15 | verbs:
16 | - get
17 | - list
18 | - watch
--------------------------------------------------------------------------------
/helm/odigos/templates/gateway/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-gateway
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-gateway
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-gateway
--------------------------------------------------------------------------------
/helm/odigos/templates/gateway/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odigos-gateway
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/instrumentor/clusterrolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: odigos-instrumentor
5 | labels:
6 | odigos.io/system-object: "true"
7 | roleRef:
8 | apiGroup: rbac.authorization.k8s.io
9 | kind: ClusterRole
10 | name: odigos-instrumentor
11 | subjects:
12 | - kind: ServiceAccount
13 | name: odigos-instrumentor
14 | namespace: {{ .Release.Namespace }}
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/instrumentor/leader-election-rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-instrumentor-leader-election
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-leader-election-role
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-instrumentor
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/instrumentor/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-instrumentor
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-instrumentor
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-instrumentor
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/instrumentor/service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: odigos-instrumentor
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | spec:
9 | ports:
10 | - name: webhook-server
11 | port: 9443
12 | targetPort: 9443
13 | selector:
14 | app.kubernetes.io/name: odigos-instrumentor
--------------------------------------------------------------------------------
/helm/odigos/templates/instrumentor/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odigos-instrumentor
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/leader-election-role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: Role
3 | metadata:
4 | name: odigos-leader-election-role
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | rules:
9 | - apiGroups:
10 | - ""
11 | resources:
12 | - events
13 | verbs:
14 | - create
15 | - patch
16 | - apiGroups:
17 | - coordination.k8s.io
18 | resources:
19 | - leases
20 | verbs:
21 | - get
22 | - list
23 | - watch
24 | - create
25 | - update
26 | - patch
27 | - delete
28 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odiglet/gooffsetsconfigmap.yaml:
--------------------------------------------------------------------------------
1 | {{- $configMap := lookup "v1" "ConfigMap" .Release.Namespace "odigos-go-offsets" | default (dict "data" (dict)) }}
2 | {{- $jsonContent := index $configMap.data "go_offset_results.json" }}
3 | apiVersion: v1
4 | kind: ConfigMap
5 | metadata:
6 | name: odigos-go-offsets
7 | namespace: {{ .Release.Namespace }}
8 | labels:
9 | odigos.io/system-object: "true"
10 | data:
11 | {{- if $jsonContent }}
12 | "go_offset_results.json": {{ $jsonContent | quote }}
13 | {{- else }}
14 | "go_offset_results.json": ""
15 | {{- end }}
16 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odiglet/local-service.yaml:
--------------------------------------------------------------------------------
1 | {{- if semverCompare ">=1.26.0" .Capabilities.KubeVersion.Version }}
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | name: odiglet-local
6 | namespace: {{ .Release.Namespace }}
7 | labels:
8 | odigos.io/system-object: "true"
9 | spec:
10 | ports:
11 | - name: op-amp
12 | port: 4320
13 | targetPort: 4320
14 | selector:
15 | app.kubernetes.io/name: odiglet
16 | internalTrafficPolicy: Local
17 | {{- end}}
--------------------------------------------------------------------------------
/helm/odigos/templates/odiglet/resourcequota.yaml:
--------------------------------------------------------------------------------
1 | {{ if .Values.gke.enabled }}
2 | apiVersion: v1
3 | kind: ResourceQuota
4 | metadata:
5 | name: odigos-quota
6 | namespace: {{ .Release.Namespace }}
7 | labels:
8 | odigos.io/system-object: "true"
9 | spec:
10 | hard:
11 | pods: "10k"
12 | scopeSelector:
13 | matchExpressions:
14 | - operator: In
15 | scopeName: PriorityClass
16 | values:
17 | - system-node-critical
18 | {{- end }}
19 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odiglet/role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: Role
3 | metadata:
4 | name: odiglet
5 | namespace: '{{ .Release.Namespace }}'
6 | labels:
7 | odigos.io/system-object: "true"
8 | rules:
9 | - apiGroups:
10 | - odigos.io
11 | resources:
12 | - collectorsgroups
13 | - collectorsgroups/status
14 | verbs:
15 | - get
16 | - list
17 | - watch
18 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odiglet/secret.yaml:
--------------------------------------------------------------------------------
1 | {{- if .Values.onPremToken }}
2 | apiVersion: v1
3 | kind: Secret
4 | metadata:
5 | name: odigos-pro
6 | namespace: {{ .Release.Namespace }}
7 | labels:
8 | odigos.io/system-object: "true"
9 | stringData:
10 | odigos-onprem-token: {{ .Values.onPremToken }}
11 | {{- end }}
12 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odiglet/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odiglet
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odigos-deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ConfigMap
3 | metadata:
4 | name: odigos-deployment
5 | namespace: '{{ .Release.Namespace }}'
6 | labels:
7 | odigos.io/system-object: "true"
8 | data:
9 | ODIGOS_VERSION: '{{ .Values.image.tag | default .Chart.AppVersion }}'
10 | ODIGOS_TIER: '{{- if .Values.onPremToken }}onprem{{- else }}community{{- end }}'
11 | installation-method: helm
12 | odigos-deployment-id: '{{ uuidv4 }}'
13 |
--------------------------------------------------------------------------------
/helm/odigos/templates/odigos-own-telemetry-otel-config.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ConfigMap
3 | metadata:
4 | name: odigos-own-telemetry-otel-config
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | data:
9 | OTEL_SDK_DISABLED: "true"
10 |
--------------------------------------------------------------------------------
/helm/odigos/templates/scheduler/clusterrole.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRole
3 | metadata:
4 | name: odigos-scheduler
5 | labels:
6 | odigos.io/system-object: "true"
7 | rules:
8 | - apiGroups:
9 | - odigos.io
10 | resources:
11 | - instrumentationconfigs
12 | verbs:
13 | - get
14 | - list
15 | - watch
16 |
--------------------------------------------------------------------------------
/helm/odigos/templates/scheduler/clusterrolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: odigos-scheduler
5 | labels:
6 | odigos.io/system-object: "true"
7 | roleRef:
8 | apiGroup: rbac.authorization.k8s.io
9 | kind: ClusterRole
10 | name: odigos-scheduler
11 | subjects:
12 | - kind: ServiceAccount
13 | name: odigos-scheduler
14 | namespace: {{ .Release.Namespace }}
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/scheduler/leader-election-rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-scheduler-leader-election
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-leader-election-role
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-scheduler
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/scheduler/role-binding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-scheduler
5 | labels:
6 | odigos.io/system-object: "true"
7 | roleRef:
8 | apiGroup: rbac.authorization.k8s.io
9 | kind: Role
10 | name: odigos-scheduler
11 | subjects:
12 | - kind: ServiceAccount
13 | name: odigos-scheduler
14 |
--------------------------------------------------------------------------------
/helm/odigos/templates/scheduler/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odigos-scheduler
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/helm/odigos/templates/ui/clusterrolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: odigos-ui
5 | labels:
6 | odigos.io/system-object: "true"
7 | roleRef:
8 | apiGroup: rbac.authorization.k8s.io
9 | kind: ClusterRole
10 | name: odigos-ui
11 | subjects:
12 | - kind: ServiceAccount
13 | name: odigos-ui
14 | namespace: {{ .Release.Namespace }}
15 |
--------------------------------------------------------------------------------
/helm/odigos/templates/ui/rolebinding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | name: odigos-ui
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: odigos-ui
12 | subjects:
13 | - kind: ServiceAccount
14 | name: odigos-ui
15 | namespace: {{ .Release.Namespace }}
16 |
--------------------------------------------------------------------------------
/helm/odigos/templates/ui/service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: ui
5 | namespace: '{{ .Release.Namespace }}'
6 | labels:
7 | app.kubernetes.io/name: odigos-ui
8 | odigos.io/system-object: "true"
9 | spec:
10 | ports:
11 | - name: ui
12 | port: 3000
13 | - name: otlp
14 | port: 4317
15 | selector:
16 | app: odigos-ui
17 |
--------------------------------------------------------------------------------
/helm/odigos/templates/ui/serviceaccount.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | name: odigos-ui
5 | namespace: {{ .Release.Namespace }}
6 | labels:
7 | odigos.io/system-object: "true"
8 |
--------------------------------------------------------------------------------
/instrumentation/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/odigos-io/odigos/instrumentation
2 |
3 | go 1.24.0
4 |
5 | require (
6 | github.com/go-logr/logr v1.4.2
7 | github.com/odigos-io/odigos/common v0.0.0
8 | github.com/odigos-io/runtime-detector v0.0.7
9 | go.opentelemetry.io/otel v1.35.0
10 | golang.org/x/sync v0.14.0
11 | )
12 |
13 | require (
14 | github.com/cilium/ebpf v0.17.3 // indirect
15 | github.com/hashicorp/go-version v1.7.0 // indirect
16 | go.opentelemetry.io/otel/trace v1.35.0 // indirect
17 | golang.org/x/net v0.40.0 // indirect
18 | golang.org/x/sys v0.33.0 // indirect
19 | )
20 |
21 | replace github.com/odigos-io/odigos/common => ../common
22 |
--------------------------------------------------------------------------------
/instrumentor/.dockerignore:
--------------------------------------------------------------------------------
1 | # More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file
2 | # Ignore build and test binaries.
3 | bin/
4 | testbin/
5 |
--------------------------------------------------------------------------------
/instrumentor/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 | bin
9 | testbin/*
10 |
11 | # Test binary, build with `go test -c`
12 | *.test
13 |
14 | # Output of the go coverage tool, specifically when used with LiteIDE
15 | *.out
16 |
17 | # Kubernetes Generated files - skip generated files, except for vendored files
18 |
19 | !vendor/**/zz_generated.*
20 |
21 | # editor and IDE paraphernalia
22 | .idea
23 | *.swp
24 | *.swo
25 | *~
26 |
--------------------------------------------------------------------------------
/instrumentor/controllers/agentenabled/collectorsgroup_controller.go:
--------------------------------------------------------------------------------
1 | package agentenabled
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/distros"
7 | ctrl "sigs.k8s.io/controller-runtime"
8 | "sigs.k8s.io/controller-runtime/pkg/client"
9 | )
10 |
11 | type CollectorsGroupReconciler struct {
12 | client.Client
13 | DistrosProvider *distros.Provider
14 | }
15 |
16 | func (r *CollectorsGroupReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
17 | return reconcileAll(ctx, r.Client, r.DistrosProvider)
18 | }
19 |
--------------------------------------------------------------------------------
/instrumentor/controllers/agentenabled/effectiveconfig_controller.go:
--------------------------------------------------------------------------------
1 | package agentenabled
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/distros"
7 | ctrl "sigs.k8s.io/controller-runtime"
8 | "sigs.k8s.io/controller-runtime/pkg/client"
9 | )
10 |
11 | type EffectiveConfigReconciler struct {
12 | client.Client
13 | DistrosProvider *distros.Provider
14 | }
15 |
16 | func (r *EffectiveConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
17 | return reconcileAll(ctx, r.Client, r.DistrosProvider)
18 | }
19 |
--------------------------------------------------------------------------------
/instrumentor/controllers/agentenabled/instrumentationconfig_controller.go:
--------------------------------------------------------------------------------
1 | package agentenabled
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/distros"
7 | ctrl "sigs.k8s.io/controller-runtime"
8 | "sigs.k8s.io/controller-runtime/pkg/client"
9 | )
10 |
11 | type InstrumentationConfigReconciler struct {
12 | client.Client
13 | DistrosProvider *distros.Provider
14 | }
15 |
16 | func (r *InstrumentationConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
17 | return reconcileWorkload(ctx, r.Client, req.Name, req.Namespace, r.DistrosProvider)
18 | }
19 |
--------------------------------------------------------------------------------
/instrumentor/hack/boilerplate.go.txt:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
--------------------------------------------------------------------------------
/k8sutils/pkg/describe/properties/utils.go:
--------------------------------------------------------------------------------
1 | package properties
2 |
3 | func GetTextCreated(created bool) string {
4 | if created {
5 | return "created"
6 | } else {
7 | return "not created"
8 | }
9 | }
10 |
11 | func GetSuccessOrTransitioning(matchExpected bool) PropertyStatus {
12 | if matchExpected {
13 | return PropertyStatusSuccess
14 | } else {
15 | return PropertyStatusTransitioning
16 | }
17 | }
18 |
19 | func GetSuccessOrError(matchExpected bool) PropertyStatus {
20 | if matchExpected {
21 | return PropertyStatusSuccess
22 | } else {
23 | return PropertyStatusError
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/k8sutils/pkg/describe/source/source.go:
--------------------------------------------------------------------------------
1 | package source
2 |
3 | import (
4 | corev1 "k8s.io/api/core/v1"
5 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6 |
7 | "github.com/odigos-io/odigos/api/k8sconsts"
8 | )
9 |
10 | type K8sSourceObject struct {
11 | metav1.ObjectMeta
12 | Kind k8sconsts.WorkloadKind
13 | PodTemplateSpec *corev1.PodTemplateSpec
14 | LabelSelector *metav1.LabelSelector
15 | }
16 |
--------------------------------------------------------------------------------
/k8sutils/pkg/installationmethod/installationmethod.go:
--------------------------------------------------------------------------------
1 | package installationmethod
2 |
3 | type K8sInstallationMethod string
4 |
5 | const (
6 | K8sInstallationMethodOdigosCli K8sInstallationMethod = "odigos-cli"
7 | K8sInstallationMethodHelm K8sInstallationMethod = "helm"
8 | K8sInstallationMethodOdigosOperator K8sInstallationMethod = "odigos-operator"
9 | )
10 |
--------------------------------------------------------------------------------
/k8sutils/pkg/utils/config_utils.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | func IsItemIgnored(item string, ignoredItems []string) bool {
4 | for _, ignoredItem := range ignoredItems {
5 | if item == ignoredItem {
6 | return true
7 | }
8 | }
9 | return false
10 | }
11 |
--------------------------------------------------------------------------------
/k8sutils/pkg/utils/object.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | import "sigs.k8s.io/controller-runtime/pkg/client"
4 |
5 | // IsTerminating returns true if a client.Object has a non-zero DeletionTimestamp.
6 | // Otherwise, it returns false.
7 | func IsTerminating(obj client.Object) bool {
8 | return obj.GetDeletionTimestamp() != nil && !obj.GetDeletionTimestamp().IsZero()
9 | }
10 |
--------------------------------------------------------------------------------
/k8sutils/pkg/utils/other_agent.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | import "errors"
4 |
5 | var ErrOtherAgentRun = errors.New("device not added to any container due to the presence of another agent")
6 |
--------------------------------------------------------------------------------
/k8sutils/pkg/utils/retrynoeffectiveconfig.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | import (
4 | "time"
5 |
6 | "sigs.k8s.io/controller-runtime/pkg/reconcile"
7 | )
8 |
9 | func K8SNoEffectiveConfigErrorHandler(err error) (reconcile.Result, error) {
10 | if err == ErrOdigosEffectiveConfigNotFound {
11 | return reconcile.Result{
12 | Requeue: true,
13 | RequeueAfter: 5 * time.Second,
14 | }, nil
15 | }
16 | return reconcile.Result{}, err
17 | }
18 |
--------------------------------------------------------------------------------
/k8sutils/pkg/workload/workload_test.go:
--------------------------------------------------------------------------------
1 | package workload
2 |
3 | import "testing"
4 |
5 | func TestGetRuntimeObjectName(t *testing.T) {
6 | name := "myworkload"
7 | kind := "Deployment"
8 | got := CalculateWorkloadRuntimeObjectName(name, kind)
9 | want := "deployment-myworkload"
10 | if got != want {
11 | t.Errorf("GetRuntimeObjectName() = %v, want %v", got, want)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/odiglet/.gitignore:
--------------------------------------------------------------------------------
1 | example-app.yaml
2 | .tools/
--------------------------------------------------------------------------------
/odiglet/base.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM golang:1.24.3-bookworm AS builder
2 |
3 | # fury is our registry for linux packages
4 | RUN echo "deb [trusted=yes] https://apt.fury.io/cli/ * *" > /etc/apt/sources.list.d/fury-cli.list
5 | # goreleaser is used to build vmagent
6 | RUN echo "deb [trusted=yes] https://repo.goreleaser.com/apt/ /" > /etc/apt/sources.list.d/goreleaser.list
7 | RUN apt-get update && apt-get install -y curl clang gcc llvm make libbpf-dev fury-cli goreleaser
8 |
--------------------------------------------------------------------------------
/odiglet/pkg/instrumentation/instrumentlang/golang.go:
--------------------------------------------------------------------------------
1 | package instrumentlang
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
6 | )
7 |
8 | // Go is a dummy device available only on eBPF nodes. This will help us schedule applications that needs eBPF
9 | // instrumentation on eBPF nodes only.
10 | func Go(deviceId string, uniqueDestinationSignals map[common.ObservabilitySignal]struct{}) *v1beta1.ContainerAllocateResponse {
11 | return &v1beta1.ContainerAllocateResponse{}
12 | }
13 |
--------------------------------------------------------------------------------
/odiglet/pkg/instrumentation/instrumentlang/nginx.go:
--------------------------------------------------------------------------------
1 | package instrumentlang
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
6 | )
7 |
8 | func Nginx(deviceId string, uniqueDestinationSignals map[common.ObservabilitySignal]struct{}) *v1beta1.ContainerAllocateResponse {
9 | return &v1beta1.ContainerAllocateResponse{}
10 | }
11 |
--------------------------------------------------------------------------------
/odiglet/pkg/kube/utils/utils.go:
--------------------------------------------------------------------------------
1 | package utils
2 |
3 | import (
4 | "fmt"
5 |
6 | "github.com/odigos-io/odigos/odiglet/pkg/env"
7 | corev1 "k8s.io/api/core/v1"
8 | )
9 |
10 | func IsPodInCurrentNode(pod *corev1.Pod) bool {
11 | return pod.Spec.NodeName == env.Current.NodeName
12 | }
13 |
14 | func GetPodExternalURL(ip string, ports []corev1.ContainerPort) string {
15 | if ports != nil && len(ports) > 0 {
16 | return fmt.Sprintf("http://%s:%d", ip, ports[0].ContainerPort)
17 | }
18 |
19 | return ""
20 | }
21 |
--------------------------------------------------------------------------------
/odiglet/pkg/log/logger.go:
--------------------------------------------------------------------------------
1 | package log
2 |
3 | import (
4 | "flag"
5 |
6 | "github.com/go-logr/logr"
7 | "github.com/go-logr/zapr"
8 | bridge "github.com/odigos-io/opentelemetry-zap-bridge"
9 | "go.uber.org/zap"
10 | )
11 |
12 | var Logger logr.Logger
13 |
14 | func Init() error {
15 |
16 | zapLogger, err := zap.NewProduction()
17 | if err != nil {
18 | return err
19 | }
20 |
21 | zapLogger = bridge.AttachToZapLogger(zapLogger)
22 | Logger = zapr.NewLogger(zapLogger)
23 |
24 | // used by device manager logger
25 | flag.Parse()
26 |
27 | return nil
28 | }
29 |
--------------------------------------------------------------------------------
/odiglet/pkg/process/process_other.go:
--------------------------------------------------------------------------------
1 | //go:build !linux
2 |
3 | package process
4 |
5 | import procdiscovery "github.com/odigos-io/odigos/procdiscovery/pkg/process"
6 |
7 | // These functions are stubs for non-linux platforms to allow running tests on them.
8 |
9 | func isPodContainerPredicate(_ string, _ string) func(string) bool {
10 | return func(procDirName string) bool {
11 | return false
12 | }
13 | }
14 |
15 | func FindAllInContainer(podUID string, containerName string) ([]procdiscovery.Details, error) {
16 | return nil, nil
17 | }
--------------------------------------------------------------------------------
/operator/.dockerignore:
--------------------------------------------------------------------------------
1 | # More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file
2 | # Ignore build and test binaries.
3 | bin/
4 |
--------------------------------------------------------------------------------
/operator/.gitignore:
--------------------------------------------------------------------------------
1 | # Binaries for programs and plugins
2 | *.exe
3 | *.exe~
4 | *.dll
5 | *.so
6 | *.dylib
7 | bin/*
8 | Dockerfile.cross
9 |
10 | # Test binary, built with `go test -c`
11 | *.test
12 |
13 | # Output of the go coverage tool, specifically when used with LiteIDE
14 | *.out
15 |
16 | # Go workspace file
17 | go.work
18 |
19 | # Kubernetes Generated files - skip generated files, except for vendored files
20 | !vendor/**/zz_generated.*
21 |
22 | # editor and IDE paraphernalia
23 | .idea
24 | .vscode
25 | *.swp
26 | *.swo
27 | *~
28 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-controller-manager-metrics-service_v1_service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | creationTimestamp: null
5 | labels:
6 | app.kubernetes.io/managed-by: kustomize
7 | app.kubernetes.io/name: odigos-operator
8 | control-plane: controller-manager
9 | name: odigos-operator-controller-manager-metrics-service
10 | spec:
11 | ports:
12 | - name: https
13 | port: 8443
14 | protocol: TCP
15 | targetPort: 8443
16 | selector:
17 | control-plane: controller-manager
18 | status:
19 | loadBalancer: {}
20 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-metrics-reader_rbac.authorization.k8s.io_v1_clusterrole.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRole
3 | metadata:
4 | creationTimestamp: null
5 | name: odigos-operator-metrics-reader
6 | rules:
7 | - nonResourceURLs:
8 | - /metrics
9 | verbs:
10 | - get
11 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-odigos-version-bccd424bcm_v1_configmap.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | data:
3 | ODIGOS_VERSION: 1.0.164
4 | kind: ConfigMap
5 | metadata:
6 | name: odigos-operator-odigos-version-bccd424bcm
7 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-odigos-version-db9k7g76mc_v1_configmap.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | data:
3 | ODIGOS_VERSION: 1.0.185
4 | kind: ConfigMap
5 | metadata:
6 | name: odigos-operator-odigos-version-db9k7g76mc
7 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-odigos-version-m5529f26df_v1_configmap.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | data:
3 | ODIGOS_VERSION: 1.0.183
4 | kind: ConfigMap
5 | metadata:
6 | name: odigos-operator-odigos-version-m5529f26df
7 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-odigos-version-mk99cdcf27_v1_configmap.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | data:
3 | ODIGOS_VERSION: 1.0.170
4 | kind: ConfigMap
5 | metadata:
6 | name: odigos-operator-odigos-version-mk99cdcf27
7 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-odigos-version-t9g2c28b4f_v1_configmap.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | data:
3 | ODIGOS_VERSION: 1.0.177
4 | kind: ConfigMap
5 | metadata:
6 | name: odigos-operator-odigos-version-t9g2c28b4f
7 |
--------------------------------------------------------------------------------
/operator/bundle/manifests/odigos-operator-odigos-viewer-role_rbac.authorization.k8s.io_v1_clusterrole.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRole
3 | metadata:
4 | creationTimestamp: null
5 | labels:
6 | app.kubernetes.io/managed-by: kustomize
7 | app.kubernetes.io/name: odigos-operator
8 | name: odigos-operator-odigos-viewer-role
9 | rules:
10 | - apiGroups:
11 | - operator.odigos.io
12 | resources:
13 | - odigos
14 | verbs:
15 | - get
16 | - list
17 | - watch
18 | - apiGroups:
19 | - operator.odigos.io
20 | resources:
21 | - odigos/status
22 | verbs:
23 | - get
24 |
--------------------------------------------------------------------------------
/operator/config/crd/kustomizeconfig.yaml:
--------------------------------------------------------------------------------
1 | # This file is for teaching kustomize how to substitute name and namespace reference in CRD
2 | nameReference:
3 | - kind: Service
4 | version: v1
5 | fieldSpecs:
6 | - kind: CustomResourceDefinition
7 | version: v1
8 | group: apiextensions.k8s.io
9 | path: spec/conversion/webhook/clientConfig/service/name
10 |
11 | namespace:
12 | - kind: CustomResourceDefinition
13 | version: v1
14 | group: apiextensions.k8s.io
15 | path: spec/conversion/webhook/clientConfig/service/namespace
16 | create: false
17 |
18 | varReference:
19 | - path: metadata/annotations
20 |
--------------------------------------------------------------------------------
/operator/config/default/manager_metrics_patch.yaml:
--------------------------------------------------------------------------------
1 | # This patch adds the args to allow exposing the metrics endpoint using HTTPS
2 | - op: add
3 | path: /spec/template/spec/containers/0/args/0
4 | value: --metrics-bind-address=:8443
5 |
--------------------------------------------------------------------------------
/operator/config/default/metrics_service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | labels:
5 | control-plane: controller-manager
6 | app.kubernetes.io/name: odigos-operator
7 | app.kubernetes.io/managed-by: kustomize
8 | name: controller-manager-metrics-service
9 | namespace: system
10 | spec:
11 | ports:
12 | - name: https
13 | port: 8443
14 | protocol: TCP
15 | targetPort: 8443
16 | selector:
17 | control-plane: controller-manager
18 |
--------------------------------------------------------------------------------
/operator/config/network-policy/kustomization.yaml:
--------------------------------------------------------------------------------
1 | resources:
2 | - allow-metrics-traffic.yaml
3 |
--------------------------------------------------------------------------------
/operator/config/prometheus/kustomization.yaml:
--------------------------------------------------------------------------------
1 | resources:
2 | - monitor.yaml
3 |
--------------------------------------------------------------------------------
/operator/config/rbac/leader_election_role_binding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: RoleBinding
3 | metadata:
4 | labels:
5 | app.kubernetes.io/name: odigos-operator
6 | app.kubernetes.io/managed-by: kustomize
7 | name: leader-election-rolebinding
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: Role
11 | name: leader-election-role
12 | subjects:
13 | - kind: ServiceAccount
14 | name: controller-manager
15 | namespace: system
16 |
--------------------------------------------------------------------------------
/operator/config/rbac/metrics_auth_role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRole
3 | metadata:
4 | name: metrics-auth-role
5 | rules:
6 | - apiGroups:
7 | - authentication.k8s.io
8 | resources:
9 | - tokenreviews
10 | verbs:
11 | - create
12 | - apiGroups:
13 | - authorization.k8s.io
14 | resources:
15 | - subjectaccessreviews
16 | verbs:
17 | - create
18 |
--------------------------------------------------------------------------------
/operator/config/rbac/metrics_auth_role_binding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | name: metrics-auth-rolebinding
5 | roleRef:
6 | apiGroup: rbac.authorization.k8s.io
7 | kind: ClusterRole
8 | name: metrics-auth-role
9 | subjects:
10 | - kind: ServiceAccount
11 | name: controller-manager
12 | namespace: system
13 |
--------------------------------------------------------------------------------
/operator/config/rbac/metrics_reader_role.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRole
3 | metadata:
4 | name: metrics-reader
5 | rules:
6 | - nonResourceURLs:
7 | - "/metrics"
8 | verbs:
9 | - get
10 |
--------------------------------------------------------------------------------
/operator/config/rbac/odigos_editor_role.yaml:
--------------------------------------------------------------------------------
1 | # permissions for end users to edit odigos.
2 | apiVersion: rbac.authorization.k8s.io/v1
3 | kind: ClusterRole
4 | metadata:
5 | labels:
6 | app.kubernetes.io/name: odigos-operator
7 | app.kubernetes.io/managed-by: kustomize
8 | name: odigos-editor-role
9 | rules:
10 | - apiGroups:
11 | - operator.odigos.io
12 | resources:
13 | - odigos
14 | verbs:
15 | - create
16 | - delete
17 | - get
18 | - list
19 | - patch
20 | - update
21 | - watch
22 | - apiGroups:
23 | - operator.odigos.io
24 | resources:
25 | - odigos/status
26 | verbs:
27 | - get
28 |
--------------------------------------------------------------------------------
/operator/config/rbac/odigos_viewer_role.yaml:
--------------------------------------------------------------------------------
1 | # permissions for end users to view odigos.
2 | apiVersion: rbac.authorization.k8s.io/v1
3 | kind: ClusterRole
4 | metadata:
5 | labels:
6 | app.kubernetes.io/name: odigos-operator
7 | app.kubernetes.io/managed-by: kustomize
8 | name: odigos-viewer-role
9 | rules:
10 | - apiGroups:
11 | - operator.odigos.io
12 | resources:
13 | - odigos
14 | verbs:
15 | - get
16 | - list
17 | - watch
18 | - apiGroups:
19 | - operator.odigos.io
20 | resources:
21 | - odigos/status
22 | verbs:
23 | - get
24 |
--------------------------------------------------------------------------------
/operator/config/rbac/role_binding.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: rbac.authorization.k8s.io/v1
2 | kind: ClusterRoleBinding
3 | metadata:
4 | labels:
5 | app.kubernetes.io/name: odigos-operator
6 | app.kubernetes.io/managed-by: kustomize
7 | name: manager-rolebinding
8 | roleRef:
9 | apiGroup: rbac.authorization.k8s.io
10 | kind: ClusterRole
11 | name: manager-role
12 | subjects:
13 | - kind: ServiceAccount
14 | name: controller-manager
15 | namespace: system
16 |
--------------------------------------------------------------------------------
/operator/config/rbac/service_account.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: ServiceAccount
3 | metadata:
4 | labels:
5 | app.kubernetes.io/name: odigos-operator
6 | app.kubernetes.io/managed-by: kustomize
7 | name: controller-manager
8 | namespace: system
9 |
--------------------------------------------------------------------------------
/operator/config/samples/kustomization.yaml:
--------------------------------------------------------------------------------
1 | ## Append samples of your project ##
2 | resources:
3 | - operator_v1alpha1_odigos.yaml
4 | # +kubebuilder:scaffold:manifestskustomizesamples
5 |
--------------------------------------------------------------------------------
/operator/config/samples/operator_v1alpha1_odigos.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: operator.odigos.io/v1alpha1
2 | kind: Odigos
3 | metadata:
4 | labels:
5 | app.kubernetes.io/name: odigos-operator
6 | app.kubernetes.io/managed-by: kustomize
7 | name: odigos-sample
8 | spec:
9 | # TODO(user): Add fields here
10 |
--------------------------------------------------------------------------------
/operator/config/scorecard/bases/config.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: scorecard.operatorframework.io/v1alpha3
2 | kind: Configuration
3 | metadata:
4 | name: config
5 | stages:
6 | - parallel: true
7 | tests: []
8 |
--------------------------------------------------------------------------------
/operator/config/scorecard/kustomization.yaml:
--------------------------------------------------------------------------------
1 | resources:
2 | - bases/config.yaml
3 | apiVersion: kustomize.config.k8s.io/v1beta1
4 | kind: Kustomization
5 | patches:
6 | - path: patches/basic.config.yaml
7 | target:
8 | group: scorecard.operatorframework.io
9 | kind: Configuration
10 | name: config
11 | version: v1alpha3
12 | - path: patches/olm.config.yaml
13 | target:
14 | group: scorecard.operatorframework.io
15 | kind: Configuration
16 | name: config
17 | version: v1alpha3
18 | # +kubebuilder:scaffold:patches
19 |
--------------------------------------------------------------------------------
/operator/config/scorecard/patches/basic.config.yaml:
--------------------------------------------------------------------------------
1 | - op: add
2 | path: /stages/0/tests/-
3 | value:
4 | entrypoint:
5 | - scorecard-test
6 | - basic-check-spec
7 | image: quay.io/operator-framework/scorecard-test:v1.39.1
8 | labels:
9 | suite: basic
10 | test: basic-check-spec-test
11 |
--------------------------------------------------------------------------------
/operator/example-odigos.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: operator.odigos.io/v1alpha1
2 | kind: Odigos
3 | metadata:
4 | name: sample
5 | namespace: odigos-operator-system
6 | spec:
7 | version: v1.0.143
8 |
--------------------------------------------------------------------------------
/operator/hack/boilerplate.go.txt:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2025.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
--------------------------------------------------------------------------------
/procdiscovery/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/odigos-io/odigos/procdiscovery
2 |
3 | go 1.24.0
4 |
5 | require (
6 | github.com/hashicorp/go-version v1.7.0
7 | github.com/odigos-io/odigos/common v0.0.0
8 | )
9 |
10 | require (
11 | github.com/go-logr/logr v1.4.2
12 | go.opentelemetry.io/otel v1.35.0 // indirect
13 | go.opentelemetry.io/otel/trace v1.35.0 // indirect
14 | )
15 |
16 | replace github.com/odigos-io/odigos/common => ../common
17 |
--------------------------------------------------------------------------------
/profiles/attributes/categoryattributes.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var CategoryAttributesProfile = profile.Profile{
9 | ProfileName: common.ProfileName("category-attributes"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Add category attributes to the spans",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/attributes/codeattributes.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var CodeAttributesProfile = profile.Profile{
9 | ProfileName: common.ProfileName("code-attributes"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Record span attributes in 'code' namespace where supported",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/attributes/copyscope.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var CopyScopeProfile = profile.Profile{
9 | ProfileName: common.ProfileName("copy-scope"),
10 | MinimumTier: common.CommunityOdigosTier,
11 | ShortDescription: "Copy the scope name into a separate attribute for backends that do not support scopes",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/attributes/hostnameaspodname.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var HostnameAsPodNameProfile = profile.Profile{
9 | ProfileName: common.ProfileName("hostname-as-podname"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Populate the spans resource `host.name` attribute with value of `k8s.pod.name`",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/attributes/queryoperationdetector.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var QueryOperationDetector = profile.Profile{
9 | ProfileName: common.ProfileName("query-operation-detector"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Detect the SQL operation name from the query text",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/attributes/reducespannamecardinality.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var ReduceSpanNameCardinalityProfile = profile.Profile{
9 | ProfileName: common.ProfileName("reduce-span-name-cardinality"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Reduce the cardinality of the span name by replacing common scenarios observed",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/attributes/semconvupgrader.go:
--------------------------------------------------------------------------------
1 | package attributes
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var SemconvUpgraderProfile = profile.Profile{
9 | ProfileName: common.ProfileName("semconv"),
10 | MinimumTier: common.CommunityOdigosTier,
11 | ShortDescription: "Upgrade and align some attribute names to a newer version of the OpenTelemetry semantic conventions",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/odigos-io/odigos/profiles
2 |
3 | go 1.24.0
4 |
5 | require github.com/odigos-io/odigos/common v0.0.0
6 |
7 | require (
8 | github.com/go-logr/logr v1.4.2 // indirect
9 | github.com/hashicorp/go-version v1.7.0 // indirect
10 | go.opentelemetry.io/otel v1.35.0 // indirect
11 | go.opentelemetry.io/otel/trace v1.35.0 // indirect
12 | )
13 |
14 | replace github.com/odigos-io/odigos/common => ../common
15 |
--------------------------------------------------------------------------------
/profiles/instrumentation/concurentagents.go:
--------------------------------------------------------------------------------
1 | package instrumentation
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var AllowConcurrentAgents = profile.Profile{
9 | ProfileName: common.ProfileName("allow_concurrent_agents"),
10 | MinimumTier: common.CommunityOdigosTier,
11 | ShortDescription: "This profile allows Odigos to run concurrently with other agents",
12 | ModifyConfigFunc: func(c *common.OdigosConfiguration) {
13 | if c.AllowConcurrentAgents == nil {
14 | allowConcurrentAgents := true
15 | c.AllowConcurrentAgents = &allowConcurrentAgents
16 | }
17 | },
18 | }
19 |
--------------------------------------------------------------------------------
/profiles/instrumentation/dotnet_distro.go:
--------------------------------------------------------------------------------
1 | package instrumentation
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var LegacyDotNetProfile = profile.Profile{
9 | ProfileName: common.ProfileName("legacy-dotnet-instrumentation"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Instrument DotNet applications using legacy OpenTelemetry instrumentation (needed for 6.0 support)",
12 | }
13 |
--------------------------------------------------------------------------------
/profiles/manifests/code-attributes.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: InstrumentationRule
3 | metadata:
4 | name: code-attributes
5 | spec:
6 | ruleName: "collect all available code attributes"
7 | notes: "Auto generated rule from code-attributes profile. Do not edit."
8 | codeAttributes:
9 | column: true
10 | filePath: true
11 | function: true
12 | lineNumber: true
13 | namespace: true
14 | stackTrace: true
15 |
--------------------------------------------------------------------------------
/profiles/manifests/copy-scope.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Processor
3 | metadata:
4 | name: copy-scope
5 | namespace: odigos-system
6 | spec:
7 | type: transform
8 | processorName: "copy scope"
9 | notes: "Auto generated rule from copy-scope profile. Do not edit."
10 | processorConfig:
11 | trace_statements:
12 | - context: span
13 | statements:
14 | - set(attributes["otel.instrumentation.scope"], instrumentation_scope.name)
15 | signals:
16 | - TRACES
17 | collectorRoles:
18 | - CLUSTER_GATEWAY
--------------------------------------------------------------------------------
/profiles/manifests/db-payload-collection.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: InstrumentationRule
3 | metadata:
4 | name: db-payload-collection
5 | spec:
6 | ruleName: "db payload collection"
7 | notes: "Auto generated rule from db-payload-collection profile. Do not edit."
8 | payloadCollection:
9 | dbQuery: {}
10 |
--------------------------------------------------------------------------------
/profiles/manifests/full-payload-collection.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: InstrumentationRule
3 | metadata:
4 | name: full-payload-collection
5 | spec:
6 | ruleName: "full payload collection"
7 | notes: "Auto generated rule from full-payload-collection profile. Do not edit."
8 | payloadCollection:
9 | httpRequest: {}
10 | httpResponse: {}
11 | dbQuery: {}
12 | messaging: {}
13 |
--------------------------------------------------------------------------------
/profiles/manifests/hostname-as-podname.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Processor
3 | metadata:
4 | name: hostname-as-podname
5 | namespace: odigos-system
6 | spec:
7 | type: resource
8 | processorName: "host.name as pod.name"
9 | notes: "Auto generated rule from hostname-as-podname profile. Do not edit."
10 | processorConfig:
11 | attributes:
12 | - key: host.name
13 | from_attribute: k8s.pod.name
14 | action: insert
15 | signals:
16 | - TRACES
17 | collectorRoles:
18 | - CLUSTER_GATEWAY
--------------------------------------------------------------------------------
/profiles/manifests/java-ebpf-instrumentations.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: InstrumentationRule
3 | metadata:
4 | name: java-ebpf-instrumentations
5 | spec:
6 | ruleName: "java ebpf instrumentations"
7 | notes: "Auto generated rule from java-ebpf-instrumentations profile. Do not edit."
8 | otelSdks:
9 | otelSdkByLanguage:
10 | java:
11 | sdkTier: "enterprise"
12 | sdkType: "ebpf"
13 | otelDistros:
14 | otelDistroNames:
15 | - "java-ebpf-instrumentations"
16 |
--------------------------------------------------------------------------------
/profiles/manifests/legacy-dotnet-instrumentation.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: InstrumentationRule
3 | metadata:
4 | name: legacy-dotnet-instrumentation
5 | spec:
6 | ruleName: "legacy dotnet instrumentation"
7 | notes: "Auto generated rule from legacy-dotnet-instrumentation profile. Do not edit."
8 | otelSdks:
9 | otelSdkByLanguage:
10 | dotnet:
11 | sdkTier: "enterprise"
12 | sdkType: "native"
13 | otelDistros:
14 | otelDistroNames:
15 | - "dotnet-legacy"
16 |
--------------------------------------------------------------------------------
/profiles/manifests/query-operation-detector.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Processor
3 | metadata:
4 | name: query-operation-detector
5 | namespace: odigos-system
6 | spec:
7 | type: odigossqldboperationprocessor
8 | processorName: query-operation-detector
9 | notes: "Auto generated rule from query-operation-detector profile. Do not edit."
10 | processorConfig: {}
11 | # Should be after the semconv processor
12 | orderHint: 150
13 | signals:
14 | - TRACES
15 | collectorRoles:
16 | - CLUSTER_GATEWAY
17 |
--------------------------------------------------------------------------------
/profiles/manifests/small-batches.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Processor
3 | metadata:
4 | name: small-batches
5 | namespace: odigos-system
6 | spec:
7 | type: batch
8 | processorConfig:
9 | send_batch_size: 1 # This processor is after batching happened, and is only to split large ones into smaller ones
10 | send_batch_max_size: 256
11 | orderHint: 100 # Should be after the default batch with orderHint 0, preferably after other processors
12 | signals:
13 | - TRACES
14 | collectorRoles:
15 | - CLUSTER_GATEWAY
16 |
--------------------------------------------------------------------------------
/profiles/pipeline/smallbatches.go:
--------------------------------------------------------------------------------
1 | package pipeline
2 |
3 | import (
4 | "github.com/odigos-io/odigos/common"
5 | "github.com/odigos-io/odigos/profiles/profile"
6 | )
7 |
8 | var SmallBatchesProfile = profile.Profile{
9 | ProfileName: common.ProfileName("small-batches"),
10 | MinimumTier: common.OnPremOdigosTier,
11 | ShortDescription: "Reduce the batch size for exports",
12 | }
13 |
--------------------------------------------------------------------------------
/scheduler/.dockerignore:
--------------------------------------------------------------------------------
1 | # More info: https://docs.docker.com/engine/reference/builder/#dockerignore-file
2 | # Ignore build and test binaries.
3 | bin/
4 | testbin/
5 |
--------------------------------------------------------------------------------
/scheduler/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Binaries for programs and plugins
3 | *.exe
4 | *.exe~
5 | *.dll
6 | *.so
7 | *.dylib
8 | bin
9 | testbin/*
10 |
11 | # Test binary, build with `go test -c`
12 | *.test
13 |
14 | # Output of the go coverage tool, specifically when used with LiteIDE
15 | *.out
16 |
17 | # Kubernetes Generated files - skip generated files, except for vendored files
18 |
19 | !vendor/**/zz_generated.*
20 |
21 | # editor and IDE paraphernalia
22 | .idea
23 | *.swp
24 | *.swo
25 | *~
26 |
--------------------------------------------------------------------------------
/scheduler/PROJECT:
--------------------------------------------------------------------------------
1 | domain: odigos.io
2 | layout:
3 | - go.kubebuilder.io/v3
4 | projectName: scheduler
5 | repo: github.com/odigos-io/odigos/scheduler
6 | resources:
7 | - controller: true
8 | domain: odigos.io
9 | kind: InstrumentationConfig
10 | version: v1alpha1
11 | - controller: true
12 | domain: odigos.io
13 | kind: CollectorsGroup
14 | version: v1alpha1
15 | - controller: true
16 | domain: odigos.io
17 | group: odigos.io
18 | kind: Destination
19 | version: v1alpha1
20 | version: "3"
21 |
--------------------------------------------------------------------------------
/scheduler/controllers/clustercollectorsgroup/destinations_controller.go:
--------------------------------------------------------------------------------
1 | package clustercollectorsgroup
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/k8sutils/pkg/utils"
7 | "k8s.io/apimachinery/pkg/runtime"
8 | ctrl "sigs.k8s.io/controller-runtime"
9 | "sigs.k8s.io/controller-runtime/pkg/client"
10 | )
11 |
12 | type clusterCollectorsGroupController struct {
13 | client.Client
14 | Scheme *runtime.Scheme
15 | }
16 |
17 | func (r *clusterCollectorsGroupController) Reconcile(ctx context.Context, _ ctrl.Request) (ctrl.Result, error) {
18 | err := sync(ctx, r.Client)
19 | return utils.K8SNoEffectiveConfigErrorHandler(err)
20 | }
21 |
--------------------------------------------------------------------------------
/scheduler/controllers/clustercollectorsgroup/odigosconfig_controller.go:
--------------------------------------------------------------------------------
1 | package clustercollectorsgroup
2 |
3 | import (
4 | "context"
5 |
6 | "k8s.io/apimachinery/pkg/runtime"
7 | ctrl "sigs.k8s.io/controller-runtime"
8 | "sigs.k8s.io/controller-runtime/pkg/client"
9 | )
10 |
11 | type odigosConfigController struct {
12 | client.Client
13 | Scheme *runtime.Scheme
14 | }
15 |
16 | func (r *odigosConfigController) Reconcile(ctx context.Context, _ ctrl.Request) (ctrl.Result, error) {
17 | err := sync(ctx, r.Client)
18 | return ctrl.Result{}, err
19 | }
20 |
--------------------------------------------------------------------------------
/scheduler/controllers/nodecollectorsgroup/clustercollectorsgroup_controller.go:
--------------------------------------------------------------------------------
1 | package nodecollectorsgroup
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/k8sutils/pkg/utils"
7 | "k8s.io/apimachinery/pkg/runtime"
8 | ctrl "sigs.k8s.io/controller-runtime"
9 | "sigs.k8s.io/controller-runtime/pkg/client"
10 | )
11 |
12 | type clusterCollectorsGroupController struct {
13 | client.Client
14 | Scheme *runtime.Scheme
15 | }
16 |
17 | func (r *clusterCollectorsGroupController) Reconcile(ctx context.Context, _ ctrl.Request) (ctrl.Result, error) {
18 | err := sync(ctx, r.Client)
19 | return utils.K8SNoEffectiveConfigErrorHandler(err)
20 | }
21 |
--------------------------------------------------------------------------------
/scheduler/controllers/nodecollectorsgroup/instrumentationconfig_controller.go:
--------------------------------------------------------------------------------
1 | package nodecollectorsgroup
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/k8sutils/pkg/utils"
7 | "k8s.io/apimachinery/pkg/runtime"
8 | ctrl "sigs.k8s.io/controller-runtime"
9 | "sigs.k8s.io/controller-runtime/pkg/client"
10 | )
11 |
12 | type instrumentationConfigController struct {
13 | client.Client
14 | Scheme *runtime.Scheme
15 | }
16 |
17 | func (r *instrumentationConfigController) Reconcile(ctx context.Context, _ ctrl.Request) (ctrl.Result, error) {
18 | err := sync(ctx, r.Client)
19 | return utils.K8SNoEffectiveConfigErrorHandler(err)
20 | }
21 |
--------------------------------------------------------------------------------
/scheduler/controllers/nodecollectorsgroup/odigosconfig_controller.go:
--------------------------------------------------------------------------------
1 | package nodecollectorsgroup
2 |
3 | import (
4 | "context"
5 |
6 | "github.com/odigos-io/odigos/k8sutils/pkg/utils"
7 | "k8s.io/apimachinery/pkg/runtime"
8 | ctrl "sigs.k8s.io/controller-runtime"
9 | "sigs.k8s.io/controller-runtime/pkg/client"
10 | )
11 |
12 | type odigosConfigController struct {
13 | client.Client
14 | Scheme *runtime.Scheme
15 | }
16 |
17 | func (r *odigosConfigController) Reconcile(ctx context.Context, _ ctrl.Request) (ctrl.Result, error) {
18 | err := sync(ctx, r.Client)
19 | return utils.K8SNoEffectiveConfigErrorHandler(err)
20 | }
21 |
--------------------------------------------------------------------------------
/scheduler/controllers/odigosconfig/utils.go:
--------------------------------------------------------------------------------
1 | package odigosconfig
2 |
3 | func mergeIgnoredItemLists(l1 []string, l2 []string) []string {
4 |
5 | merged := map[string]struct{}{}
6 |
7 | for _, i := range l1 {
8 | merged[i] = struct{}{}
9 | }
10 | for _, i := range l2 {
11 | merged[i] = struct{}{}
12 | }
13 |
14 | mergedList := make([]string, 0, len(merged))
15 | for i := range merged {
16 | mergedList = append(mergedList, i)
17 | }
18 |
19 | return mergedList
20 | }
21 |
--------------------------------------------------------------------------------
/scheduler/hack/boilerplate.go.txt:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022.
3 |
4 | Licensed under the Apache License, Version 2.0 (the "License");
5 | you may not use this file except in compliance with the License.
6 | You may obtain a copy of the License at
7 |
8 | http://www.apache.org/licenses/LICENSE-2.0
9 |
10 | Unless required by applicable law or agreed to in writing, software
11 | distributed under the License is distributed on an "AS IS" BASIS,
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | See the License for the specific language governing permissions and
14 | limitations under the License.
15 | */
--------------------------------------------------------------------------------
/tests-infrastructure/terraform/aks/outputs.tf:
--------------------------------------------------------------------------------
1 | output "kube_config" {
2 | value = azurerm_kubernetes_cluster.aks.kube_config_raw
3 | sensitive = true
4 | }
5 |
--------------------------------------------------------------------------------
/tests-infrastructure/terraform/aks/provider.tf:
--------------------------------------------------------------------------------
1 | provider "azurerm" {
2 | features {}
3 | }
--------------------------------------------------------------------------------
/tests-infrastructure/terraform/aks/variables.tf:
--------------------------------------------------------------------------------
1 | variable "resource_group_name" {
2 | description = "Name of the resource group"
3 | default = "tests-rg"
4 | }
5 |
6 | variable "cluster_name" {
7 | description = "Name of the AKS cluster"
8 | default = "tests-aks"
9 | }
10 |
11 | variable "node_count" {
12 | description = "Number of nodes in the cluster"
13 | default = 2
14 | }
15 |
--------------------------------------------------------------------------------
/tests-infrastructure/terraform/eks/outputs.tf:
--------------------------------------------------------------------------------
1 | output "vpc_id" {
2 | description = "The VPC ID"
3 | value = module.vpc.vpc_id
4 | }
5 |
6 | output "cluster_endpoint" {
7 | description = "The EKS cluster endpoint"
8 | value = module.eks.cluster_endpoint
9 | }
10 |
11 | output "cluster_name" {
12 | description = "The EKS cluster name"
13 | value = module.eks.cluster_id
14 | }
15 |
--------------------------------------------------------------------------------
/tests-infrastructure/terraform/eks/provider.tf:
--------------------------------------------------------------------------------
1 | provider "aws" {
2 | region = var.region
3 | }
4 |
--------------------------------------------------------------------------------
/tests-infrastructure/terraform/eks/variables.tf:
--------------------------------------------------------------------------------
1 | variable "cluster_name" {
2 | description = "Name of the EKS cluster"
3 | default = "tests-eks"
4 | }
5 |
6 | variable "region" {
7 | description = "AWS region to deploy the cluster in"
8 | default = "us-east-1"
9 | }
10 |
11 | variable "node_count" {
12 | description = "Number of nodes in the cluster"
13 | default = 2
14 | }
15 |
16 | variable "node_spec" {
17 | description = "The node spec for the cluster"
18 | default = "m6a.large"
19 | }
20 |
--------------------------------------------------------------------------------
/tests/backpressure-exporter.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Destination
3 | metadata:
4 | name: mockdestination
5 | namespace: odigos-system
6 | spec:
7 | data:
8 | MOCK_RESPONSE_DURATION_MS: "500"
9 | MOCK_REJECT_FRACTION: "1"
10 | destinationName: mock-back-pressure
11 | signals:
12 | - TRACES
13 | - METRICS
14 | - LOGS
15 | type: mock
16 |
--------------------------------------------------------------------------------
/tests/chaos/experiments/network-latency.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: chaos-mesh.org/v1alpha1
2 | kind: NetworkChaos
3 | metadata:
4 | name: network-delay
5 | namespace: ${NAMESPACE}
6 | spec:
7 | action: delay
8 | mode: all
9 | selector:
10 | labelSelectors:
11 | app.kubernetes.io/name: ${APP_NAME}
12 | pod-template-hash: ${TEMPLATE_HASH}
13 | delay:
14 | latency: ${LATENCY}
15 | jitter: ${JITTER}
--------------------------------------------------------------------------------
/tests/common/apply/add-simple-trace-db-destination.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Destination
3 | metadata:
4 | name: odigos.io.dest.simple-trace-db
5 | namespace: odigos-test
6 | spec:
7 | data:
8 | OTLP_HTTP_ENDPOINT: http://simple-trace-db.traces:4318
9 | destinationName: e2e-tests
10 | signals:
11 | - TRACES
12 | type: otlphttp
13 |
--------------------------------------------------------------------------------
/tests/common/apply/instrument-default-ns.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: default
5 | namespace: default
6 | labels:
7 | odigos.io/e2e: source
8 | spec:
9 | workload:
10 | name: default
11 | namespace: default
12 | kind: Namespace
--------------------------------------------------------------------------------
/tests/common/apply/kind-config.yaml:
--------------------------------------------------------------------------------
1 | kind: Cluster
2 | apiVersion: kind.x-k8s.io/v1alpha4
3 | nodes:
4 | - role: control-plane
5 | - role: worker
--------------------------------------------------------------------------------
/tests/common/assert-multiple-yaml-files.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | files=(
4 | "assert-runtime-detected.yaml"
5 | "assert-instrumented-and-pipeline.yaml"
6 | )
7 |
8 | for file in "${files[@]}"; do
9 | echo "Asserting $file..."
10 | # Your logic to assert the YAML file
11 | # For example, use yamllint or a custom validation
12 | yamllint "$file" || exit 1
13 | done
14 |
15 | echo "All YAML files passed assertions."
16 |
--------------------------------------------------------------------------------
/tests/common/assert/jaeger-installed.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | labels:
5 | app: jaeger
6 | namespace: tracing
7 | status:
8 | containerStatuses:
9 | - name: jaeger
10 | ready: true
11 | restartCount: 0
12 | started: true
13 | phase: Running
14 |
--------------------------------------------------------------------------------
/tests/common/assert/node-odiglet-label.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Node
3 | metadata:
4 | labels:
5 | odigos.io/odiglet-oss-installed: "true"
6 |
--------------------------------------------------------------------------------
/tests/common/assert/simple-trace-db-running.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: simple-trace-db
5 | namespace: traces
6 | status:
7 | readyReplicas: 1
8 |
--------------------------------------------------------------------------------
/tests/common/queries/wait-for-trace-reported.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: e2e.tests.odigos.io/v1
2 | kind: TraceTest
3 | description: This test waits for a trace that goes from frontend to pricing, inventory, coupon, membership, and currency services
4 | query: |
5 | length([?span.serviceName == 'frontend-reported']) > `0` &&
6 | length([?span.serviceName == 'pricing-reported']) > `0` &&
7 | length([?span.serviceName == 'inventory-reported']) > `0` &&
8 | length([?span.serviceName == 'coupon-reported']) > `0` &&
9 | length([?span.serviceName == 'membership-reported']) > `0` &&
10 | length([?span.serviceName == 'currency-reported']) > `0`
11 | expected:
12 | count: 1
13 |
--------------------------------------------------------------------------------
/tests/common/queries/wait-for-trace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: e2e.tests.odigos.io/v1
2 | kind: TraceTest
3 | description: This test waits for a trace that goes from frontend to pricing, inventory, coupon, membership, and currency services
4 | query: |
5 | length([?span.serviceName == 'frontend']) > `0` &&
6 | length([?span.serviceName == 'pricing']) > `0` &&
7 | length([?span.serviceName == 'inventory']) > `0` &&
8 | length([?span.serviceName == 'coupon']) > `0` &&
9 | length([?span.serviceName == 'membership']) > `0` &&
10 | length([?span.serviceName == 'currency']) > `0`
11 | expected:
12 | count: 1
13 |
--------------------------------------------------------------------------------
/tests/debug-exporter.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Destination
3 | metadata:
4 | name: debug
5 | namespace: odigos-system
6 | spec:
7 | data:
8 | VERBOSITY: detailed
9 | # uncomment next line to only sample 1 item (batch to export) per second
10 | # ITEMS_PER_SECOND: '1'
11 | destinationName: debug
12 | signals:
13 | # comment the ones you don't want to
14 | - TRACES
15 | - METRICS
16 | - LOGS
17 | type: debug
18 |
--------------------------------------------------------------------------------
/tests/dynamic-exporter.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Destination
3 | metadata:
4 | name: dynamic-destination
5 | namespace: odigos-system
6 | spec:
7 | data:
8 | DYNAMIC_DESTINATION_NAME: "dynamic-jaeger-destination"
9 | DYNAMIC_DESTINATION_TYPE: otlp
10 | DYNAMIC_CONFIGURATION_DATA: |
11 | endpoint: jaeger.tracing:4317
12 | tls:
13 | insecure: true
14 | destinationName: "dynamic-jeager-destination"
15 | signals:
16 | - TRACES
17 | type: dynamic
18 |
--------------------------------------------------------------------------------
/tests/e2e/cli-upgrade/.gitignore:
--------------------------------------------------------------------------------
1 | # the odigos cli executable downloaded from github for the test to run
2 | odigos
3 | odigos-latest.tar.gz
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-01-assert-source-without-labels.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 01-source-without-labels
5 | namespace: default
6 | labels:
7 | odigos.io/workload-kind: Deployment
8 | odigos.io/workload-namespace: default
9 | odigos.io/workload-name: source-without-labels
10 | # TODO: uncomment when Data Streams are ready to use
11 | # odigos.io/group-default: 'true'
12 | spec:
13 | workload:
14 | name: source-without-labels
15 | namespace: default
16 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-01-source-without-labels.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 01-source-without-labels
5 | namespace: default
6 | spec:
7 | workload:
8 | name: source-without-labels
9 | namespace: default
10 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-02-source-with-labels.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 02-source-with-labels
5 | namespace: default
6 | labels:
7 | odigos.io/workload-kind: Deployment
8 | odigos.io/workload-namespace: default
9 | odigos.io/workload-name: source-with-labels
10 | spec:
11 | workload:
12 | name: source-with-labels
13 | namespace: default
14 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-03-assert-source-with-incorrect-labels.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 03-source-with-incorrect-labels
5 | namespace: default
6 | labels:
7 | odigos.io/workload-kind: Deployment
8 | odigos.io/workload-namespace: default
9 | odigos.io/workload-name: source-with-incorrect-labels
10 | spec:
11 | workload:
12 | name: source-with-incorrect-labels
13 | namespace: default
14 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-03-source-with-incorrect-labels.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 03-source-with-incorrect-labels
5 | namespace: default
6 | labels:
7 | odigos.io/workload-kind: StatefulSet
8 | odigos.io/workload-namespace: kube-system
9 | odigos.io/workload-name: foo
10 | spec:
11 | workload:
12 | name: source-with-incorrect-labels
13 | namespace: default
14 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-04-assert-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 04-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-instrumentation-finalizer
8 | spec:
9 | workload:
10 | name: finalizer
11 | namespace: default
12 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-04-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 04-finalizer
5 | namespace: default
6 | spec:
7 | workload:
8 | name: finalizer
9 | namespace: default
10 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-05-assert-disabled-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 05-disabled-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-instrumentation-finalizer
8 | spec:
9 | disableInstrumentation: true
10 | workload:
11 | name: disabled-finalizer
12 | namespace: default
13 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-05-assert-enabled-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 05-disabled-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-instrumentation-finalizer
8 | spec:
9 | workload:
10 | name: disabled-finalizer
11 | namespace: default
12 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/defaulting-05-disabled-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 05-disabled-finalizer
5 | namespace: default
6 | spec:
7 | disableInstrumentation: true
8 | workload:
9 | name: disabled-finalizer
10 | namespace: default
11 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/migration-01-assert-source-with-old-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: old-startlangdetection-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-instrumentation-finalizer
8 | spec:
9 | workload:
10 | name: old-startlangdetection-finalizer
11 | namespace: default
12 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/migration-01-source-with-old-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: old-startlangdetection-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-startlangdetection-finalizer
8 | spec:
9 | workload:
10 | name: old-startlangdetection-finalizer
11 | namespace: default
12 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/migration-02-assert-source-with-old-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: old-deleteinstrumentationconfig-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-instrumentation-finalizer
8 | spec:
9 | workload:
10 | name: old-deleteinstrumentationconfig-finalizer
11 | namespace: default
12 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/migration-02-source-with-old-finalizer.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: old-deleteinstrumentationconfig-finalizer
5 | namespace: default
6 | finalizers:
7 | - odigos.io/source-deleteinstrumentationconfig-finalizer
8 | spec:
9 | workload:
10 | name: old-deleteinstrumentationconfig-finalizer
11 | namespace: default
12 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-01-normal-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 06-normal-source
5 | namespace: default
6 | spec:
7 | workload:
8 | name: 06-normal-source
9 | namespace: default
10 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-02-excluded-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 07-excluded-source
5 | namespace: default
6 | spec:
7 | disableInstrumentation: true
8 | workload:
9 | name: 07-excluded-source
10 | namespace: default
11 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-03-namespace-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 08-namespace-source
5 | namespace: default
6 | spec:
7 | workload:
8 | name: default
9 | namespace: default
10 | kind: Namespace
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-04-duplicate-normal-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 09-duplicate-normal-source
5 | namespace: default
6 | spec:
7 | workload:
8 | name: 06-normal-source
9 | namespace: default
10 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-05-duplicate-excluded-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 10-duplicate-excluded-source
5 | namespace: default
6 | spec:
7 | disableInstrumentation: true
8 | workload:
9 | name: 07-excluded-source
10 | namespace: default
11 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-06-duplicate-namespace-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 11-duplicate-namespace-source
5 | namespace: default
6 | spec:
7 | workload:
8 | name: default
9 | namespace: default
10 | kind: Namespace
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-07-valid-workload-existing-ns-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 12-valid-workload-existing-ns
5 | namespace: default
6 | spec:
7 | workload:
8 | name: 12-valid-workload-existing-ns
9 | namespace: default
10 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-08-invalid-namespace-name-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 13-invalid-namespace-name
5 | namespace: default
6 | spec:
7 | workload:
8 | name: default
9 | namespace: kube-system
10 | kind: Namespace
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-09-invalid-workload-kind-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 14-invalid-workload-kind
5 | namespace: default
6 | spec:
7 | workload:
8 | name: 14-invalid-workload-kind
9 | namespace: default
10 | kind: CronJob
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-10-namespace-workload-namespace-source.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Source
3 | metadata:
4 | name: 15-namespace-workload-namespace
5 | namespace: default
6 | spec:
7 | workload:
8 | name: 15-namespace-workload-namespace
9 | namespace: kube-system
10 | kind: Deployment
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-action-11-no-config.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Action
3 | metadata:
4 | name: 01-action-no-config
5 | namespace: default
6 |
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-action-12-multi-config.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Action
3 | metadata:
4 | name: 02-action-multi-config
5 | namespace: default
6 | spec:
7 | addClusterInfo:
8 | clusterAttributes:
9 | - attributeName: foo
10 | attributeStringValue: bar
11 | deleteAttribute:
12 | attributeNamesToDelete:
13 | - baz
14 |
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-action-13-addClusterInfo.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Action
3 | metadata:
4 | name: 03-action-addclusterinfo
5 | namespace: default
6 | spec:
7 | signals:
8 | - TRACES
9 | addClusterInfo:
10 | clusterAttributes:
11 | - attributeName: foo
12 | attributeStringValue: bar
13 |
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-action-14-deleteAttribute.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Action
3 | metadata:
4 | name: 04-action-deleteattribute
5 | namespace: default
6 | spec:
7 | signals:
8 | - TRACES
9 | deleteAttribute:
10 | attributeNamesToDelete:
11 | - baz
12 |
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-action-15-renameAttribute.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Action
3 | metadata:
4 | name: 05-action-renameattribute
5 | namespace: default
6 | spec:
7 | signals:
8 | - TRACES
9 | renameAttribute:
10 | renames:
11 | bar: baz
12 |
--------------------------------------------------------------------------------
/tests/e2e/webhooks/validating-action-16-piiMasking.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Action
3 | metadata:
4 | name: 06-action-piimasking
5 | namespace: default
6 | spec:
7 | signals:
8 | - TRACES
9 | piiMasking:
10 | piiCategories:
11 | - CREDIT_CARD
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/03-create-action.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: actions.odigos.io/v1alpha1
2 | kind: AddClusterInfo
3 | metadata:
4 | name: insert-cluster-name
5 | namespace: odigos-test
6 | spec:
7 | actionName: insert-cluster-name
8 | clusterAttributes:
9 | - attributeName: k8s.cluster.name
10 | attributeStringValue: e2e-test-cluster
11 | signals:
12 | - TRACES
13 | - METRICS
14 | - LOGS
15 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/03-wait-for-trace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: e2e.tests.odigos.io/v1
2 | kind: TraceTest
3 | description: This test waits for a trace that is generated from the successful instrumented services.
4 | query: |
5 | length([?span.resourceAttributes."k8s.cluster.name" == 'e2e-test-cluster']) > `0`
6 | expected:
7 | count: 17
8 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/cpp-http-server/server.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | int main() {
4 | httplib::Server svr;
5 |
6 | svr.Get("/", [](const httplib::Request&, httplib::Response& res) {
7 | res.set_content("Hello, World!", "text/plain");
8 | });
9 |
10 | svr.listen("0.0.0.0", 3000);
11 | }
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/dotnet-http-server.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | net6.0
5 | net8.0
6 | dotnet-http-server
7 | enable
8 | enable
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/net6-glibc.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
2 | WORKDIR /src
3 | COPY . .
4 | ENV USE_DOTNET6=true
5 | RUN dotnet restore
6 | RUN dotnet publish -c Release -o /app
7 |
8 | FROM mcr.microsoft.com/dotnet/aspnet:6.0
9 | WORKDIR /app
10 | COPY --from=build /app .
11 | EXPOSE 8080
12 | ENTRYPOINT ["dotnet", "dotnet-http-server.dll"]
13 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/net6-musl.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build
2 | WORKDIR /src
3 | COPY . .
4 | ENV USE_DOTNET6=true
5 | RUN dotnet restore
6 | RUN dotnet publish -c Release -o /app
7 |
8 | FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine
9 | WORKDIR /app
10 | COPY --from=build /app .
11 | EXPOSE 8080
12 | ENTRYPOINT ["dotnet", "dotnet-http-server.dll"]
13 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/net8-glibc.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
2 | WORKDIR /src
3 | COPY . .
4 | RUN dotnet restore
5 | RUN dotnet publish -c Release -o /app
6 |
7 | FROM mcr.microsoft.com/dotnet/aspnet:8.0
8 | WORKDIR /app
9 | COPY --from=build /app .
10 | EXPOSE 8080
11 | ENTRYPOINT ["dotnet", "dotnet-http-server.dll"]
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/net8-musl.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
2 | WORKDIR /src
3 | COPY . .
4 | RUN dotnet restore
5 | RUN dotnet publish -c Release -o /app
6 |
7 | FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
8 | WORKDIR /app
9 | COPY --from=build /app .
10 | EXPOSE 8080
11 | ENTRYPOINT ["dotnet", "dotnet-http-server.dll"]
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/obj/dotnet-http-server.csproj.nuget.g.targets:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/dotnet-http-server/obj/project.nuget.cache:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "dgSpecHash": "9NJOUczYkvg=",
4 | "success": true,
5 | "projectFilePath": "/app/dotnet-http-server.csproj",
6 | "expectedPackageFiles": [],
7 | "logs": []
8 | }
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/java-azul.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:3.8.5-openjdk-17 AS build
2 | COPY src /home/app/src
3 | COPY pom.xml /home/app
4 | RUN mvn -f /home/app/pom.xml clean package
5 |
6 | FROM azul/zulu-openjdk-alpine:17.0.12-jre-headless
7 | COPY --from=build /home/app/target/*.jar /app/java-azul.jar
8 | USER 15000
9 | CMD ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseZGC", "-jar", "/app/java-azul.jar"]
10 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/java-latest-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:latest AS build
2 | COPY src /home/app/src
3 | COPY pom.xml /home/app
4 | RUN mvn -f /home/app/pom.xml clean package
5 |
6 | FROM eclipse-temurin:latest
7 | COPY --from=build /home/app/target/*.jar /app/java-latest-version.jar
8 | USER 15000
9 | CMD ["java","-jar", "/app/java-latest-version.jar"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/java-old-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:3.8.5-openjdk-11 AS build
2 | COPY src /home/app/src
3 | COPY pom11.xml /home/app
4 | RUN mvn -f /home/app/pom11.xml clean package
5 |
6 | FROM eclipse-temurin:11-jre-jammy
7 | COPY --from=build /home/app/target/*.jar /app/java-old-version.jar
8 | USER 15000
9 | CMD ["java","-jar", "/app/java-old-version.jar"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/java-supported-docker-env.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:3.8.5-openjdk-17 AS build
2 | COPY src /home/app/src
3 | COPY pom.xml /home/app
4 | RUN mvn -f /home/app/pom.xml clean package
5 |
6 | FROM eclipse-temurin:17.0.12_7-jre-jammy
7 | ENV JAVA_OPTS="-Dthis.does.not.exist=true"
8 | ENV LD_PRELOAD=""
9 | COPY --from=build /home/app/target/*.jar /app/java-supported-docker-env.jar
10 | USER 15000
11 | CMD ["sh", "-c", "java $JAVA_OPTS -jar /app/java-supported-docker-env.jar"]
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/java-supported-manifest-env.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:3.8.5-openjdk-17 AS build
2 | COPY src /home/app/src
3 | COPY pom.xml /home/app
4 | RUN mvn -f /home/app/pom.xml clean package
5 |
6 | FROM eclipse-temurin:17.0.12_7-jre-jammy
7 | COPY --from=build /home/app/target/*.jar /app/java-supported-manifest-env.jar
8 | USER 15000
9 | CMD ["java","-jar", "/app/java-supported-manifest-env.jar"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/java-supported-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM maven:3.8.5-openjdk-17 AS build
2 | COPY src /home/app/src
3 | COPY pom.xml /home/app
4 | RUN mvn -f /home/app/pom.xml clean package
5 |
6 | FROM eclipse-temurin:17.0.12_7-jre-jammy
7 | COPY --from=build /home/app/target/*.jar /app/java-supported-version.jar
8 | USER 15000
9 | CMD ["java","-jar", "/app/java-supported-version.jar"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/src/main/java/dev/keyval/kvshop/frontend/FrontendApplication.java:
--------------------------------------------------------------------------------
1 | package dev.keyval.kvshop.frontend;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class FrontendApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(FrontendApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/java-http-server/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=3000
2 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/dockerfile-env.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:20.17.0-alpine
2 | WORKDIR /app
3 | COPY ./package.json /app
4 | COPY ./yarn.lock /app
5 | RUN yarn install
6 | COPY . /app
7 | # this test uses the NODE_OPTIONS environment variable in the Dockerfile to run a script before the main application
8 | ENV NODE_OPTIONS="--require /app/execute_before.js --max-old-space-size=256"
9 | ENV CHECK_FOR_APP_REQUIRE="true"
10 | ENV CHECK_FOR_HEAP_SIZE="true"
11 | CMD ["node", "index.js"]
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/execute_before.js:
--------------------------------------------------------------------------------
1 | // set this global variable before running index.js, and then read it in the test.
2 | // this file is executed with the node --require flag, so it will run before the index.js file.
3 | global.executeBeforeApplied = true;
4 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/latest-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:current-alpine
2 | WORKDIR /app
3 | COPY ./package.json /app
4 | COPY ./yarn.lock /app
5 | RUN yarn install
6 | COPY . /app
7 | CMD ["node", "index.js"]
8 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/manifest-env.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:20.17.0-alpine
2 | WORKDIR /app
3 | COPY ./package.json /app
4 | COPY ./yarn.lock /app
5 | RUN yarn install
6 | COPY . /app
7 | # Both `--require /app/execute_before.js` and `--max-old-space-size=256` are applied in manifest
8 | ENV CHECK_FOR_APP_REQUIRE="true"
9 | ENV CHECK_FOR_HEAP_SIZE="true"
10 | CMD ["node", "index.js"]
11 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/minimum-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:14.0.0-alpine
2 | WORKDIR /app
3 | COPY ./package.json /app
4 | COPY ./yarn.lock /app
5 | RUN yarn install
6 | COPY . /app
7 | CMD ["node", "index.js"]
8 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-http-server",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "dependencies": {
7 | "express": "^4.21.2"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/unsupported-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:8.17.0-alpine
2 | WORKDIR /app
3 | COPY ./package.json /app
4 | COPY ./yarn.lock /app
5 | RUN yarn install
6 | COPY . /app
7 | CMD ["node", "index.js"]
8 |
9 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/nodejs-http-server/very-old-version.Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:8.17.0-alpine
2 | WORKDIR /app
3 | COPY ./package.json /app
4 | COPY ./yarn.lock /app
5 | RUN yarn install
6 | COPY . /app
7 | ENV NODE_VERSION=""
8 | CMD ["node", "index.js"]
9 |
10 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/Dockerfile.python-latest:
--------------------------------------------------------------------------------
1 | FROM python
2 |
3 | WORKDIR /app
4 | COPY . /app
5 |
6 | # Install dependencies from requirements.txt
7 | COPY requirements.txt /app/requirements.txt
8 |
9 | RUN apt-get update && apt-get install sqlite3 -y
10 |
11 | RUN pip install --no-cache-dir -r requirements.txt
12 |
13 | # Supress health check endpoint from tracing
14 | ENV OTEL_PYTHON_DJANGO_EXCLUDED_URLS=health/
15 |
16 | COPY entrypoint.sh /entrypoint.sh
17 |
18 | RUN chmod +x /entrypoint.sh
19 |
20 | ENTRYPOINT ["/entrypoint.sh"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/Dockerfile.python-not-supported-version:
--------------------------------------------------------------------------------
1 | # Dockerfile.python37-slim
2 | FROM python:3.6-slim
3 | WORKDIR /app
4 | COPY . /app
5 |
6 | RUN apt-get update && apt-get install sqlite3 -y
7 |
8 | RUN pip install --no-cache-dir -r requirements-legacy.txt
9 |
10 | # Supress health check endpoint from tracing
11 | ENV OTEL_PYTHON_DJANGO_EXCLUDED_URLS=health/
12 |
13 | COPY entrypoint.sh /entrypoint.sh
14 |
15 | RUN chmod +x /entrypoint.sh
16 |
17 | ENTRYPOINT ["/entrypoint.sh"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/Dockerfile.python-other-agent:
--------------------------------------------------------------------------------
1 | FROM python
2 |
3 | WORKDIR /app
4 | COPY . /app
5 |
6 | # Install dependencies from requirements.txt
7 | COPY requirements.txt /app/requirements.txt
8 |
9 | RUN apt-get update && apt-get install sqlite3 -y
10 |
11 | RUN pip install --no-cache-dir -r requirements.txt
12 |
13 | # Supress health check endpoint from tracing
14 | ENV OTEL_PYTHON_DJANGO_EXCLUDED_URLS=health/
15 |
16 | COPY entrypoint.sh /entrypoint.sh
17 |
18 | ENV NEW_RELIC_CONFIG_FILE=/app/newrelic.ini
19 |
20 | RUN chmod +x /entrypoint.sh
21 |
22 | ENTRYPOINT ["/entrypoint.sh"]
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/entrypoint.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # entrypoint.sh
3 |
4 | set -e
5 | # Run Django database migrations
6 | echo "Running migrations..."
7 | python manage.py migrate
8 |
9 | # Start the Django development server
10 | echo "Starting server..."
11 | exec python manage.py runserver 0.0.0.0:8000 --noreload
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/tests/e2e/workload-lifecycle/services/python-http-server/myapp/__init__.py
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp/asgi.py:
--------------------------------------------------------------------------------
1 | """
2 | ASGI config for myapp project.
3 |
4 | It exposes the ASGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/5.1/howto/deployment/asgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.asgi import get_asgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
15 |
16 | application = get_asgi_application()
17 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp/urls.py:
--------------------------------------------------------------------------------
1 | # myapp/urls.py
2 | from django.contrib import admin
3 | from django.urls import path, include
4 | from myapp_core import views
5 |
6 | urlpatterns = [
7 | path('admin/', admin.site.urls),
8 | path('insert-random/', views.insert_random_row, name='insert-random'),
9 | path('fetch-all/', views.fetch_all_rows, name='fetch-all'),
10 | path('health/', include('health_check.urls')),
11 | ]
12 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp/views.py:
--------------------------------------------------------------------------------
1 | from django.http import HttpResponse
2 |
3 | def index(request):
4 | return HttpResponse("Hello, this is a test app!")
5 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp/wsgi.py:
--------------------------------------------------------------------------------
1 | """
2 | WSGI config for myapp project.
3 |
4 | It exposes the WSGI callable as a module-level variable named ``application``.
5 |
6 | For more information on this file, see
7 | https://docs.djangoproject.com/en/5.1/howto/deployment/wsgi/
8 | """
9 |
10 | import os
11 |
12 | from django.core.wsgi import get_wsgi_application
13 |
14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myapp.settings')
15 |
16 | application = get_wsgi_application()
17 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/__init__.py
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/admin.py:
--------------------------------------------------------------------------------
1 | from django.contrib import admin
2 |
3 | # Register your models here.
4 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/apps.py:
--------------------------------------------------------------------------------
1 | from django.apps import AppConfig
2 |
3 |
4 | class MyappCoreConfig(AppConfig):
5 | default_auto_field = 'django.db.models.BigAutoField'
6 | name = 'myapp_core'
7 |
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/migrations/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/migrations/__init__.py
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/models.py:
--------------------------------------------------------------------------------
1 | # myapp_core/models.py
2 | from django.db import models
3 |
4 | class ExampleModel(models.Model):
5 | name = models.CharField(max_length=100)
6 | created_at = models.DateTimeField(auto_now_add=True)
7 |
8 | def __str__(self):
9 | return self.name
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/proto/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/odigos-io/odigos/0263836219a6f7c2a586c407195ab26eea4e7e32/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/proto/__init__.py
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/myapp_core/proto/example.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | package myapp_core;
4 |
5 | message ExampleMessage {
6 | string name = 1;
7 | int32 id = 2;
8 | string created_at = 3;
9 | }
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/requirements-legacy.txt:
--------------------------------------------------------------------------------
1 | django==3.2.25
2 | protobuf==6.30.2
3 | packaging
4 | importlib_metadata
5 | django-health-check
--------------------------------------------------------------------------------
/tests/e2e/workload-lifecycle/services/python-http-server/requirements.txt:
--------------------------------------------------------------------------------
1 | Django
2 | protobuf==6.30.2
3 | importlib_metadata
4 | packaging
5 | asgiref
6 | asyncio
7 | django-health-check
--------------------------------------------------------------------------------
/tests/nop-exporter.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: odigos.io/v1alpha1
2 | kind: Destination
3 | metadata:
4 | name: nop
5 | namespace: odigos-system
6 | spec:
7 | data:
8 | placeholder: 'here since data is required'
9 | destinationName: nop
10 | signals:
11 | - TRACES
12 | - METRICS
13 | - LOGS
14 | type: nop
15 |
--------------------------------------------------------------------------------