├── .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 | 2 | Alibaba Cloud 3 | 4 | 5 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /destinations/logos/appdynamics.svg: -------------------------------------------------------------------------------- 1 | 2 | AppDynamics 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /destinations/logos/clickhouse.svg: -------------------------------------------------------------------------------- 1 | 2 | Clickhouse 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /destinations/logos/coralogix.svg: -------------------------------------------------------------------------------- 1 | 2 | Coralogix 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /destinations/logos/dash0.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dash0 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /destinations/logos/elasticapm.svg: -------------------------------------------------------------------------------- 1 | 2 | Elastic APM 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /destinations/logos/gigapipe.svg: -------------------------------------------------------------------------------- 1 | 2 | Gigapipe 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /destinations/logos/newrelic.svg: -------------------------------------------------------------------------------- 1 | 2 | New Relic 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /destinations/logos/oracle.svg: -------------------------------------------------------------------------------- 1 | 2 | Oracle 3 | 5 | -------------------------------------------------------------------------------- /destinations/logos/splunk.svg: -------------------------------------------------------------------------------- 1 | 2 | Splunk 3 | 4 | 5 | 6 | 7 | 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 | Jaeger UI 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 | --------------------------------------------------------------------------------