diff --git a/.chloggen/resourcedetectionprocessor-profiles.yaml b/.chloggen/resourcedetectionprocessor-profiles.yaml new file mode 100644 index 000000000000..11a69f5bab0d --- /dev/null +++ b/.chloggen/resourcedetectionprocessor-profiles.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: resourcedetectionprocessor + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: "Introduce support for Profiles signal type." + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35980] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [] diff --git a/.chloggen/stanza-sync-log-emitter.yaml b/.chloggen/stanza-sync-log-emitter.yaml new file mode 100644 index 000000000000..b8bc8cfbf954 --- /dev/null +++ b/.chloggen/stanza-sync-log-emitter.yaml @@ -0,0 +1,27 @@ +# Use this changelog template to create an entry for release notes. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: pkg/stanza + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Synchronous handling of entries passed from the log emitter to the receiver adapter + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [35453] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: + +# If your change doesn't affect end users or the exported elements of any package, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. +# Optional: The change log or logs in which this entry should be included. +# e.g. '[user]' or '[user, api]' +# Include 'user' if the change is relevant to end users. +# Include 'api' if there is a change to a library API. +# Default: '[user]' +change_logs: [] diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f0aeb83d3281..4d2d3a841de6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -15,300 +15,286 @@ * @open-telemetry/collector-contrib-approvers -cmd/githubgen/ @open-telemetry/collector-contrib-approvers @atoulme -cmd/opampsupervisor/ @open-telemetry/collector-contrib-approvers @evan-bradley @atoulme @tigrannajaryan -cmd/otelcontribcol/ @open-telemetry/collector-contrib-approvers -cmd/oteltestbedcol/ @open-telemetry/collector-contrib-approvers -cmd/telemetrygen/ @open-telemetry/collector-contrib-approvers @mx-psi @codeboten +cmd/githubgen/ @open-telemetry/collector-contrib-approvers @atoulme +cmd/opampsupervisor/ @open-telemetry/collector-contrib-approvers @evan-bradley @atoulme @tigrannajaryan +cmd/otelcontribcol/ @open-telemetry/collector-contrib-approvers +cmd/oteltestbedcol/ @open-telemetry/collector-contrib-approvers +cmd/telemetrygen/ @open-telemetry/collector-contrib-approvers @mx-psi @codeboten -confmap/provider/aesprovider/ @open-telemetry/collector-contrib-approvers @djaglowski @shazlehu -confmap/provider/s3provider/ @open-telemetry/collector-contrib-approvers @Aneurysm9 -confmap/provider/secretsmanagerprovider/ @open-telemetry/collector-contrib-approvers @driverpt @atoulme +confmap/provider/aesprovider/ @open-telemetry/collector-contrib-approvers @djaglowski @shazlehu +confmap/provider/s3provider/ @open-telemetry/collector-contrib-approvers @Aneurysm9 +confmap/provider/secretsmanagerprovider/ @open-telemetry/collector-contrib-approvers @driverpt @atoulme -connector/countconnector/ @open-telemetry/collector-contrib-approvers @djaglowski @jpkrohling -connector/datadogconnector/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @ankitpatel96 -connector/exceptionsconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @marctc -connector/failoverconnector/ @open-telemetry/collector-contrib-approvers @akats7 @djaglowski @fatsheep9146 -connector/grafanacloudconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @rlankfo @jcreixell -connector/otlpjsonconnector/ @open-telemetry/collector-contrib-approvers @djaglowski @ChrsMark -connector/roundrobinconnector/ @open-telemetry/collector-contrib-approvers @bogdandrutu -connector/routingconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear -connector/servicegraphconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mapno @JaredTan95 -connector/spanmetricsconnector/ @open-telemetry/collector-contrib-approvers @portertech @Frapschen -connector/sumconnector/ @open-telemetry/collector-contrib-approvers @greatestusername @shalper2 @crobert-1 +connector/countconnector/ @open-telemetry/collector-contrib-approvers @djaglowski @jpkrohling +connector/datadogconnector/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @ankitpatel96 +connector/exceptionsconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @marctc +connector/failoverconnector/ @open-telemetry/collector-contrib-approvers @akats7 @djaglowski @fatsheep9146 +connector/grafanacloudconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @rlankfo @jcreixell +connector/otlpjsonconnector/ @open-telemetry/collector-contrib-approvers @djaglowski @ChrsMark +connector/roundrobinconnector/ @open-telemetry/collector-contrib-approvers @bogdandrutu +connector/routingconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear +connector/servicegraphconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mapno @JaredTan95 +connector/spanmetricsconnector/ @open-telemetry/collector-contrib-approvers @portertech @Frapschen +connector/sumconnector/ @open-telemetry/collector-contrib-approvers @greatestusername @shalper2 @crobert-1 -examples/demo/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +examples/demo/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -exporter/alertmanagerexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling @sokoide @mcube8 -exporter/alibabacloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @shabicheng @kongluoxing @qiansheng91 -exporter/awscloudwatchlogsexporter/ @open-telemetry/collector-contrib-approvers @boostchicken @bryan-aguilar @rapphil -exporter/awsemfexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @shaochengwang @mxiamxia @bryan-aguilar -exporter/awskinesisexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MovieStoreGuy -exporter/awss3exporter/ @open-telemetry/collector-contrib-approvers @atoulme @pdelewski -exporter/awsxrayexporter/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash -exporter/azuredataexplorerexporter/ @open-telemetry/collector-contrib-approvers @asaharn @ag-ramachandran -exporter/azuremonitorexporter/ @open-telemetry/collector-contrib-approvers @pcwiese -exporter/carbonexporter/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo -exporter/cassandraexporter/ @open-telemetry/collector-contrib-approvers @atoulme @emreyalvac -exporter/clickhouseexporter/ @open-telemetry/collector-contrib-approvers @hanjm @dmitryax @Frapschen @SpencerTorres -exporter/coralogixexporter/ @open-telemetry/collector-contrib-approvers @povilasv @matej-g -exporter/datadogexporter/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @liustanley @songy23 @mackjmr @ankitpatel96 -exporter/datasetexporter/ @open-telemetry/collector-contrib-approvers @atoulme @martin-majlis-s1 @zdaratom-s1 @tomaz-s1 -exporter/dorisexporter/ @open-telemetry/collector-contrib-approvers @atoulme @joker-star-l -exporter/elasticsearchexporter/ @open-telemetry/collector-contrib-approvers @JaredTan95 @carsonip @lahsivjar -exporter/fileexporter/ @open-telemetry/collector-contrib-approvers @atingchen -exporter/googlecloudexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @psx95 -exporter/googlecloudpubsubexporter/ @open-telemetry/collector-contrib-approvers @alexvanboxel -exporter/googlemanagedprometheusexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @psx95 -exporter/honeycombmarkerexporter/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @fchikwekwe -exporter/influxdbexporter/ @open-telemetry/collector-contrib-approvers @jacobmarble -exporter/kafkaexporter/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy -exporter/kineticaexporter/ @open-telemetry/collector-contrib-approvers @am-kinetica @TylerHelmuth -exporter/loadbalancingexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling -exporter/logicmonitorexporter/ @open-telemetry/collector-contrib-approvers @bogdandrutu @khyatigandhi6 @avadhut123pisal -exporter/logzioexporter/ @open-telemetry/collector-contrib-approvers @yotamloe -exporter/lokiexporter/ @open-telemetry/collector-contrib-approvers @gramidt @jpkrohling @mar4uk -exporter/mezmoexporter/ @open-telemetry/collector-contrib-approvers @dashpole @billmeyer @gjanco -exporter/opencensusexporter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -exporter/otelarrowexporter/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 @lquerel -exporter/prometheusexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole -exporter/prometheusremotewriteexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @rapphil @dashpole -exporter/pulsarexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun -exporter/rabbitmqexporter/ @open-telemetry/collector-contrib-approvers @swar8080 @atoulme -exporter/sapmexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme -exporter/sentryexporter/ @open-telemetry/collector-contrib-approvers @AbhiPrasad -exporter/signalfxexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 -exporter/splunkhecexporter/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax -exporter/sumologicexporter/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo @chan-tim-sumo -exporter/syslogexporter/ @open-telemetry/collector-contrib-approvers @kasia-kujawa @rnishtala-sumo @andrzej-stencel -exporter/tencentcloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @wgliang @yiyang5055 -exporter/zipkinexporter/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @andrzej-stencel @crobert-1 +exporter/alertmanagerexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling @sokoide @mcube8 +exporter/alibabacloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @shabicheng @kongluoxing @qiansheng91 +exporter/awscloudwatchlogsexporter/ @open-telemetry/collector-contrib-approvers @boostchicken @bryan-aguilar @rapphil +exporter/awsemfexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @shaochengwang @mxiamxia @bryan-aguilar +exporter/awskinesisexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MovieStoreGuy +exporter/awss3exporter/ @open-telemetry/collector-contrib-approvers @atoulme @pdelewski +exporter/awsxrayexporter/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash +exporter/azuredataexplorerexporter/ @open-telemetry/collector-contrib-approvers @asaharn @ag-ramachandran +exporter/azuremonitorexporter/ @open-telemetry/collector-contrib-approvers @pcwiese +exporter/carbonexporter/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo +exporter/cassandraexporter/ @open-telemetry/collector-contrib-approvers @atoulme @emreyalvac +exporter/clickhouseexporter/ @open-telemetry/collector-contrib-approvers @hanjm @dmitryax @Frapschen @SpencerTorres +exporter/coralogixexporter/ @open-telemetry/collector-contrib-approvers @povilasv @matej-g +exporter/datadogexporter/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @liustanley @songy23 @mackjmr @ankitpatel96 +exporter/datasetexporter/ @open-telemetry/collector-contrib-approvers @atoulme @martin-majlis-s1 @zdaratom-s1 @tomaz-s1 +exporter/dorisexporter/ @open-telemetry/collector-contrib-approvers @atoulme @joker-star-l +exporter/elasticsearchexporter/ @open-telemetry/collector-contrib-approvers @JaredTan95 @carsonip @lahsivjar +exporter/fileexporter/ @open-telemetry/collector-contrib-approvers @atingchen +exporter/googlecloudexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @psx95 +exporter/googlecloudpubsubexporter/ @open-telemetry/collector-contrib-approvers @alexvanboxel +exporter/googlemanagedprometheusexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @psx95 +exporter/honeycombmarkerexporter/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @fchikwekwe +exporter/influxdbexporter/ @open-telemetry/collector-contrib-approvers @jacobmarble +exporter/kafkaexporter/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy +exporter/kineticaexporter/ @open-telemetry/collector-contrib-approvers @am-kinetica @TylerHelmuth +exporter/loadbalancingexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling +exporter/logicmonitorexporter/ @open-telemetry/collector-contrib-approvers @bogdandrutu @khyatigandhi6 @avadhut123pisal +exporter/logzioexporter/ @open-telemetry/collector-contrib-approvers @yotamloe +exporter/lokiexporter/ @open-telemetry/collector-contrib-approvers @gramidt @jpkrohling @mar4uk +exporter/mezmoexporter/ @open-telemetry/collector-contrib-approvers @dashpole @billmeyer @gjanco +exporter/opencensusexporter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +exporter/otelarrowexporter/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 @lquerel +exporter/prometheusexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole +exporter/prometheusremotewriteexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @rapphil @dashpole +exporter/pulsarexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun +exporter/rabbitmqexporter/ @open-telemetry/collector-contrib-approvers @swar8080 @atoulme +exporter/sapmexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme +exporter/sentryexporter/ @open-telemetry/collector-contrib-approvers @AbhiPrasad +exporter/signalfxexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 +exporter/splunkhecexporter/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax +exporter/sumologicexporter/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo @chan-tim-sumo +exporter/syslogexporter/ @open-telemetry/collector-contrib-approvers @kasia-kujawa @rnishtala-sumo @andrzej-stencel +exporter/tencentcloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @wgliang @yiyang5055 +exporter/zipkinexporter/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @andrzej-stencel @crobert-1 -extension/ackextension/ @open-telemetry/collector-contrib-approvers @zpzhuSplunk @splunkericl -extension/asapauthextension/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy -extension/awsproxy/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia -extension/basicauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus -extension/bearertokenauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus -extension/encoding/ @open-telemetry/collector-contrib-approvers @atoulme @dao-jun @dmitryax @MovieStoreGuy @VihasMakwana -extension/encoding/avrologencodingextension/ @open-telemetry/collector-contrib-approvers @thmshmm -extension/encoding/jaegerencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @atoulme -extension/encoding/jsonlogencodingextension/ @open-telemetry/collector-contrib-approvers @VihasMakwana @atoulme -extension/encoding/otlpencodingextension/ @open-telemetry/collector-contrib-approvers @dao-jun @VihasMakwana -extension/encoding/textencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @atoulme -extension/encoding/zipkinencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @dao-jun -extension/googleclientauthextension/ @open-telemetry/collector-contrib-approvers @dashpole @aabmass @jsuereth @punya @psx95 -extension/headerssetterextension/ @open-telemetry/collector-contrib-approvers @jpkrohling -extension/healthcheckextension/ @open-telemetry/collector-contrib-approvers @jpkrohling -extension/healthcheckv2extension/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear -extension/httpforwarderextension/ @open-telemetry/collector-contrib-approvers @atoulme -extension/jaegerremotesampling/ @open-telemetry/collector-contrib-approvers @yurishkuro @frzifus -extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling -extension/observer/ @open-telemetry/collector-contrib-approvers @dmitryax -extension/observer/cfgardenobserver/ @open-telemetry/collector-contrib-approvers @crobert-1 @cemdk @m1rp @jriguera -extension/observer/dockerobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy -extension/observer/ecsobserver/ @open-telemetry/collector-contrib-approvers @dmitryax -extension/observer/hostobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy -extension/observer/k8sobserver/ @open-telemetry/collector-contrib-approvers @dmitryax @ChrsMark -extension/oidcauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling -extension/opampcustommessages/ @open-telemetry/collector-contrib-approvers @evan-bradley -extension/opampextension/ @open-telemetry/collector-contrib-approvers @portertech @evan-bradley @tigrannajaryan -extension/pprofextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy -extension/remotetapextension/ @open-telemetry/collector-contrib-approvers @atoulme -extension/sigv4authextension/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @erichsueh3 -extension/solarwindsapmsettingsextension/ @open-telemetry/collector-contrib-approvers @jerrytfleung @cheempz -extension/storage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme @djaglowski -extension/storage/dbstorage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme -extension/storage/filestorage/ @open-telemetry/collector-contrib-approvers @djaglowski -extension/storage/redisstorageextension/ @open-telemetry/collector-contrib-approvers @atoulme -extension/sumologicextension/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo @chan-tim-sumo +extension/ackextension/ @open-telemetry/collector-contrib-approvers @zpzhuSplunk @splunkericl +extension/asapauthextension/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy +extension/awsproxy/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia +extension/basicauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus +extension/bearertokenauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus +extension/encoding/ @open-telemetry/collector-contrib-approvers @atoulme @dao-jun @dmitryax @MovieStoreGuy @VihasMakwana +extension/encoding/avrologencodingextension/ @open-telemetry/collector-contrib-approvers @thmshmm +extension/encoding/jaegerencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @atoulme +extension/encoding/jsonlogencodingextension/ @open-telemetry/collector-contrib-approvers @VihasMakwana @atoulme +extension/encoding/otlpencodingextension/ @open-telemetry/collector-contrib-approvers @dao-jun @VihasMakwana +extension/encoding/textencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @atoulme +extension/encoding/zipkinencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @dao-jun +extension/googleclientauthextension/ @open-telemetry/collector-contrib-approvers @dashpole @aabmass @jsuereth @punya @psx95 +extension/headerssetterextension/ @open-telemetry/collector-contrib-approvers @jpkrohling +extension/healthcheckextension/ @open-telemetry/collector-contrib-approvers @jpkrohling +extension/healthcheckv2extension/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear +extension/httpforwarderextension/ @open-telemetry/collector-contrib-approvers @atoulme +extension/jaegerremotesampling/ @open-telemetry/collector-contrib-approvers @yurishkuro @frzifus +extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling +extension/observer/ @open-telemetry/collector-contrib-approvers @dmitryax +extension/observer/cfgardenobserver/ @open-telemetry/collector-contrib-approvers @crobert-1 @cemdk @m1rp @jriguera +extension/observer/dockerobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy +extension/observer/ecsobserver/ @open-telemetry/collector-contrib-approvers @dmitryax +extension/observer/hostobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy +extension/observer/k8sobserver/ @open-telemetry/collector-contrib-approvers @dmitryax @ChrsMark +extension/oidcauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling +extension/opampcustommessages/ @open-telemetry/collector-contrib-approvers @evan-bradley +extension/opampextension/ @open-telemetry/collector-contrib-approvers @portertech @evan-bradley @tigrannajaryan +extension/pprofextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy +extension/remotetapextension/ @open-telemetry/collector-contrib-approvers @atoulme +extension/sigv4authextension/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @erichsueh3 +extension/solarwindsapmsettingsextension/ @open-telemetry/collector-contrib-approvers @jerrytfleung @cheempz +extension/storage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme @djaglowski +extension/storage/dbstorage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme +extension/storage/filestorage/ @open-telemetry/collector-contrib-approvers @djaglowski +extension/storage/redisstorageextension/ @open-telemetry/collector-contrib-approvers @atoulme +extension/sumologicextension/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo @chan-tim-sumo -internal/aws/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia -internal/collectd/ @open-telemetry/collector-contrib-approvers @atoulme -internal/coreinternal/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -internal/docker/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy -internal/exp/metrics/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams -internal/filter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -internal/grpcutil/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 @lquerel -internal/k8sconfig/ @open-telemetry/collector-contrib-approvers @dmitryax -internal/k8stest/ @open-telemetry/collector-contrib-approvers @crobert-1 -internal/kafka/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy -internal/kubelet/ @open-telemetry/collector-contrib-approvers @dmitryax -internal/metadataproviders/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole -internal/otelarrow/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 -internal/pdatautil/ @open-telemetry/collector-contrib-approvers @djaglowski -internal/rabbitmq/ @open-telemetry/collector-contrib-approvers @swar8080 @atoulme -internal/sharedcomponent/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -internal/splunk/ @open-telemetry/collector-contrib-approvers @dmitryax -internal/sqlquery/ @open-telemetry/collector-contrib-approvers @crobert-1 @dmitryax -internal/tools/ @open-telemetry/collector-contrib-approvers +internal/aws/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia +internal/collectd/ @open-telemetry/collector-contrib-approvers @atoulme +internal/coreinternal/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +internal/docker/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy +internal/exp/metrics/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams +internal/filter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +internal/grpcutil/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 @lquerel +internal/k8sconfig/ @open-telemetry/collector-contrib-approvers @dmitryax +internal/k8stest/ @open-telemetry/collector-contrib-approvers @crobert-1 +internal/kafka/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy +internal/kubelet/ @open-telemetry/collector-contrib-approvers @dmitryax +internal/metadataproviders/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole +internal/otelarrow/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 +internal/pdatautil/ @open-telemetry/collector-contrib-approvers @djaglowski +internal/rabbitmq/ @open-telemetry/collector-contrib-approvers @swar8080 @atoulme +internal/sharedcomponent/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +internal/splunk/ @open-telemetry/collector-contrib-approvers @dmitryax +internal/sqlquery/ @open-telemetry/collector-contrib-approvers @crobert-1 @dmitryax +internal/tools/ @open-telemetry/collector-contrib-approvers -pkg/batchperresourceattr/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax -pkg/batchpersignal/ @open-telemetry/collector-contrib-approvers @jpkrohling -pkg/datadog/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @liustanley @songy23 @mackjmr @ankitpatel96 -pkg/experimentalmetricmetadata/ @open-telemetry/collector-contrib-approvers @dmitryax -pkg/golden/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme -pkg/kafka/topic/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy -pkg/ottl/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley -pkg/pdatatest/ @open-telemetry/collector-contrib-approvers @djaglowski @fatsheep9146 -pkg/pdatautil/ @open-telemetry/collector-contrib-approvers @dmitryax -pkg/resourcetotelemetry/ @open-telemetry/collector-contrib-approvers @mx-psi -pkg/sampling/ @open-telemetry/collector-contrib-approvers @kentquirk @jmacd -pkg/stanza/ @open-telemetry/collector-contrib-approvers @djaglowski -pkg/stanza/fileconsumer/ @open-telemetry/collector-contrib-approvers @djaglowski -pkg/status/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear -pkg/translator/azure/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers @atoulme @cparkins -pkg/translator/azurelogs/ @open-telemetry/collector-contrib-approvers @atoulme @cparkins @MikeGoldsmith -pkg/translator/jaeger/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers @frzifus -pkg/translator/loki/ @open-telemetry/collector-contrib-approvers @gouthamve @jpkrohling @mar4uk -pkg/translator/opencensus/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -pkg/translator/prometheus/ @open-telemetry/collector-contrib-approvers @dashpole @bertysentry -pkg/translator/prometheusremotewrite/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole -pkg/translator/signalfx/ @open-telemetry/collector-contrib-approvers @dmitryax -pkg/translator/skywalking/ @open-telemetry/collector-contrib-approvers @JaredTan95 -pkg/translator/zipkin/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @andrzej-stencel @crobert-1 -pkg/winperfcounters/ @open-telemetry/collector-contrib-approvers @dashpole @Mrod1598 @alxbl @pjanotti +pkg/batchperresourceattr/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax +pkg/batchpersignal/ @open-telemetry/collector-contrib-approvers @jpkrohling +pkg/datadog/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @liustanley @songy23 @mackjmr @ankitpatel96 +pkg/experimentalmetricmetadata/ @open-telemetry/collector-contrib-approvers @dmitryax +pkg/golden/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme +pkg/kafka/topic/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy +pkg/ottl/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley +pkg/pdatatest/ @open-telemetry/collector-contrib-approvers @djaglowski @fatsheep9146 +pkg/pdatautil/ @open-telemetry/collector-contrib-approvers @dmitryax +pkg/resourcetotelemetry/ @open-telemetry/collector-contrib-approvers @mx-psi +pkg/sampling/ @open-telemetry/collector-contrib-approvers @kentquirk @jmacd +pkg/stanza/ @open-telemetry/collector-contrib-approvers @djaglowski +pkg/stanza/fileconsumer/ @open-telemetry/collector-contrib-approvers @djaglowski +pkg/status/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear +pkg/translator/azure/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers @atoulme @cparkins +pkg/translator/azurelogs/ @open-telemetry/collector-contrib-approvers @atoulme @cparkins @MikeGoldsmith +pkg/translator/jaeger/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers @frzifus +pkg/translator/loki/ @open-telemetry/collector-contrib-approvers @gouthamve @jpkrohling @mar4uk +pkg/translator/opencensus/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +pkg/translator/prometheus/ @open-telemetry/collector-contrib-approvers @dashpole @bertysentry +pkg/translator/prometheusremotewrite/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole +pkg/translator/signalfx/ @open-telemetry/collector-contrib-approvers @dmitryax +pkg/translator/skywalking/ @open-telemetry/collector-contrib-approvers @JaredTan95 +pkg/translator/zipkin/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @andrzej-stencel @crobert-1 +pkg/winperfcounters/ @open-telemetry/collector-contrib-approvers @dashpole @Mrod1598 @alxbl @pjanotti -processor/attributesprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken -processor/coralogixprocessor/ @open-telemetry/collector-contrib-approvers @crobert-1 @galrose -processor/cumulativetodeltaprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth -processor/deltatocumulativeprocessor/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams @jpkrohling -processor/deltatorateprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 -processor/filterprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @boostchicken -processor/geoipprocessor/ @open-telemetry/collector-contrib-approvers @andrzej-stencel @michalpristas @rogercoll -processor/groupbyattrsprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo -processor/groupbytraceprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling -processor/intervalprocessor/ @open-telemetry/collector-contrib-approvers @RichieSams @sh0rez @djaglowski -processor/k8sattributesprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @fatsheep9146 @TylerHelmuth -processor/logdedupprocessor/ @open-telemetry/collector-contrib-approvers @MikeGoldsmith @djaglowski -processor/logstransformprocessor/ @open-telemetry/collector-contrib-approvers @djaglowski @dehaansa -processor/metricsgenerationprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 -processor/metricstransformprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax -processor/probabilisticsamplerprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling @jmacd -processor/redactionprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @mx-psi @TylerHelmuth -processor/remotetapprocessor/ @open-telemetry/collector-contrib-approvers @atoulme @jaronoff97 -processor/resourcedetectionprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole -processor/resourcedetectionprocessor/internal/aws/ec2/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/aws/ecs/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/aws/eks/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/aws/elasticbeanstalk/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/aws/lambda/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/azure/ @open-telemetry/collector-contrib-approvers @mx-psi -processor/resourcedetectionprocessor/internal/azure/aks/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/consul/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/docker/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/gcp/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/heroku/ @open-telemetry/collector-contrib-approvers @atoulme -processor/resourcedetectionprocessor/internal/k8snode/ @open-telemetry/collector-contrib-approvers -processor/resourcedetectionprocessor/internal/openshift/ @open-telemetry/collector-contrib-approvers @frzifus -processor/resourcedetectionprocessor/internal/system/ @open-telemetry/collector-contrib-approvers -processor/resourceprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax -processor/routingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling -processor/schemaprocessor/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy -processor/spanprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken -processor/sumologicprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo @chan-tim-sumo -processor/tailsamplingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling -processor/transformprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley +processor/attributesprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken +processor/coralogixprocessor/ @open-telemetry/collector-contrib-approvers @crobert-1 @galrose +processor/cumulativetodeltaprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth +processor/deltatocumulativeprocessor/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams @jpkrohling +processor/deltatorateprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 +processor/filterprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @boostchicken +processor/geoipprocessor/ @open-telemetry/collector-contrib-approvers @andrzej-stencel @michalpristas @rogercoll +processor/groupbyattrsprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo +processor/groupbytraceprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling +processor/intervalprocessor/ @open-telemetry/collector-contrib-approvers @RichieSams @sh0rez @djaglowski +processor/k8sattributesprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @fatsheep9146 @TylerHelmuth +processor/logdedupprocessor/ @open-telemetry/collector-contrib-approvers @MikeGoldsmith @djaglowski +processor/logstransformprocessor/ @open-telemetry/collector-contrib-approvers @djaglowski @dehaansa +processor/metricsgenerationprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 +processor/metricstransformprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax +processor/probabilisticsamplerprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling @jmacd +processor/redactionprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @mx-psi @TylerHelmuth +processor/remotetapprocessor/ @open-telemetry/collector-contrib-approvers @atoulme @jaronoff97 +processor/resourcedetectionprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole +processor/resourceprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax +processor/routingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling +processor/schemaprocessor/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy +processor/spanprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken +processor/sumologicprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo @chan-tim-sumo +processor/tailsamplingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling +processor/transformprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley -receiver/activedirectorydsreceiver/ @open-telemetry/collector-contrib-approvers @pjanotti -receiver/aerospikereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @antonblock -receiver/apachereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/apachesparkreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @Caleb-Hurshman @mrsillydog -receiver/awscloudwatchmetricsreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling -receiver/awscloudwatchreceiver/ @open-telemetry/collector-contrib-approvers @schmikei -receiver/awscontainerinsightreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @pxaws -receiver/awsecscontainermetricsreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 -receiver/awsfirehosereceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 -receiver/awss3receiver/ @open-telemetry/collector-contrib-approvers @atoulme @adcharre -receiver/awsxrayreceiver/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash -receiver/azureblobreceiver/ @open-telemetry/collector-contrib-approvers @eedorenko @mx-psi -receiver/azureeventhubreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @cparkins -receiver/azuremonitorreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten -receiver/bigipreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek -receiver/carbonreceiver/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo -receiver/chronyreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @jamesmoessis -receiver/cloudflarereceiver/ @open-telemetry/collector-contrib-approvers @dehaansa @djaglowski -receiver/cloudfoundryreceiver/ @open-telemetry/collector-contrib-approvers @crobert-1 -receiver/collectdreceiver/ @open-telemetry/collector-contrib-approvers @atoulme -receiver/couchdbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/datadogreceiver/ @open-telemetry/collector-contrib-approvers @boostchicken @gouthamve @jpkrohling @MovieStoreGuy -receiver/dockerstatsreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis -receiver/elasticsearchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/expvarreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy -receiver/filelogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/filestatsreceiver/ @open-telemetry/collector-contrib-approvers @atoulme -receiver/flinkmetricsreceiver/ @open-telemetry/collector-contrib-approvers @JonathanWamsley @djaglowski -receiver/fluentforwardreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax -receiver/githubreceiver/ @open-telemetry/collector-contrib-approvers @adrielp @andrzej-stencel @crobert-1 @TylerHelmuth -receiver/googlecloudmonitoringreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @TylerHelmuth @abhishek-at-cloudwerx -receiver/googlecloudpubsubreceiver/ @open-telemetry/collector-contrib-approvers @alexvanboxel -receiver/googlecloudspannerreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @dsimil @KiranmayiB @harishbohara11 -receiver/haproxyreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @MovieStoreGuy -receiver/hostmetricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk -receiver/httpcheckreceiver/ @open-telemetry/collector-contrib-approvers @codeboten -receiver/iisreceiver/ @open-telemetry/collector-contrib-approvers @Mrod1598 @pjanotti -receiver/influxdbreceiver/ @open-telemetry/collector-contrib-approvers @jacobmarble -receiver/jaegerreceiver/ @open-telemetry/collector-contrib-approvers @yurishkuro -receiver/journaldreceiver/ @open-telemetry/collector-contrib-approvers @sumo-drosiek @djaglowski -receiver/k8sclusterreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @povilasv -receiver/k8seventsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth -receiver/k8sobjectsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hvaghani221 @TylerHelmuth -receiver/kafkametricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax -receiver/kafkareceiver/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy -receiver/kubeletstatsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @ChrsMark -receiver/lokireceiver/ @open-telemetry/collector-contrib-approvers @mar4uk @jpkrohling -receiver/memcachedreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/mongodbatlasreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei -receiver/mongodbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei -receiver/mysqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/namedpipereceiver/ @open-telemetry/collector-contrib-approvers @sinkingpoint @djaglowski -receiver/nginxreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/nsxtreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @schmikei -receiver/ntpreceiver/ @open-telemetry/collector-contrib-approvers @atoulme -receiver/opencensusreceiver/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -receiver/oracledbreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 @atoulme -receiver/osqueryreceiver/ @open-telemetry/collector-contrib-approvers @codeboten @nslaughter @smithclay -receiver/otelarrowreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 -receiver/otlpjsonfilereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme -receiver/podmanreceiver/ @open-telemetry/collector-contrib-approvers @rogercoll -receiver/postgresqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/prometheusreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole -receiver/prometheusremotewritereceiver/ @open-telemetry/collector-contrib-approvers @dashpole @ArthurSens -receiver/pulsarreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun -receiver/purefareceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure -receiver/purefbreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure -receiver/rabbitmqreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @cpheps -receiver/receivercreator/ @open-telemetry/collector-contrib-approvers @dmitryax -receiver/redisreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hughesjj -receiver/riakreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi -receiver/saphanareceiver/ @open-telemetry/collector-contrib-approvers @dehaansa -receiver/sapmreceiver/ @open-telemetry/collector-contrib-approvers @atoulme -receiver/signalfxreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax -receiver/simpleprometheusreceiver/ @open-telemetry/collector-contrib-approvers @fatsheep9146 -receiver/skywalkingreceiver/ @open-telemetry/collector-contrib-approvers @JaredTan95 -receiver/snmpreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek @tamir-michaeli -receiver/snowflakereceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @shalper2 -receiver/solacereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @mcardy -receiver/splunkenterprisereceiver/ @open-telemetry/collector-contrib-approvers @shalper2 @MovieStoreGuy @greatestusername -receiver/splunkhecreceiver/ @open-telemetry/collector-contrib-approvers @atoulme -receiver/sqlqueryreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 -receiver/sqlserverreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek -receiver/sshcheckreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten -receiver/statsdreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @dmitryax -receiver/syslogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @andrzej-stencel -receiver/systemdreceiver/ @open-telemetry/collector-contrib-approvers @Hemansh31 @atoulme -receiver/tcplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/tlscheckreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @michael-burt -receiver/udplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -receiver/vcenterreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei @StefanKurek -receiver/wavefrontreceiver/ @open-telemetry/collector-contrib-approvers @samiura -receiver/webhookeventreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @shalper2 -receiver/windowseventlogreceiver/ @open-telemetry/collector-contrib-approvers @armstrmi @pjanotti -receiver/windowsperfcountersreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @alxbl @pjanotti -receiver/zipkinreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @andrzej-stencel @crobert-1 -receiver/zookeeperreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/activedirectorydsreceiver/ @open-telemetry/collector-contrib-approvers @pjanotti +receiver/aerospikereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @antonblock +receiver/apachereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/apachesparkreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @Caleb-Hurshman @mrsillydog +receiver/awscloudwatchmetricsreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling +receiver/awscloudwatchreceiver/ @open-telemetry/collector-contrib-approvers @schmikei +receiver/awscontainerinsightreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @pxaws +receiver/awsecscontainermetricsreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 +receiver/awsfirehosereceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 +receiver/awss3receiver/ @open-telemetry/collector-contrib-approvers @atoulme @adcharre +receiver/awsxrayreceiver/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash +receiver/azureblobreceiver/ @open-telemetry/collector-contrib-approvers @eedorenko @mx-psi +receiver/azureeventhubreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @cparkins +receiver/azuremonitorreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten +receiver/bigipreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek +receiver/carbonreceiver/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo +receiver/chronyreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @jamesmoessis +receiver/cloudflarereceiver/ @open-telemetry/collector-contrib-approvers @dehaansa @djaglowski +receiver/cloudfoundryreceiver/ @open-telemetry/collector-contrib-approvers @crobert-1 +receiver/collectdreceiver/ @open-telemetry/collector-contrib-approvers @atoulme +receiver/couchdbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/datadogreceiver/ @open-telemetry/collector-contrib-approvers @boostchicken @gouthamve @jpkrohling @MovieStoreGuy +receiver/dockerstatsreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis +receiver/elasticsearchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/expvarreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy +receiver/filelogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/filestatsreceiver/ @open-telemetry/collector-contrib-approvers @atoulme +receiver/flinkmetricsreceiver/ @open-telemetry/collector-contrib-approvers @JonathanWamsley @djaglowski +receiver/fluentforwardreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax +receiver/githubreceiver/ @open-telemetry/collector-contrib-approvers @adrielp @andrzej-stencel @crobert-1 @TylerHelmuth +receiver/googlecloudmonitoringreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @TylerHelmuth @abhishek-at-cloudwerx +receiver/googlecloudpubsubreceiver/ @open-telemetry/collector-contrib-approvers @alexvanboxel +receiver/googlecloudspannerreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @dsimil @KiranmayiB @harishbohara11 +receiver/haproxyreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @MovieStoreGuy +receiver/hostmetricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk +receiver/httpcheckreceiver/ @open-telemetry/collector-contrib-approvers @codeboten +receiver/iisreceiver/ @open-telemetry/collector-contrib-approvers @Mrod1598 @pjanotti +receiver/influxdbreceiver/ @open-telemetry/collector-contrib-approvers @jacobmarble +receiver/jaegerreceiver/ @open-telemetry/collector-contrib-approvers @yurishkuro +receiver/journaldreceiver/ @open-telemetry/collector-contrib-approvers @sumo-drosiek @djaglowski +receiver/k8sclusterreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @povilasv +receiver/k8seventsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth +receiver/k8sobjectsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hvaghani221 @TylerHelmuth +receiver/kafkametricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax +receiver/kafkareceiver/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy +receiver/kubeletstatsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @ChrsMark +receiver/lokireceiver/ @open-telemetry/collector-contrib-approvers @mar4uk @jpkrohling +receiver/memcachedreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/mongodbatlasreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei +receiver/mongodbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei +receiver/mysqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/namedpipereceiver/ @open-telemetry/collector-contrib-approvers @sinkingpoint @djaglowski +receiver/nginxreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/nsxtreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @schmikei +receiver/ntpreceiver/ @open-telemetry/collector-contrib-approvers @atoulme +receiver/opencensusreceiver/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +receiver/oracledbreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 @atoulme +receiver/osqueryreceiver/ @open-telemetry/collector-contrib-approvers @codeboten @nslaughter @smithclay +receiver/otelarrowreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3 +receiver/otlpjsonfilereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme +receiver/podmanreceiver/ @open-telemetry/collector-contrib-approvers @rogercoll +receiver/postgresqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/prometheusreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole +receiver/prometheusremotewritereceiver/ @open-telemetry/collector-contrib-approvers @dashpole @ArthurSens +receiver/pulsarreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun +receiver/purefareceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure +receiver/purefbreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure +receiver/rabbitmqreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @cpheps +receiver/receivercreator/ @open-telemetry/collector-contrib-approvers @dmitryax +receiver/redisreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hughesjj +receiver/riakreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi +receiver/saphanareceiver/ @open-telemetry/collector-contrib-approvers @dehaansa +receiver/sapmreceiver/ @open-telemetry/collector-contrib-approvers @atoulme +receiver/signalfxreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax +receiver/simpleprometheusreceiver/ @open-telemetry/collector-contrib-approvers @fatsheep9146 +receiver/skywalkingreceiver/ @open-telemetry/collector-contrib-approvers @JaredTan95 +receiver/snmpreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek @tamir-michaeli +receiver/snowflakereceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @shalper2 +receiver/solacereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @mcardy +receiver/splunkenterprisereceiver/ @open-telemetry/collector-contrib-approvers @shalper2 @MovieStoreGuy @greatestusername +receiver/splunkhecreceiver/ @open-telemetry/collector-contrib-approvers @atoulme +receiver/sqlqueryreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 +receiver/sqlserverreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek +receiver/sshcheckreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten +receiver/statsdreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @dmitryax +receiver/syslogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @andrzej-stencel +receiver/systemdreceiver/ @open-telemetry/collector-contrib-approvers @Hemansh31 @atoulme +receiver/tcplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/tlscheckreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @michael-burt +receiver/udplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski +receiver/vcenterreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei @StefanKurek +receiver/wavefrontreceiver/ @open-telemetry/collector-contrib-approvers @samiura +receiver/webhookeventreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @shalper2 +receiver/windowseventlogreceiver/ @open-telemetry/collector-contrib-approvers @armstrmi @pjanotti +receiver/windowsperfcountersreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @alxbl @pjanotti +receiver/zipkinreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @andrzej-stencel @crobert-1 +receiver/zookeeperreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski -testbed/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers -testbed/mockdatasenders/mockdatadogagentexporter/ @open-telemetry/collector-contrib-approvers @boostchicken +testbed/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers +testbed/mockdatasenders/mockdatadogagentexporter/ @open-telemetry/collector-contrib-approvers @boostchicken ##################################################### # @@ -322,6 +308,6 @@ reports/distributions/k8s.yaml @open-telemetry/collector-contrib-approvers ## UNMAINTAINED components -exporter/opensearchexporter/ @open-telemetry/collector-contrib-approvers -extension/observer/ecstaskobserver/ @open-telemetry/collector-contrib-approvers -receiver/jmxreceiver/ @open-telemetry/collector-contrib-approvers +exporter/opensearchexporter/ @open-telemetry/collector-contrib-approvers +extension/observer/ecstaskobserver/ @open-telemetry/collector-contrib-approvers +receiver/jmxreceiver/ @open-telemetry/collector-contrib-approvers diff --git a/connector/datadogconnector/go.sum b/connector/datadogconnector/go.sum index ac9bdf4b497e..d51d935661a2 100644 --- a/connector/datadogconnector/go.sum +++ b/connector/datadogconnector/go.sum @@ -999,6 +999,8 @@ go.opentelemetry.io/collector/processor/batchprocessor v0.113.0 h1:LPNbVILg+cKTF go.opentelemetry.io/collector/processor/batchprocessor v0.113.0/go.mod h1:tCg+B/1idJS5inxod+nRPXFdVi89Bsnl6RvzIOO9k5I= go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0 h1:3/5z0Pe/yduwF0DSpytW2+mwDA5JaIL/w6vfNYy5KzQ= go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0/go.mod h1:h3wIlqMtJGIDKttjMJBo6J4dHU/Mi6+bKSxvRVUpsXs= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0 h1:bZ1i5l6/4nj7PsLqeHw7Opw5vdrpUsDvuH6a6kx+2yg= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0/go.mod h1:Uxv+5NNIJJCuz52DPFa9INjrpZSfidoTkv849tNp1qI= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 h1:cczN6whdrCWww3T0FBV3U7lsVKQmkWDX05M+9lANHgk= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0/go.mod h1:4Dmx5qsvujgJ+MC+KqWI7UDVM2liXa3sH/9XnGiL9aE= go.opentelemetry.io/collector/processor/processortest v0.113.0 h1:jGoDJ+tDCzuDcAWZeshQtnK/DQAvMKd4wZAIDgAM5aA= diff --git a/exporter/datadogexporter/go.mod b/exporter/datadogexporter/go.mod index b635050a4fd8..677a31246d27 100644 --- a/exporter/datadogexporter/go.mod +++ b/exporter/datadogexporter/go.mod @@ -352,6 +352,7 @@ require ( go.opentelemetry.io/collector/pdata/testdata v0.113.0 // indirect go.opentelemetry.io/collector/pipeline v0.113.0 // indirect go.opentelemetry.io/collector/pipeline/pipelineprofiles v0.113.0 // indirect + go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0 // indirect go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 // indirect go.opentelemetry.io/collector/processor/processortest v0.113.0 // indirect go.opentelemetry.io/collector/receiver/receiverprofiles v0.113.0 // indirect diff --git a/exporter/datadogexporter/go.sum b/exporter/datadogexporter/go.sum index 0809d95c9f9d..c29d1e892c8a 100644 --- a/exporter/datadogexporter/go.sum +++ b/exporter/datadogexporter/go.sum @@ -1127,6 +1127,8 @@ go.opentelemetry.io/collector/processor/batchprocessor v0.113.0 h1:LPNbVILg+cKTF go.opentelemetry.io/collector/processor/batchprocessor v0.113.0/go.mod h1:tCg+B/1idJS5inxod+nRPXFdVi89Bsnl6RvzIOO9k5I= go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0 h1:3/5z0Pe/yduwF0DSpytW2+mwDA5JaIL/w6vfNYy5KzQ= go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0/go.mod h1:h3wIlqMtJGIDKttjMJBo6J4dHU/Mi6+bKSxvRVUpsXs= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0 h1:bZ1i5l6/4nj7PsLqeHw7Opw5vdrpUsDvuH6a6kx+2yg= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0/go.mod h1:Uxv+5NNIJJCuz52DPFa9INjrpZSfidoTkv849tNp1qI= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 h1:cczN6whdrCWww3T0FBV3U7lsVKQmkWDX05M+9lANHgk= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0/go.mod h1:4Dmx5qsvujgJ+MC+KqWI7UDVM2liXa3sH/9XnGiL9aE= go.opentelemetry.io/collector/processor/processortest v0.113.0 h1:jGoDJ+tDCzuDcAWZeshQtnK/DQAvMKd4wZAIDgAM5aA= diff --git a/exporter/datadogexporter/integrationtest/go.sum b/exporter/datadogexporter/integrationtest/go.sum index 16e1341b2ec1..07abc40f75fe 100644 --- a/exporter/datadogexporter/integrationtest/go.sum +++ b/exporter/datadogexporter/integrationtest/go.sum @@ -1111,6 +1111,8 @@ go.opentelemetry.io/collector/processor/batchprocessor v0.113.0 h1:LPNbVILg+cKTF go.opentelemetry.io/collector/processor/batchprocessor v0.113.0/go.mod h1:tCg+B/1idJS5inxod+nRPXFdVi89Bsnl6RvzIOO9k5I= go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0 h1:3/5z0Pe/yduwF0DSpytW2+mwDA5JaIL/w6vfNYy5KzQ= go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.113.0/go.mod h1:h3wIlqMtJGIDKttjMJBo6J4dHU/Mi6+bKSxvRVUpsXs= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0 h1:bZ1i5l6/4nj7PsLqeHw7Opw5vdrpUsDvuH6a6kx+2yg= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0/go.mod h1:Uxv+5NNIJJCuz52DPFa9INjrpZSfidoTkv849tNp1qI= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 h1:cczN6whdrCWww3T0FBV3U7lsVKQmkWDX05M+9lANHgk= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0/go.mod h1:4Dmx5qsvujgJ+MC+KqWI7UDVM2liXa3sH/9XnGiL9aE= go.opentelemetry.io/collector/processor/processortest v0.113.0 h1:jGoDJ+tDCzuDcAWZeshQtnK/DQAvMKd4wZAIDgAM5aA= diff --git a/pkg/stanza/adapter/converter.go b/pkg/stanza/adapter/converter.go index 2f8c3540cf42..3ab508745bc3 100644 --- a/pkg/stanza/adapter/converter.go +++ b/pkg/stanza/adapter/converter.go @@ -155,44 +155,46 @@ func (c *Converter) workerLoop() { defer c.wg.Done() for entries := range c.workerChan { + // Send plogs directly to flushChan + c.flushChan <- ConvertEntries(entries) + } +} - resourceHashToIdx := make(map[uint64]int) - scopeIdxByResource := make(map[uint64]map[string]int) +func ConvertEntries(entries []*entry.Entry) plog.Logs { + resourceHashToIdx := make(map[uint64]int) + scopeIdxByResource := make(map[uint64]map[string]int) - pLogs := plog.NewLogs() - var sl plog.ScopeLogs + pLogs := plog.NewLogs() + var sl plog.ScopeLogs - for _, e := range entries { - resourceID := HashResource(e.Resource) - var rl plog.ResourceLogs + for _, e := range entries { + resourceID := HashResource(e.Resource) + var rl plog.ResourceLogs - resourceIdx, ok := resourceHashToIdx[resourceID] - if !ok { - resourceHashToIdx[resourceID] = pLogs.ResourceLogs().Len() + resourceIdx, ok := resourceHashToIdx[resourceID] + if !ok { + resourceHashToIdx[resourceID] = pLogs.ResourceLogs().Len() - rl = pLogs.ResourceLogs().AppendEmpty() - upsertToMap(e.Resource, rl.Resource().Attributes()) + rl = pLogs.ResourceLogs().AppendEmpty() + upsertToMap(e.Resource, rl.Resource().Attributes()) - scopeIdxByResource[resourceID] = map[string]int{e.ScopeName: 0} + scopeIdxByResource[resourceID] = map[string]int{e.ScopeName: 0} + sl = rl.ScopeLogs().AppendEmpty() + sl.Scope().SetName(e.ScopeName) + } else { + rl = pLogs.ResourceLogs().At(resourceIdx) + scopeIdxInResource, ok := scopeIdxByResource[resourceID][e.ScopeName] + if !ok { + scopeIdxByResource[resourceID][e.ScopeName] = rl.ScopeLogs().Len() sl = rl.ScopeLogs().AppendEmpty() sl.Scope().SetName(e.ScopeName) } else { - rl = pLogs.ResourceLogs().At(resourceIdx) - scopeIdxInResource, ok := scopeIdxByResource[resourceID][e.ScopeName] - if !ok { - scopeIdxByResource[resourceID][e.ScopeName] = rl.ScopeLogs().Len() - sl = rl.ScopeLogs().AppendEmpty() - sl.Scope().SetName(e.ScopeName) - } else { - sl = pLogs.ResourceLogs().At(resourceIdx).ScopeLogs().At(scopeIdxInResource) - } + sl = pLogs.ResourceLogs().At(resourceIdx).ScopeLogs().At(scopeIdxInResource) } - convertInto(e, sl.LogRecords().AppendEmpty()) } - - // Send plogs directly to flushChan - c.flushChan <- pLogs + convertInto(e, sl.LogRecords().AppendEmpty()) } + return pLogs } func (c *Converter) flushLoop() { diff --git a/pkg/stanza/adapter/factory.go b/pkg/stanza/adapter/factory.go index 2f42a1480bb6..e4b8c83ecac2 100644 --- a/pkg/stanza/adapter/factory.go +++ b/pkg/stanza/adapter/factory.go @@ -46,6 +46,21 @@ func createLogsReceiver(logReceiverType LogReceiverType) rcvr.CreateLogsFunc { operators := append([]operator.Config{inputCfg}, baseCfg.Operators...) + obsrecv, err := receiverhelper.NewObsReport(receiverhelper.ObsReportSettings{ + ReceiverID: params.ID, + ReceiverCreateSettings: params, + }) + if err != nil { + return nil, err + } + rcv := &receiver{ + set: params.TelemetrySettings, + id: params.ID, + consumer: consumerretry.NewLogs(baseCfg.RetryOnFailure, params.Logger, nextConsumer), + obsrecv: obsrecv, + storageID: baseCfg.StorageID, + } + var emitterOpts []helper.EmitterOption if baseCfg.maxBatchSize > 0 { emitterOpts = append(emitterOpts, helper.WithMaxBatchSize(baseCfg.maxBatchSize)) @@ -53,7 +68,8 @@ func createLogsReceiver(logReceiverType LogReceiverType) rcvr.CreateLogsFunc { if baseCfg.flushInterval > 0 { emitterOpts = append(emitterOpts, helper.WithFlushInterval(baseCfg.flushInterval)) } - emitter := helper.NewLogEmitter(params.TelemetrySettings, emitterOpts...) + + emitter := helper.NewLogEmitter(params.TelemetrySettings, rcv.consumeEntries, emitterOpts...) pipe, err := pipeline.Config{ Operators: operators, DefaultOutput: emitter, @@ -62,27 +78,9 @@ func createLogsReceiver(logReceiverType LogReceiverType) rcvr.CreateLogsFunc { return nil, err } - var converterOpts []converterOption - if baseCfg.numWorkers > 0 { - converterOpts = append(converterOpts, withWorkerCount(baseCfg.numWorkers)) - } - converter := NewConverter(params.TelemetrySettings, converterOpts...) - obsrecv, err := receiverhelper.NewObsReport(receiverhelper.ObsReportSettings{ - ReceiverID: params.ID, - ReceiverCreateSettings: params, - }) - if err != nil { - return nil, err - } - return &receiver{ - set: params.TelemetrySettings, - id: params.ID, - pipe: pipe, - emitter: emitter, - consumer: consumerretry.NewLogs(baseCfg.RetryOnFailure, params.Logger, nextConsumer), - converter: converter, - obsrecv: obsrecv, - storageID: baseCfg.StorageID, - }, nil + rcv.emitter = emitter + rcv.pipe = pipe + + return rcv, nil } } diff --git a/pkg/stanza/adapter/integration_test.go b/pkg/stanza/adapter/integration_test.go index a088a917c808..c75eeedd56d9 100644 --- a/pkg/stanza/adapter/integration_test.go +++ b/pkg/stanza/adapter/integration_test.go @@ -27,7 +27,7 @@ import ( func createNoopReceiver(nextConsumer consumer.Logs) (*receiver, error) { set := componenttest.NewNopTelemetrySettings() set.Logger = zap.NewNop() - emitter := helper.NewLogEmitter(set) + pipe, err := pipeline.Config{ Operators: []operator.Config{ { @@ -48,15 +48,18 @@ func createNoopReceiver(nextConsumer consumer.Logs) (*receiver, error) { return nil, err } - return &receiver{ - set: set, - id: component.MustNewID("testReceiver"), - pipe: pipe, - emitter: emitter, - consumer: nextConsumer, - converter: NewConverter(componenttest.NewNopTelemetrySettings()), - obsrecv: obsrecv, - }, nil + rcv := &receiver{ + set: set, + id: component.MustNewID("testReceiver"), + pipe: pipe, + consumer: nextConsumer, + obsrecv: obsrecv, + } + + emitter := helper.NewLogEmitter(set, rcv.consumeEntries) + + rcv.emitter = emitter + return rcv, nil } // BenchmarkEmitterToConsumer serves as a benchmark for entries going from the emitter to consumer, diff --git a/pkg/stanza/adapter/receiver.go b/pkg/stanza/adapter/receiver.go index 61124e3bf3c7..5b7760992181 100644 --- a/pkg/stanza/adapter/receiver.go +++ b/pkg/stanza/adapter/receiver.go @@ -6,7 +6,6 @@ package adapter // import "github.com/open-telemetry/opentelemetry-collector-con import ( "context" "fmt" - "sync" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/consumer" @@ -16,22 +15,19 @@ import ( "go.uber.org/multierr" "go.uber.org/zap" + "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/entry" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator/helper" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/pipeline" ) type receiver struct { - set component.TelemetrySettings - id component.ID - emitWg sync.WaitGroup - consumeWg sync.WaitGroup - cancel context.CancelFunc - - pipe pipeline.Pipeline - emitter *helper.LogEmitter - consumer consumer.Logs - converter *Converter - obsrecv *receiverhelper.ObsReport + set component.TelemetrySettings + id component.ID + + pipe pipeline.Pipeline + emitter *helper.LogEmitter + consumer consumer.Logs + obsrecv *receiverhelper.ObsReport storageID *component.ID storageClient storage.Client @@ -42,8 +38,6 @@ var _ rcvr.Logs = (*receiver)(nil) // Start tells the receiver to start func (r *receiver) Start(ctx context.Context, host component.Host) error { - rctx, cancel := context.WithCancel(ctx) - r.cancel = cancel r.set.Logger.Info("Starting stanza receiver") if err := r.setStorageClient(ctx, host); err != nil { @@ -54,86 +48,26 @@ func (r *receiver) Start(ctx context.Context, host component.Host) error { return fmt.Errorf("start stanza: %w", err) } - r.converter.Start() - - // Below we're starting 2 loops: - // * one which reads all the logs produced by the emitter and then forwards - // them to converter - // ... - r.emitWg.Add(1) - go r.emitterLoop() - - // ... - // * second one which reads all the logs produced by the converter - // (aggregated by Resource) and then calls consumer to consume them. - r.consumeWg.Add(1) - go r.consumerLoop(rctx) - - // Those 2 loops are started in separate goroutines because batching in - // the emitter loop can cause a flush, caused by either reaching the max - // flush size or by the configurable ticker which would in turn cause - // a set of log entries to be available for reading in converter's out - // channel. In order to prevent backpressure, reading from the converter - // channel and batching are done in those 2 goroutines. - return nil } -// emitterLoop reads the log entries produced by the emitter and batches them -// in converter. -func (r *receiver) emitterLoop() { - defer r.emitWg.Done() - - // Don't create done channel on every iteration. - // emitter.OutChannel is closed on ctx.Done(), no need to handle ctx here - // instead we should drain and process the channel to let emitter cancel properly - for e := range r.emitter.OutChannel() { - if err := r.converter.Batch(e); err != nil { - r.set.Logger.Error("Could not add entry to batch", zap.Error(err)) - } - } +func (r *receiver) consumeEntries(ctx context.Context, entries []*entry.Entry) { + obsrecvCtx := r.obsrecv.StartLogsOp(ctx) + pLogs := ConvertEntries(entries) + logRecordCount := pLogs.LogRecordCount() - r.set.Logger.Debug("Emitter loop stopped") -} - -// consumerLoop reads converter log entries and calls the consumer to consumer them. -func (r *receiver) consumerLoop(ctx context.Context) { - defer r.consumeWg.Done() - - // Don't create done channel on every iteration. - // converter.OutChannel is closed on Shutdown before context is cancelled. - // Drain the channel and process events before exiting - for pLogs := range r.converter.OutChannel() { - obsrecvCtx := r.obsrecv.StartLogsOp(ctx) - logRecordCount := pLogs.LogRecordCount() - - cErr := r.consumer.ConsumeLogs(ctx, pLogs) - if cErr != nil { - r.set.Logger.Error("ConsumeLogs() failed", zap.Error(cErr)) - } - r.obsrecv.EndLogsOp(obsrecvCtx, "stanza", logRecordCount, cErr) + cErr := r.consumer.ConsumeLogs(ctx, pLogs) + if cErr != nil { + r.set.Logger.Error("ConsumeLogs() failed", zap.Error(cErr)) } - - r.set.Logger.Debug("Consumer loop stopped") + r.obsrecv.EndLogsOp(obsrecvCtx, "stanza", logRecordCount, cErr) } // Shutdown is invoked during service shutdown func (r *receiver) Shutdown(ctx context.Context) error { - if r.cancel == nil { - return nil - } - r.set.Logger.Info("Stopping stanza receiver") pipelineErr := r.pipe.Stop() - // wait for emitter to finish batching and let consumers catch up - r.emitWg.Wait() - - r.converter.Stop() - r.cancel() - // wait for consumers to catch up - r.consumeWg.Wait() - if r.storageClient != nil { clientErr := r.storageClient.Close(ctx) return multierr.Combine(pipelineErr, clientErr) diff --git a/pkg/stanza/adapter/receiver_test.go b/pkg/stanza/adapter/receiver_test.go index a5349a479866..c46d0c5a376f 100644 --- a/pkg/stanza/adapter/receiver_test.go +++ b/pkg/stanza/adapter/receiver_test.go @@ -16,6 +16,7 @@ import ( "github.com/stretchr/testify/require" "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/consumer" "go.opentelemetry.io/collector/consumer/consumertest" "go.opentelemetry.io/collector/pdata/plog" @@ -48,16 +49,12 @@ func TestStart(t *testing.T) { require.NoError(t, err, "receiver start failed") stanzaReceiver := logsReceiver.(*receiver) - logChan := stanzaReceiver.emitter.OutChannelForWrite() - logChan <- []*entry.Entry{entry.New()} + + stanzaReceiver.consumeEntries(context.Background(), []*entry.Entry{entry.New()}) // Eventually because of asynchronuous nature of the receiver. - require.Eventually(t, - func() bool { - return mockConsumer.LogRecordCount() == 1 - }, - 10*time.Second, 5*time.Millisecond, "one log entry expected", - ) + require.Equal(t, 1, mockConsumer.LogRecordCount()) + require.NoError(t, logsReceiver.Shutdown(context.Background())) } @@ -87,8 +84,8 @@ func TestHandleConsume(t *testing.T) { require.NoError(t, err, "receiver start failed") stanzaReceiver := logsReceiver.(*receiver) - logChan := stanzaReceiver.emitter.OutChannelForWrite() - logChan <- []*entry.Entry{entry.New()} + + stanzaReceiver.consumeEntries(context.Background(), []*entry.Entry{entry.New()}) // Eventually because of asynchronuous nature of the receiver. require.Eventually(t, @@ -113,8 +110,8 @@ func TestHandleConsumeRetry(t *testing.T) { require.NoError(t, logsReceiver.Start(context.Background(), componenttest.NewNopHost())) stanzaReceiver := logsReceiver.(*receiver) - logChan := stanzaReceiver.emitter.OutChannelForWrite() - logChan <- []*entry.Entry{entry.New()} + + stanzaReceiver.consumeEntries(context.Background(), []*entry.Entry{entry.New()}) require.Eventually(t, func() bool { @@ -212,26 +209,12 @@ func benchmarkReceiver(b *testing.B, logsPerIteration int) { Builder: inputBuilder, } - set := componenttest.NewNopTelemetrySettings() - emitter := helper.NewLogEmitter(set) - defer func() { - require.NoError(b, emitter.Stop()) - }() - - pipe, err := pipeline.Config{ - Operators: []operator.Config{inputCfg}, - DefaultOutput: emitter, - }.Build(set) - require.NoError(b, err) - storageClient := storagetest.NewInMemoryClient( component.KindReceiver, component.MustNewID("foolog"), "test", ) - converter := NewConverter(set) - obsrecv, err := receiverhelper.NewObsReport(receiverhelper.ObsReportSettings{ReceiverCreateSettings: receivertest.NewNopSettings()}) require.NoError(b, err) @@ -241,15 +224,27 @@ func benchmarkReceiver(b *testing.B, logsPerIteration int) { receivedLogs: atomic.Uint32{}, } rcv := &receiver{ - set: set, - pipe: pipe, - emitter: emitter, consumer: mockConsumer, - converter: converter, obsrecv: obsrecv, storageClient: storageClient, } + set := componenttest.NewNopTelemetrySettings() + emitter := helper.NewLogEmitter(set, rcv.consumeEntries) + defer func() { + require.NoError(b, emitter.Stop()) + }() + + pipe, err := pipeline.Config{ + Operators: []operator.Config{inputCfg}, + DefaultOutput: emitter, + }.Build(set) + require.NoError(b, err) + + rcv.pipe = pipe + rcv.set = set + rcv.emitter = emitter + b.ResetTimer() require.NoError(b, rcv.Start(context.Background(), nil)) @@ -264,20 +259,54 @@ func benchmarkReceiver(b *testing.B, logsPerIteration int) { } func BenchmarkReadLine(b *testing.B) { + receivedAllLogs := make(chan struct{}) filePath := filepath.Join(b.TempDir(), "bench.log") pipelineYaml := fmt.Sprintf(` -- type: file_input +pipeline: + type: file_input include: - %s start_at: beginning`, filePath) - var operatorCfgs []operator.Config - require.NoError(b, yaml.Unmarshal([]byte(pipelineYaml), &operatorCfgs)) + confmapFilePath := filepath.Join(b.TempDir(), "conf.yaml") + require.NoError(b, os.WriteFile(confmapFilePath, []byte(pipelineYaml), 0600)) + + testConfMaps, err := confmaptest.LoadConf(confmapFilePath) + require.NoError(b, err) + + conf, err := testConfMaps.Sub("pipeline") + require.NoError(b, err) + require.NotNil(b, conf) + + operatorCfg := operator.Config{} + require.NoError(b, conf.Unmarshal(&operatorCfg)) + + operatorCfgs := []operator.Config{operatorCfg} + + storageClient := storagetest.NewInMemoryClient( + component.KindReceiver, + component.MustNewID("foolog"), + "test", + ) + + obsrecv, err := receiverhelper.NewObsReport(receiverhelper.ObsReportSettings{ReceiverCreateSettings: receivertest.NewNopSettings()}) + require.NoError(b, err) + + mockConsumer := &testConsumer{ + receivedAllLogs: receivedAllLogs, + expectedLogs: uint32(b.N), + receivedLogs: atomic.Uint32{}, + } + rcv := &receiver{ + consumer: mockConsumer, + obsrecv: obsrecv, + storageClient: storageClient, + } set := componenttest.NewNopTelemetrySettings() - emitter := helper.NewLogEmitter(set) + emitter := helper.NewLogEmitter(set, rcv.consumeEntries) defer func() { require.NoError(b, emitter.Stop()) }() @@ -288,6 +317,10 @@ func BenchmarkReadLine(b *testing.B) { }.Build(set) require.NoError(b, err) + rcv.pipe = pipe + rcv.set = set + rcv.emitter = emitter + // Populate the file that will be consumed file, err := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE, 0666) require.NoError(b, err) @@ -296,22 +329,13 @@ func BenchmarkReadLine(b *testing.B) { require.NoError(b, err) } - storageClient := storagetest.NewInMemoryClient( - component.KindReceiver, - component.MustNewID("foolog"), - "test", - ) - // Run the actual benchmark b.ResetTimer() - require.NoError(b, pipe.Start(storageClient)) - logChan := emitter.OutChannel() - for i := 0; i < b.N; i++ { - entries := <-logChan - for _, e := range entries { - convert(e) - } - } + require.NoError(b, rcv.Start(context.Background(), nil)) + + <-receivedAllLogs + + require.NoError(b, rcv.Shutdown(context.Background())) } func BenchmarkParseAndMap(b *testing.B) { @@ -344,7 +368,11 @@ func BenchmarkParseAndMap(b *testing.B) { require.NoError(b, yaml.Unmarshal([]byte(pipelineYaml), &operatorCfgs)) set := componenttest.NewNopTelemetrySettings() - emitter := helper.NewLogEmitter(set) + emitter := helper.NewLogEmitter(set, func(_ context.Context, entries []*entry.Entry) { + for _, e := range entries { + convert(e) + } + }) defer func() { require.NoError(b, emitter.Stop()) }() @@ -372,13 +400,6 @@ func BenchmarkParseAndMap(b *testing.B) { // Run the actual benchmark b.ResetTimer() require.NoError(b, pipe.Start(storageClient)) - logChan := emitter.OutChannel() - for i := 0; i < b.N; i++ { - entries := <-logChan - for _, e := range entries { - convert(e) - } - } } const testInputOperatorTypeStr = "test_input" diff --git a/pkg/stanza/operator/helper/emitter.go b/pkg/stanza/operator/helper/emitter.go index 51f1aa772863..aa91b85c92be 100644 --- a/pkg/stanza/operator/helper/emitter.go +++ b/pkg/stanza/operator/helper/emitter.go @@ -14,10 +14,9 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator" ) -// LogEmitter is a stanza operator that emits log entries to a channel +// LogEmitter is a stanza operator that emits log entries to the consumer callback function `consumerFunc` type LogEmitter struct { OutputOperator - logChan chan []*entry.Entry closeChan chan struct{} stopOnce sync.Once batchMux sync.Mutex @@ -25,6 +24,7 @@ type LogEmitter struct { wg sync.WaitGroup maxBatchSize uint flushInterval time.Duration + consumerFunc func(context.Context, []*entry.Entry) } var ( @@ -61,15 +61,15 @@ func (o flushIntervalOption) apply(e *LogEmitter) { } // NewLogEmitter creates a new receiver output -func NewLogEmitter(set component.TelemetrySettings, opts ...EmitterOption) *LogEmitter { +func NewLogEmitter(set component.TelemetrySettings, consumerFunc func(context.Context, []*entry.Entry), opts ...EmitterOption) *LogEmitter { op, _ := NewOutputConfig("log_emitter", "log_emitter").Build(set) e := &LogEmitter{ OutputOperator: op, - logChan: make(chan []*entry.Entry), closeChan: make(chan struct{}), maxBatchSize: defaultMaxBatchSize, batch: make([]*entry.Entry, 0, defaultMaxBatchSize), flushInterval: defaultFlushInterval, + consumerFunc: consumerFunc, } for _, opt := range opts { opt.apply(e) @@ -89,27 +89,15 @@ func (e *LogEmitter) Stop() error { e.stopOnce.Do(func() { close(e.closeChan) e.wg.Wait() - - close(e.logChan) }) return nil } -// OutChannel returns the channel on which entries will be sent to. -func (e *LogEmitter) OutChannel() <-chan []*entry.Entry { - return e.logChan -} - -// OutChannelForWrite returns the channel on which entries can be sent to. -func (e *LogEmitter) OutChannelForWrite() chan []*entry.Entry { - return e.logChan -} - // Process will emit an entry to the output channel func (e *LogEmitter) Process(ctx context.Context, ent *entry.Entry) error { if oldBatch := e.appendEntry(ent); len(oldBatch) > 0 { - e.flush(ctx, oldBatch) + e.consumerFunc(ctx, oldBatch) } return nil @@ -142,26 +130,18 @@ func (e *LogEmitter) flusher() { select { case <-ticker.C: if oldBatch := e.makeNewBatch(); len(oldBatch) > 0 { - e.flush(context.Background(), oldBatch) + e.consumerFunc(context.Background(), oldBatch) } case <-e.closeChan: // flush currently batched entries if oldBatch := e.makeNewBatch(); len(oldBatch) > 0 { - e.flush(context.Background(), oldBatch) + e.consumerFunc(context.Background(), oldBatch) } return } } } -// flush flushes the provided batch to the log channel. -func (e *LogEmitter) flush(ctx context.Context, batch []*entry.Entry) { - select { - case e.logChan <- batch: - case <-ctx.Done(): - } -} - // makeNewBatch replaces the current batch on the log emitter with a new batch, returning the old one func (e *LogEmitter) makeNewBatch() []*entry.Entry { e.batchMux.Lock() diff --git a/pkg/stanza/operator/helper/emitter_test.go b/pkg/stanza/operator/helper/emitter_test.go index f17e7f503b2d..927734dccf56 100644 --- a/pkg/stanza/operator/helper/emitter_test.go +++ b/pkg/stanza/operator/helper/emitter_test.go @@ -6,6 +6,7 @@ package helper import ( "context" "fmt" + "sync" "testing" "time" @@ -17,7 +18,16 @@ import ( ) func TestLogEmitter(t *testing.T) { - emitter := NewLogEmitter(componenttest.NewNopTelemetrySettings()) + rwMtx := &sync.RWMutex{} + var receivedEntries []*entry.Entry + emitter := NewLogEmitter( + componenttest.NewNopTelemetrySettings(), + func(_ context.Context, entries []*entry.Entry) { + rwMtx.Lock() + defer rwMtx.Unlock() + receivedEntries = entries + }, + ) require.NoError(t, emitter.Start(nil)) @@ -27,16 +37,14 @@ func TestLogEmitter(t *testing.T) { in := entry.New() - go func() { - assert.NoError(t, emitter.Process(context.Background(), in)) - }() + assert.NoError(t, emitter.Process(context.Background(), in)) - select { - case out := <-emitter.logChan: - require.Equal(t, in, out[0]) - case <-time.After(time.Second): - require.FailNow(t, "Timed out waiting for output") - } + require.Eventually(t, func() bool { + rwMtx.RLock() + defer rwMtx.RUnlock() + return receivedEntries != nil + }, time.Second, 10*time.Millisecond) + require.Equal(t, in, receivedEntries[0]) } func TestLogEmitterEmitsOnMaxBatchSize(t *testing.T) { @@ -44,7 +52,16 @@ func TestLogEmitterEmitsOnMaxBatchSize(t *testing.T) { maxBatchSize = 100 timeout = time.Second ) - emitter := NewLogEmitter(componenttest.NewNopTelemetrySettings()) + rwMtx := &sync.RWMutex{} + var receivedEntries []*entry.Entry + emitter := NewLogEmitter( + componenttest.NewNopTelemetrySettings(), + func(_ context.Context, entries []*entry.Entry) { + rwMtx.Lock() + defer rwMtx.Unlock() + receivedEntries = entries + }, + ) require.NoError(t, emitter.Start(nil)) defer func() { @@ -53,21 +70,17 @@ func TestLogEmitterEmitsOnMaxBatchSize(t *testing.T) { entries := complexEntries(maxBatchSize) - go func() { - ctx := context.Background() - for _, e := range entries { - assert.NoError(t, emitter.Process(ctx, e)) - } - }() - - timeoutChan := time.After(timeout) - - select { - case recv := <-emitter.logChan: - require.Len(t, recv, maxBatchSize, "Length of received entries was not the same as max batch size!") - case <-timeoutChan: - require.FailNow(t, "Failed to receive log entries before timeout") + ctx := context.Background() + for _, e := range entries { + assert.NoError(t, emitter.Process(ctx, e)) } + + require.Eventually(t, func() bool { + rwMtx.RLock() + defer rwMtx.RUnlock() + return receivedEntries != nil + }, timeout, 10*time.Millisecond) + require.Len(t, receivedEntries, maxBatchSize) } func TestLogEmitterEmitsOnFlushInterval(t *testing.T) { @@ -75,7 +88,17 @@ func TestLogEmitterEmitsOnFlushInterval(t *testing.T) { flushInterval = 100 * time.Millisecond timeout = time.Second ) - emitter := NewLogEmitter(componenttest.NewNopTelemetrySettings()) + rwMtx := &sync.RWMutex{} + var receivedEntries []*entry.Entry + emitter := NewLogEmitter( + componenttest.NewNopTelemetrySettings(), + func(_ context.Context, entries []*entry.Entry) { + rwMtx.Lock() + defer rwMtx.Unlock() + receivedEntries = entries + }, + ) + emitter.flushInterval = flushInterval require.NoError(t, emitter.Start(nil)) defer func() { @@ -84,19 +107,16 @@ func TestLogEmitterEmitsOnFlushInterval(t *testing.T) { entry := complexEntry() - go func() { - ctx := context.Background() - assert.NoError(t, emitter.Process(ctx, entry)) - }() + ctx := context.Background() + assert.NoError(t, emitter.Process(ctx, entry)) - timeoutChan := time.After(timeout) + require.Eventually(t, func() bool { + rwMtx.RLock() + defer rwMtx.RUnlock() + return receivedEntries != nil + }, timeout, 10*time.Millisecond) - select { - case recv := <-emitter.logChan: - require.Len(t, recv, 1, "Should have received one entry, got %d instead", len(recv)) - case <-timeoutChan: - require.FailNow(t, "Failed to receive log entry before timeout") - } + require.Len(t, receivedEntries, 1) } func complexEntries(count int) []*entry.Entry { diff --git a/pkg/stanza/operator/parser/container/config.go b/pkg/stanza/operator/parser/container/config.go index b707883713f7..81e6f2339be9 100644 --- a/pkg/stanza/operator/parser/container/config.go +++ b/pkg/stanza/operator/parser/container/config.go @@ -67,14 +67,6 @@ func (c Config) Build(set component.TelemetrySettings) (operator.Operator, error return nil, err } - cLogEmitter := helper.NewLogEmitter(set) - recombineParser, err := createRecombine(set, c, cLogEmitter) - if err != nil { - return nil, fmt.Errorf("failed to create internal recombine config: %w", err) - } - - wg := sync.WaitGroup{} - if c.Format != "" { switch c.Format { case dockerFormat, crioFormat, containerdFormat: @@ -95,14 +87,24 @@ func (c Config) Build(set component.TelemetrySettings) (operator.Operator, error ) } + wg := sync.WaitGroup{} + p := &Parser{ ParserOperator: parserOperator, - recombineParser: recombineParser, format: c.Format, addMetadataFromFilepath: c.AddMetadataFromFilePath, - criLogEmitter: cLogEmitter, criConsumers: &wg, } + + cLogEmitter := helper.NewLogEmitter(set, p.consumeEntries) + p.criLogEmitter = cLogEmitter + recombineParser, err := createRecombine(set, c, cLogEmitter) + if err != nil { + return nil, fmt.Errorf("failed to create internal recombine config: %w", err) + } + + p.recombineParser = recombineParser + return p, nil } diff --git a/pkg/stanza/operator/parser/container/parser.go b/pkg/stanza/operator/parser/container/parser.go index b53c025869df..ae27fa778318 100644 --- a/pkg/stanza/operator/parser/container/parser.go +++ b/pkg/stanza/operator/parser/container/parser.go @@ -95,7 +95,6 @@ func (p *Parser) Process(ctx context.Context, entry *entry.Entry) (err error) { p.Logger().Error("unable to start the internal recombine operator", zap.Error(err)) return } - go p.criConsumer(ctx) p.asyncConsumerStarted = true }) @@ -141,22 +140,6 @@ func (p *Parser) Process(ctx context.Context, entry *entry.Entry) (err error) { return nil } -// criConsumer receives log entries from the criLogEmitter and -// writes them to the output of the main parser -func (p *Parser) criConsumer(ctx context.Context) { - entriesChan := p.criLogEmitter.OutChannel() - p.criConsumers.Add(1) - defer p.criConsumers.Done() - for entries := range entriesChan { - for _, e := range entries { - err := p.Write(ctx, e) - if err != nil { - p.Logger().Error("failed to write entry", zap.Error(err)) - } - } - } -} - // Stop ensures that the internal recombineParser, the internal criLogEmitter and // the crioConsumer are stopped in the proper order without being affected by // any possible race conditions @@ -165,7 +148,6 @@ func (p *Parser) Stop() error { // nothing is started return return nil } - var stopErrs []error err := p.recombineParser.Stop() if err != nil { @@ -305,6 +287,15 @@ func (p *Parser) extractk8sMetaFromFilePath(e *entry.Entry) error { return nil } +func (p *Parser) consumeEntries(ctx context.Context, entries []*entry.Entry) { + for _, e := range entries { + err := p.Write(ctx, e) + if err != nil { + p.Logger().Error("failed to write entry", zap.Error(err)) + } + } +} + func moveField(e *entry.Entry, originalKey, mappedKey string) error { val, exist := entry.NewAttributeField(originalKey).Delete(e) if !exist { diff --git a/processor/logstransformprocessor/processor.go b/processor/logstransformprocessor/processor.go index 270ea0439488..09f3a16430c9 100644 --- a/processor/logstransformprocessor/processor.go +++ b/processor/logstransformprocessor/processor.go @@ -17,6 +17,7 @@ import ( "go.uber.org/zap" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/adapter" + "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/entry" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/operator/helper" "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza/pipeline" @@ -31,7 +32,6 @@ type logsTransformProcessor struct { pipe *pipeline.DirectedPipeline firstOperator operator.Operator emitter *helper.LogEmitter - converter *adapter.Converter fromConverter *adapter.FromPdataConverter shutdownFns []component.ShutdownFunc } @@ -45,7 +45,7 @@ func newProcessor(config *Config, nextConsumer consumer.Logs, set component.Tele baseCfg := p.config.BaseConfig - p.emitter = helper.NewLogEmitter(p.set) + p.emitter = helper.NewLogEmitter(p.set, p.consumeStanzaLogEntries) pipe, err := pipeline.Config{ Operators: baseCfg.Operators, DefaultOutput: p.emitter, @@ -79,8 +79,6 @@ func (ltp *logsTransformProcessor) Shutdown(ctx context.Context) error { } func (ltp *logsTransformProcessor) Start(ctx context.Context, _ component.Host) error { - // create all objects before starting them, since the loops (consumerLoop, converterLoop) depend on these converters not being nil. - ltp.converter = adapter.NewConverter(ltp.set) wkrCount := int(math.Max(1, float64(runtime.NumCPU()))) ltp.fromConverter = adapter.NewFromPdataConverter(ltp.set, wkrCount) @@ -90,15 +88,10 @@ func (ltp *logsTransformProcessor) Start(ctx context.Context, _ component.Host) // fromConverter: converts logs to stanza format -> // converterLoop: forwards converted logs to the stanza pipeline -> // pipeline: performs user configured operations on the logs -> - // emitterLoop: forwards output stanza logs for conversion to OTLP -> - // converter: converts stanza logs to OTLP -> - // consumerLoop: sends the converted OTLP logs to the next consumer + // transformProcessor: receives []*entry.Entries, converts them to plog.Logs and sends the converted OTLP logs to the next consumer // // We should start these components in reverse order of the data flow, then stop them in order of the data flow, // in order to allow for pipeline draining. - ltp.startConsumerLoop(ctx) - ltp.startConverter() - ltp.startEmitterLoop(ctx) err := ltp.startPipeline() if err != nil { return err @@ -151,41 +144,6 @@ func (ltp *logsTransformProcessor) startPipeline() error { return nil } -// startEmitterLoop starts the loop which reads all the logs modified by the pipeline and then forwards -// them to converter -func (ltp *logsTransformProcessor) startEmitterLoop(ctx context.Context) { - wg := &sync.WaitGroup{} - wg.Add(1) - go ltp.emitterLoop(ctx, wg) - - ltp.shutdownFns = append(ltp.shutdownFns, func(_ context.Context) error { - wg.Wait() - return nil - }) -} - -func (ltp *logsTransformProcessor) startConverter() { - ltp.converter.Start() - - ltp.shutdownFns = append(ltp.shutdownFns, func(_ context.Context) error { - ltp.converter.Stop() - return nil - }) -} - -// startConsumerLoop starts the loop which reads all the logs produced by the converter -// (aggregated by Resource) and then places them on the next consumer -func (ltp *logsTransformProcessor) startConsumerLoop(ctx context.Context) { - wg := &sync.WaitGroup{} - wg.Add(1) - go ltp.consumerLoop(ctx, wg) - - ltp.shutdownFns = append(ltp.shutdownFns, func(_ context.Context) error { - wg.Wait() - return nil - }) -} - func (ltp *logsTransformProcessor) ConsumeLogs(_ context.Context, ld plog.Logs) error { // Add the logs to the chain return ltp.fromConverter.Batch(ld) @@ -219,48 +177,9 @@ func (ltp *logsTransformProcessor) converterLoop(ctx context.Context, wg *sync.W } } -// emitterLoop reads the log entries produced by the emitter and batches them -// in converter. -func (ltp *logsTransformProcessor) emitterLoop(ctx context.Context, wg *sync.WaitGroup) { - defer wg.Done() - - for { - select { - case <-ctx.Done(): - ltp.set.Logger.Debug("emitter loop stopped") - return - case e, ok := <-ltp.emitter.OutChannel(): - if !ok { - ltp.set.Logger.Debug("emitter channel got closed") - return - } - - if err := ltp.converter.Batch(e); err != nil { - ltp.set.Logger.Error("processor encountered an issue with the converter", zap.Error(err)) - } - } - } -} - -// consumerLoop reads converter log entries and calls the consumer to consumer them. -func (ltp *logsTransformProcessor) consumerLoop(ctx context.Context, wg *sync.WaitGroup) { - defer wg.Done() - - for { - select { - case <-ctx.Done(): - ltp.set.Logger.Debug("consumer loop stopped") - return - - case pLogs, ok := <-ltp.converter.OutChannel(): - if !ok { - ltp.set.Logger.Debug("converter channel got closed") - return - } - - if err := ltp.consumer.ConsumeLogs(ctx, pLogs); err != nil { - ltp.set.Logger.Error("processor encountered an issue with next consumer", zap.Error(err)) - } - } +func (ltp *logsTransformProcessor) consumeStanzaLogEntries(ctx context.Context, entries []*entry.Entry) { + pLogs := adapter.ConvertEntries(entries) + if err := ltp.consumer.ConsumeLogs(ctx, pLogs); err != nil { + ltp.set.Logger.Error("processor encountered an issue with next consumer", zap.Error(err)) } } diff --git a/processor/resourcedetectionprocessor/README.md b/processor/resourcedetectionprocessor/README.md index 30e91a3d6227..cf16a5abc9e8 100644 --- a/processor/resourcedetectionprocessor/README.md +++ b/processor/resourcedetectionprocessor/README.md @@ -3,11 +3,13 @@ | Status | | | ------------- |-----------| -| Stability | [beta]: traces, metrics, logs | +| Stability | [development]: profiles | +| | [beta]: traces, metrics, logs | | Distributions | [contrib], [k8s] | | Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aprocessor%2Fresourcedetection%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aprocessor%2Fresourcedetection) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aprocessor%2Fresourcedetection%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aprocessor%2Fresourcedetection) | | [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Aneurysm9](https://www.github.com/Aneurysm9), [@dashpole](https://www.github.com/dashpole) | +[development]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#development [beta]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/component-stability.md#beta [contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib [k8s]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-k8s diff --git a/processor/resourcedetectionprocessor/factory.go b/processor/resourcedetectionprocessor/factory.go index f1ae4b11ac35..05ff7934f81b 100644 --- a/processor/resourcedetectionprocessor/factory.go +++ b/processor/resourcedetectionprocessor/factory.go @@ -12,8 +12,11 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/confighttp" "go.opentelemetry.io/collector/consumer" + "go.opentelemetry.io/collector/consumer/consumerprofiles" "go.opentelemetry.io/collector/processor" "go.opentelemetry.io/collector/processor/processorhelper" + "go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles" + "go.opentelemetry.io/collector/processor/processorprofiles" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal/aws/ec2" @@ -70,12 +73,13 @@ func NewFactory() processor.Factory { providers: map[component.ID]*internal.ResourceProvider{}, } - return processor.NewFactory( + return processorprofiles.NewFactory( metadata.Type, createDefaultConfig, - processor.WithTraces(f.createTracesProcessor, metadata.TracesStability), - processor.WithMetrics(f.createMetricsProcessor, metadata.MetricsStability), - processor.WithLogs(f.createLogsProcessor, metadata.LogsStability)) + processorprofiles.WithTraces(f.createTracesProcessor, metadata.TracesStability), + processorprofiles.WithMetrics(f.createMetricsProcessor, metadata.MetricsStability), + processorprofiles.WithLogs(f.createLogsProcessor, metadata.LogsStability), + processorprofiles.WithProfiles(f.createProfilesProcessor, metadata.ProfilesStability)) } // Type gets the type of the Option config created by this factory. @@ -164,6 +168,27 @@ func (f *factory) createLogsProcessor( processorhelper.WithStart(rdp.Start)) } +func (f *factory) createProfilesProcessor( + ctx context.Context, + set processor.Settings, + cfg component.Config, + nextConsumer consumerprofiles.Profiles, +) (processorprofiles.Profiles, error) { + rdp, err := f.getResourceDetectionProcessor(set, cfg) + if err != nil { + return nil, err + } + + return processorhelperprofiles.NewProfiles( + ctx, + set, + cfg, + nextConsumer, + rdp.processProfiles, + processorhelperprofiles.WithCapabilities(consumerCapabilities), + processorhelperprofiles.WithStart(rdp.Start)) +} + func (f *factory) getResourceDetectionProcessor( params processor.Settings, cfg component.Config, diff --git a/processor/resourcedetectionprocessor/factory_test.go b/processor/resourcedetectionprocessor/factory_test.go index 7256f074aa82..1d2fdc1db014 100644 --- a/processor/resourcedetectionprocessor/factory_test.go +++ b/processor/resourcedetectionprocessor/factory_test.go @@ -13,6 +13,7 @@ import ( "go.opentelemetry.io/collector/component/componenttest" "go.opentelemetry.io/collector/confmap/confmaptest" "go.opentelemetry.io/collector/consumer/consumertest" + "go.opentelemetry.io/collector/processor/processorprofiles" "go.opentelemetry.io/collector/processor/processortest" ) @@ -37,6 +38,10 @@ func TestCreateProcessor(t *testing.T) { lp, err := factory.CreateLogs(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) assert.NoError(t, err) assert.NotNil(t, lp) + + pp, err := factory.(processorprofiles.Factory).CreateProfiles(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) + assert.NoError(t, err) + assert.NotNil(t, pp) } func TestCreateConfigProcessors(t *testing.T) { @@ -82,4 +87,8 @@ func TestInvalidConfig(t *testing.T) { lp, err := factory.CreateLogs(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) assert.Error(t, err) assert.Nil(t, lp) + + pp, err := factory.(processorprofiles.Factory).CreateProfiles(context.Background(), processortest.NewNopSettings(), cfg, consumertest.NewNop()) + assert.Error(t, err) + assert.Nil(t, pp) } diff --git a/processor/resourcedetectionprocessor/go.mod b/processor/resourcedetectionprocessor/go.mod index d7eff97cd5ae..01a5250cf62f 100644 --- a/processor/resourcedetectionprocessor/go.mod +++ b/processor/resourcedetectionprocessor/go.mod @@ -20,10 +20,14 @@ require ( go.opentelemetry.io/collector/config/configtls v1.19.0 go.opentelemetry.io/collector/confmap v1.19.0 go.opentelemetry.io/collector/consumer v0.113.0 + go.opentelemetry.io/collector/consumer/consumerprofiles v0.113.0 go.opentelemetry.io/collector/consumer/consumertest v0.113.0 go.opentelemetry.io/collector/featuregate v1.19.0 go.opentelemetry.io/collector/pdata v1.19.0 + go.opentelemetry.io/collector/pdata/pprofile v0.113.0 go.opentelemetry.io/collector/processor v0.113.0 + go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0 + go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 go.opentelemetry.io/collector/processor/processortest v0.113.0 go.opentelemetry.io/collector/semconv v0.113.0 go.uber.org/goleak v1.3.0 @@ -114,13 +118,10 @@ require ( go.opentelemetry.io/collector/config/configcompression v1.19.0 // indirect go.opentelemetry.io/collector/config/configtelemetry v0.113.0 // indirect go.opentelemetry.io/collector/config/internal v0.113.0 // indirect - go.opentelemetry.io/collector/consumer/consumerprofiles v0.113.0 // indirect go.opentelemetry.io/collector/extension v0.113.0 // indirect go.opentelemetry.io/collector/extension/auth v0.113.0 // indirect - go.opentelemetry.io/collector/pdata/pprofile v0.113.0 // indirect go.opentelemetry.io/collector/pdata/testdata v0.113.0 // indirect go.opentelemetry.io/collector/pipeline v0.113.0 // indirect - go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 // indirect go.opentelemetry.io/otel v1.31.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.30.0 // indirect diff --git a/processor/resourcedetectionprocessor/go.sum b/processor/resourcedetectionprocessor/go.sum index 24c848ce37b5..f639f07ef9fc 100644 --- a/processor/resourcedetectionprocessor/go.sum +++ b/processor/resourcedetectionprocessor/go.sum @@ -502,6 +502,8 @@ go.opentelemetry.io/collector/pipeline v0.113.0 h1:vSRzRe3717jV0btCNPhVkhg2lu0uF go.opentelemetry.io/collector/pipeline v0.113.0/go.mod h1:4vOvjVsoYTHVGTbfFwqfnQOSV2K3RKUHofh3jNRc2Mg= go.opentelemetry.io/collector/processor v0.113.0 h1:BQI6MsKtiCG9HT/nmiRXTKP6SZFrjFKVfM6pTQfbc0k= go.opentelemetry.io/collector/processor v0.113.0/go.mod h1:oX91zMI8ZkoaYSUfUYflHiMiiBJPKtODNBUCrETLLd8= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0 h1:bZ1i5l6/4nj7PsLqeHw7Opw5vdrpUsDvuH6a6kx+2yg= +go.opentelemetry.io/collector/processor/processorhelper/processorhelperprofiles v0.113.0/go.mod h1:Uxv+5NNIJJCuz52DPFa9INjrpZSfidoTkv849tNp1qI= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0 h1:cczN6whdrCWww3T0FBV3U7lsVKQmkWDX05M+9lANHgk= go.opentelemetry.io/collector/processor/processorprofiles v0.113.0/go.mod h1:4Dmx5qsvujgJ+MC+KqWI7UDVM2liXa3sH/9XnGiL9aE= go.opentelemetry.io/collector/processor/processortest v0.113.0 h1:jGoDJ+tDCzuDcAWZeshQtnK/DQAvMKd4wZAIDgAM5aA= diff --git a/processor/resourcedetectionprocessor/internal/metadata/generated_status.go b/processor/resourcedetectionprocessor/internal/metadata/generated_status.go index ecca969e7db9..ee0a49313187 100644 --- a/processor/resourcedetectionprocessor/internal/metadata/generated_status.go +++ b/processor/resourcedetectionprocessor/internal/metadata/generated_status.go @@ -12,7 +12,8 @@ var ( ) const ( - TracesStability = component.StabilityLevelBeta - MetricsStability = component.StabilityLevelBeta - LogsStability = component.StabilityLevelBeta + ProfilesStability = component.StabilityLevelDevelopment + TracesStability = component.StabilityLevelBeta + MetricsStability = component.StabilityLevelBeta + LogsStability = component.StabilityLevelBeta ) diff --git a/processor/resourcedetectionprocessor/metadata.yaml b/processor/resourcedetectionprocessor/metadata.yaml index fee99b032daf..9e98d1f5cbd7 100644 --- a/processor/resourcedetectionprocessor/metadata.yaml +++ b/processor/resourcedetectionprocessor/metadata.yaml @@ -4,6 +4,7 @@ status: class: processor stability: beta: [traces, metrics, logs] + development: [profiles] distributions: [contrib, k8s] codeowners: active: [Aneurysm9, dashpole] diff --git a/processor/resourcedetectionprocessor/resourcedetection_processor.go b/processor/resourcedetectionprocessor/resourcedetection_processor.go index 44f3331e6473..40d2939ad354 100644 --- a/processor/resourcedetectionprocessor/resourcedetection_processor.go +++ b/processor/resourcedetectionprocessor/resourcedetection_processor.go @@ -11,6 +11,7 @@ import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" + "go.opentelemetry.io/collector/pdata/pprofile" "go.opentelemetry.io/collector/pdata/ptrace" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal" @@ -69,3 +70,15 @@ func (rdp *resourceDetectionProcessor) processLogs(_ context.Context, ld plog.Lo } return ld, nil } + +// processProfiles implements the ProcessProfilesFunc type. +func (rdp *resourceDetectionProcessor) processProfiles(_ context.Context, ld pprofile.Profiles) (pprofile.Profiles, error) { + rl := ld.ResourceProfiles() + for i := 0; i < rl.Len(); i++ { + rss := rl.At(i) + rss.SetSchemaUrl(internal.MergeSchemaURL(rss.SchemaUrl(), rdp.schemaURL)) + res := rss.Resource() + internal.MergeResource(res, rdp.resource, rdp.override) + } + return ld, nil +} diff --git a/processor/resourcedetectionprocessor/resourcedetection_processor_test.go b/processor/resourcedetectionprocessor/resourcedetection_processor_test.go index 78f63a150a0d..a61c8a4efaaf 100644 --- a/processor/resourcedetectionprocessor/resourcedetection_processor_test.go +++ b/processor/resourcedetectionprocessor/resourcedetection_processor_test.go @@ -19,8 +19,10 @@ import ( "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" "go.opentelemetry.io/collector/pdata/pmetric" + "go.opentelemetry.io/collector/pdata/pprofile" "go.opentelemetry.io/collector/pdata/ptrace" "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/processor/processorprofiles" "go.opentelemetry.io/collector/processor/processortest" "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor/internal" @@ -259,6 +261,37 @@ func TestResourceProcessor(t *testing.T) { got = tln.AllLogs()[0].ResourceLogs().At(0).Resource().Attributes().AsRaw() assert.Equal(t, tt.expectedResource, got) + + // Test profiles consumer + tpn := new(consumertest.ProfilesSink) + rpp, err := factory.createProfilesProcessor(context.Background(), processortest.NewNopSettings(), cfg, tpn) + + if tt.expectedNewError != "" { + assert.EqualError(t, err, tt.expectedNewError) + return + } + + require.NoError(t, err) + assert.True(t, rpp.Capabilities().MutatesData) + + err = rpp.Start(context.Background(), componenttest.NewNopHost()) + + if tt.detectedError != nil { + require.NoError(t, err) + return + } + + require.NoError(t, err) + defer func() { assert.NoError(t, rpp.Shutdown(context.Background())) }() + + pd := pprofile.NewProfiles() + require.NoError(t, pd.ResourceProfiles().AppendEmpty().Resource().Attributes().FromRaw(tt.sourceResource)) + + err = rpp.ConsumeProfiles(context.Background(), pd) + require.NoError(t, err) + got = tpn.AllProfiles()[0].ResourceProfiles().At(0).Resource().Attributes().AsRaw() + + assert.Equal(t, tt.expectedResource, got) }) } } @@ -328,3 +361,25 @@ func BenchmarkConsumeLogsAll(b *testing.B) { cfg := &Config{Override: true, Detectors: []string{env.TypeStr, gcp.TypeStr}} benchmarkConsumeLogs(b, cfg) } + +func benchmarkConsumeProfiles(b *testing.B, cfg *Config) { + factory := NewFactory() + sink := new(consumertest.ProfilesSink) + processor, _ := factory.(processorprofiles.Factory).CreateProfiles(context.Background(), processortest.NewNopSettings(), cfg, sink) + + b.ResetTimer() + for n := 0; n < b.N; n++ { + // TODO use testbed.PerfTestDataProvider here once that includes resources + assert.NoError(b, processor.ConsumeProfiles(context.Background(), pprofile.NewProfiles())) + } +} + +func BenchmarkConsumeProfilesDefault(b *testing.B) { + cfg := NewFactory().CreateDefaultConfig() + benchmarkConsumeProfiles(b, cfg.(*Config)) +} + +func BenchmarkConsumeProfilesAll(b *testing.B) { + cfg := &Config{Override: true, Detectors: []string{env.TypeStr, gcp.TypeStr}} + benchmarkConsumeProfiles(b, cfg) +} diff --git a/receiver/k8sclusterreceiver/testdata/e2e/expected.yaml b/receiver/k8sclusterreceiver/testdata/e2e/expected.yaml index 9f7aed414369..5b78ab5f0f95 100644 --- a/receiver/k8sclusterreceiver/testdata/e2e/expected.yaml +++ b/receiver/k8sclusterreceiver/testdata/e2e/expected.yaml @@ -6,7 +6,7 @@ resourceMetrics: stringValue: default - key: k8s.namespace.uid value: - stringValue: feb94a85-d29f-4693-a6d7-ca5206a5141e + stringValue: 7f2b26ac-b0f5-4929-a959-5cd2c6daa767 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -19,7 +19,7 @@ resourceMetrics: name: k8s.namespace.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -27,7 +27,7 @@ resourceMetrics: stringValue: kube-node-lease - key: k8s.namespace.uid value: - stringValue: ff852fe4-f42e-48d7-883d-3df03ab5741c + stringValue: 23a9792c-bccb-4307-bc28-eb7b37a7c271 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -40,7 +40,7 @@ resourceMetrics: name: k8s.namespace.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -48,7 +48,7 @@ resourceMetrics: stringValue: kube-public - key: k8s.namespace.uid value: - stringValue: 66be991c-1e7d-4a14-af98-4f421bee9ec4 + stringValue: 38490c86-545d-47ca-8d32-b613b7ca546a schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -61,7 +61,7 @@ resourceMetrics: name: k8s.namespace.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -69,7 +69,7 @@ resourceMetrics: stringValue: kube-system - key: k8s.namespace.uid value: - stringValue: 1fdcff4f-01e0-459a-baaa-463b5f52eaa2 + stringValue: 850c440b-d959-4c07-a7da-abd8fd1b0c1b schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -82,7 +82,7 @@ resourceMetrics: name: k8s.namespace.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -90,7 +90,7 @@ resourceMetrics: stringValue: local-path-storage - key: k8s.namespace.uid value: - stringValue: cf6c8796-7d4b-4e61-ae41-9c90207c7c06 + stringValue: c475b194-71ef-4911-aff3-f4848f777417 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -103,7 +103,7 @@ resourceMetrics: name: k8s.namespace.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.node.name @@ -111,7 +111,7 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.node.uid value: - stringValue: 080365b3-8b82-48dc-9885-d88364004eb3 + stringValue: 9b78ed70-9ff6-4cf4-a94c-5df055362770 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -123,7 +123,7 @@ resourceMetrics: name: k8s.node.condition_ready scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.cronjob.name @@ -131,7 +131,7 @@ resourceMetrics: stringValue: test-k8scluster-receiver-cronjob - key: k8s.cronjob.uid value: - stringValue: 6a3c3e99-5db1-481f-9d5d-782ae9de9f58 + stringValue: 342bf5aa-ded4-4177-82fa-01002b66b971 - key: k8s.namespace.name value: stringValue: default @@ -141,14 +141,14 @@ resourceMetrics: - description: The number of actively running jobs for a cronjob gauge: dataPoints: - - asInt: "2" + - asInt: "1" startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.cronjob.active_jobs unit: '{job}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.daemonset.name @@ -156,7 +156,7 @@ resourceMetrics: stringValue: kindnet - key: k8s.daemonset.uid value: - stringValue: 4b389825-8fb0-4c66-a774-c9dfcba9d813 + stringValue: bcb148ce-6b1b-48b8-ade7-c54f95949a35 - key: k8s.namespace.name value: stringValue: kube-system @@ -197,7 +197,7 @@ resourceMetrics: unit: '{node}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.daemonset.name @@ -205,7 +205,7 @@ resourceMetrics: stringValue: kube-proxy - key: k8s.daemonset.uid value: - stringValue: b88aca8b-5776-4f6a-b1f4-d430f972e7fc + stringValue: 88bb9c34-24d1-45cd-8fce-39d5b216c158 - key: k8s.namespace.name value: stringValue: kube-system @@ -246,7 +246,7 @@ resourceMetrics: unit: '{node}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.deployment.name @@ -254,7 +254,7 @@ resourceMetrics: stringValue: coredns - key: k8s.deployment.uid value: - stringValue: 40f70689-1d8b-4eaf-b1b9-c7f1604ad616 + stringValue: 9d878e59-fc7e-4959-97d8-7434a08b5711 - key: k8s.namespace.name value: stringValue: kube-system @@ -279,7 +279,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.deployment.name @@ -287,7 +287,7 @@ resourceMetrics: stringValue: local-path-provisioner - key: k8s.deployment.uid value: - stringValue: c97a7ce6-7bc2-475b-ad74-ccbd1c464e17 + stringValue: b542b645-1939-4eb7-bb0b-a3cfa3eceba2 - key: k8s.namespace.name value: stringValue: local-path-storage @@ -312,15 +312,15 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.deployment.name value: - stringValue: otelcol-786b94f3 + stringValue: otelcol-aa664a32 - key: k8s.deployment.uid value: - stringValue: 6433ed08-d04b-458d-b3db-f526238a1e65 + stringValue: a787af64-c9cc-4532-8514-b769cce0f651 - key: k8s.namespace.name value: stringValue: default @@ -345,7 +345,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.hpa.name @@ -353,7 +353,7 @@ resourceMetrics: stringValue: test-k8scluster-receiver-hpa - key: k8s.hpa.uid value: - stringValue: 963572dc-4663-4fb2-930a-e143320a03c3 + stringValue: 0859b2dc-76e0-4ecb-b8c9-91bc2e05d9f4 - key: k8s.namespace.name value: stringValue: default @@ -394,72 +394,15 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest - - resource: - attributes: - - key: k8s.job.name - value: - stringValue: test-k8scluster-receiver-cronjob-28839770 - - key: k8s.job.uid - value: - stringValue: a38da134-af71-4bc1-a585-c9e0342f9aab - - key: k8s.namespace.name - value: - stringValue: default - schemaUrl: https://opentelemetry.io/schemas/1.18.0 - scopeMetrics: - - metrics: - - description: The number of actively running pods for a job - gauge: - dataPoints: - - asInt: "1" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.job.active_pods - unit: '{pod}' - - description: The desired number of successfully finished pods the job should be run with - gauge: - dataPoints: - - asInt: "1" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.job.desired_successful_pods - unit: '{pod}' - - description: The number of pods which reached phase Failed for a job - gauge: - dataPoints: - - asInt: "0" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.job.failed_pods - unit: '{pod}' - - description: The max desired number of pods the job should run at any given time - gauge: - dataPoints: - - asInt: "1" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.job.max_parallel_pods - unit: '{pod}' - - description: The number of pods which reached phase Succeeded for a job - gauge: - dataPoints: - - asInt: "0" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.job.successful_pods - unit: '{pod}' - scope: - name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.job.name value: - stringValue: test-k8scluster-receiver-cronjob-28839771 + stringValue: test-k8scluster-receiver-cronjob-28848323 - key: k8s.job.uid value: - stringValue: 37a9e0cc-5315-4e89-bb2b-5221849ff483 + stringValue: fc819ca2-19ea-4c90-a46f-0b4f468e088c - key: k8s.namespace.name value: stringValue: default @@ -508,7 +451,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.job.name @@ -516,7 +459,7 @@ resourceMetrics: stringValue: test-k8scluster-receiver-job - key: k8s.job.uid value: - stringValue: b7ecbf9e-8e1a-4d70-beda-aab183645382 + stringValue: f9d8177f-2b94-4db6-a170-7c82fb37fc60 - key: k8s.namespace.name value: stringValue: default @@ -565,7 +508,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -573,10 +516,10 @@ resourceMetrics: stringValue: default - key: k8s.replicaset.name value: - stringValue: otelcol-786b94f3-67cf69944f + stringValue: otelcol-aa664a32-694bd5645b - key: k8s.replicaset.uid value: - stringValue: d532dd9c-0490-4f85-be78-fd21d8a1b56f + stringValue: 4dce2ca5-5236-40e2-a934-6c92782da3d7 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -598,7 +541,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -609,7 +552,7 @@ resourceMetrics: stringValue: test-k8scluster-receiver-statefulset - key: k8s.statefulset.uid value: - stringValue: 5ceb9f10-fc64-4d70-b6f8-228b4a0cfd3c + stringValue: 59d53c2e-cce4-403b-bcc0-b83fc1bc36b9 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -647,7 +590,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -655,10 +598,10 @@ resourceMetrics: stringValue: kube-system - key: k8s.replicaset.name value: - stringValue: coredns-7db6d8ff4d + stringValue: coredns-76f75df574 - key: k8s.replicaset.uid value: - stringValue: 2c8fee82-58d4-46c4-ae5e-81afcc5f9948 + stringValue: d4a8fe9f-b4f6-4af4-8f00-9b87b00113d8 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -680,7 +623,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -688,10 +631,10 @@ resourceMetrics: stringValue: local-path-storage - key: k8s.replicaset.name value: - stringValue: local-path-provisioner-988d74bc + stringValue: local-path-provisioner-7577fdbbfb - key: k8s.replicaset.uid value: - stringValue: e58f8ba2-8df8-425e-8a2a-c07cf351bbd8 + stringValue: 45dc7e2d-aff2-4ae8-b6d5-1b48dabbf262 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -713,7 +656,7 @@ resourceMetrics: unit: '{pod}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -724,10 +667,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: otelcol-786b94f3-67cf69944f-6zv25 + stringValue: otelcol-aa664a32-694bd5645b-9fmzd - key: k8s.pod.uid value: - stringValue: 1fb8be2b-ae32-41c2-a172-e6cb9beb7c37 + stringValue: 6913e713-f407-4186-aa31-946410566b81 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -740,7 +683,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -751,10 +694,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: test-k8scluster-receiver-cronjob-28839770-9pp7g + stringValue: test-k8scluster-receiver-cronjob-28848323-mcsr8 - key: k8s.pod.uid value: - stringValue: e388cfa8-06c3-47b6-a7a6-113d7cdda849 + stringValue: 0010e2e8-8797-4bfb-8ef5-ac9c87cee06c schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -767,7 +710,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -778,10 +721,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: test-k8scluster-receiver-cronjob-28839771-llccr + stringValue: test-k8scluster-receiver-job-4whkq - key: k8s.pod.uid value: - stringValue: 0c2351b3-842c-4632-95c2-e7b061128a98 + stringValue: b93fa4ec-ab09-4815-9c20-bc4860febfcc schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -794,34 +737,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest - - resource: - attributes: - - key: k8s.namespace.name - value: - stringValue: default - - key: k8s.node.name - value: - stringValue: kind-control-plane - - key: k8s.pod.name - value: - stringValue: test-k8scluster-receiver-job-bzjrh - - key: k8s.pod.uid - value: - stringValue: 7e8bdace-4bce-4750-bd8c-d7359bb3e56b - schemaUrl: https://opentelemetry.io/schemas/1.18.0 - scopeMetrics: - - metrics: - - description: Current phase of the pod (1 - Pending, 2 - Running, 3 - Succeeded, 4 - Failed, 5 - Unknown) - gauge: - dataPoints: - - asInt: "2" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.pod.phase - scope: - name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -835,7 +751,7 @@ resourceMetrics: stringValue: test-k8scluster-receiver-statefulset-0 - key: k8s.pod.uid value: - stringValue: f1ea5486-77b7-41c6-a3be-d03650011801 + stringValue: b2dd866e-3a93-465b-a6be-ee129972b9e1 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -848,7 +764,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -859,10 +775,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: coredns-7db6d8ff4d-5kh78 + stringValue: coredns-76f75df574-mmjtf - key: k8s.pod.uid value: - stringValue: 2c5b60e0-a01e-4312-8818-d85f94ab841e + stringValue: ed088c60-0fe4-4b70-9eba-55ea389dc573 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -875,7 +791,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -886,10 +802,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: coredns-7db6d8ff4d-p89tc + stringValue: coredns-76f75df574-pfdx5 - key: k8s.pod.uid value: - stringValue: f3494708-493a-4f0f-965c-dcedfdca253f + stringValue: ed6fbad4-9bc1-4142-9f4d-e772b6c9cfbd schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -902,7 +818,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -916,7 +832,7 @@ resourceMetrics: stringValue: etcd-kind-control-plane - key: k8s.pod.uid value: - stringValue: 40e8f13b-bec6-4dae-98d9-fd86939dfc4c + stringValue: 89fb113f-1bd3-4623-b46c-933da87e2719 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -929,7 +845,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -940,10 +856,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kindnet-qwzhw + stringValue: kindnet-gj7ss - key: k8s.pod.uid value: - stringValue: 955e1f8c-2fe3-4a1d-85e6-31ff7410dc00 + stringValue: 3bc0ca83-314f-4653-9179-43351ce6ec3d schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -956,7 +872,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -970,7 +886,7 @@ resourceMetrics: stringValue: kube-apiserver-kind-control-plane - key: k8s.pod.uid value: - stringValue: d2032a9e-8c7c-4d9c-bbcb-526bd1a7b4f7 + stringValue: f66aabd7-0b50-4839-9a1f-fc35eb59d040 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -983,7 +899,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -997,7 +913,7 @@ resourceMetrics: stringValue: kube-controller-manager-kind-control-plane - key: k8s.pod.uid value: - stringValue: e3e6d44a-5bc6-4687-85f1-37eb42c42c05 + stringValue: c74f189c-1292-4ad0-9cb3-ec00d9aea238 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -1010,7 +926,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -1021,10 +937,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kube-proxy-kktz6 + stringValue: kube-proxy-vf6lk - key: k8s.pod.uid value: - stringValue: c347e316-1bab-4b4d-bc37-4f526fca19a4 + stringValue: 3ab3dafa-1d0a-450c-b04e-908f8c634a7a schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -1037,7 +953,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -1051,7 +967,7 @@ resourceMetrics: stringValue: kube-scheduler-kind-control-plane - key: k8s.pod.uid value: - stringValue: 991bbf5d-d6b9-4e33-8954-2a5f3505ff2d + stringValue: de119c6f-e99f-4a50-b5cd-ba1264b496fb schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -1064,7 +980,7 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: k8s.namespace.name @@ -1075,10 +991,10 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: local-path-provisioner-988d74bc-c2wx7 + stringValue: local-path-provisioner-7577fdbbfb-q4vsw - key: k8s.pod.uid value: - stringValue: 1169e7ae-031e-4535-bb94-aee23b0b7df3 + stringValue: ff867316-a95b-4024-9da6-ad397f94750a schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -1091,36 +1007,44 @@ resourceMetrics: name: k8s.pod.phase scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 10c9bec31ac94fc58e65ce5ed809455727eee9daae8ea80668990e848a7e7da0 + stringValue: 24a762e91f4c1f45583fb6a59963d3f7c8f4f05040b1a5ebd90c8f062c389b2f - key: container.image.name value: - stringValue: docker.io/library/alpine + stringValue: registry.k8s.io/kube-scheduler-amd64 - key: container.image.tag value: - stringValue: latest + stringValue: v1.29.2 - key: k8s.container.name value: - stringValue: alpine + stringValue: kube-scheduler - key: k8s.namespace.name value: - stringValue: default + stringValue: kube-system - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: test-k8scluster-receiver-cronjob-28839771-llccr + stringValue: kube-scheduler-kind-control-plane - key: k8s.pod.uid value: - stringValue: 0c2351b3-842c-4632-95c2-e7b061128a98 + stringValue: de119c6f-e99f-4a50-b5cd-ba1264b496fb schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: + - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asDouble: 0.1 + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.cpu_request + unit: '{cpu}' - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1138,21 +1062,21 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 1f493fa217d539d5b74ffc4579e887f904f630d320105a2b83a987105342ae80 + stringValue: 45e131a79cddf6a61e8283d9ec6f55305e2e222858853e7e799b40e349763dca - key: container.image.name value: - stringValue: registry.k8s.io/kube-proxy-arm64 + stringValue: registry.k8s.io/coredns/coredns - key: container.image.tag value: - stringValue: v1.30.0 + stringValue: v1.11.1 - key: k8s.container.name value: - stringValue: kube-proxy + stringValue: coredns - key: k8s.namespace.name value: stringValue: kube-system @@ -1161,13 +1085,37 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kube-proxy-kktz6 + stringValue: coredns-76f75df574-pfdx5 - key: k8s.pod.uid value: - stringValue: c347e316-1bab-4b4d-bc37-4f526fca19a4 + stringValue: ed6fbad4-9bc1-4142-9f4d-e772b6c9cfbd schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: + - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asDouble: 0.1 + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.cpu_request + unit: '{cpu}' + - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asInt: "178257920" + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.memory_limit + unit: By + - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asInt: "73400320" + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.memory_request + unit: By - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1185,12 +1133,12 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 2cb1cb272a301a00f50020c3e4751bfa9a281496a6dc35f02a5546451e894e93 + stringValue: 5d94185c2a933a3b7f6be03668a145d76d4d881429edb95836f1ba4c8ca266bb - key: container.image.name value: stringValue: docker.io/library/nginx @@ -1211,7 +1159,7 @@ resourceMetrics: stringValue: test-k8scluster-receiver-statefulset-0 - key: k8s.pod.uid value: - stringValue: f1ea5486-77b7-41c6-a3be-d03650011801 + stringValue: b2dd866e-3a93-465b-a6be-ee129972b9e1 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: @@ -1232,36 +1180,44 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 567cd0ad83d68987dfb4dbffd056732b25bd2fc89e912605c16a5d1a4cd2b54c + stringValue: 5e156d44eca670f77bdbfd440118ef874e369814bff85f01c39f960dcec1254a - key: container.image.name value: - stringValue: docker.io/library/alpine + stringValue: registry.k8s.io/kube-controller-manager-amd64 - key: container.image.tag value: - stringValue: latest + stringValue: v1.29.2 - key: k8s.container.name value: - stringValue: alpine + stringValue: kube-controller-manager - key: k8s.namespace.name value: - stringValue: default + stringValue: kube-system - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: test-k8scluster-receiver-job-bzjrh + stringValue: kube-controller-manager-kind-control-plane - key: k8s.pod.uid value: - stringValue: 7e8bdace-4bce-4750-bd8c-d7359bb3e56b + stringValue: c74f189c-1292-4ad0-9cb3-ec00d9aea238 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: + - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asDouble: 0.2 + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.cpu_request + unit: '{cpu}' - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1279,21 +1235,21 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 6af7be5c276ef225d046ad0de442ee450c39122a12991f9da82c9629f949967b + stringValue: 7e0eab8dbcf238dcb63b71b6d3889171dfe5c6febf66e5d6a8a793c53af4a2f9 - key: container.image.name value: - stringValue: registry.k8s.io/coredns/coredns + stringValue: docker.io/kindest/kindnetd - key: container.image.tag value: - stringValue: v1.11.1 + stringValue: v20240202-8f1494ea - key: k8s.container.name value: - stringValue: coredns + stringValue: kindnet-cni - key: k8s.namespace.name value: stringValue: kube-system @@ -1302,13 +1258,21 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: coredns-7db6d8ff4d-5kh78 + stringValue: kindnet-gj7ss - key: k8s.pod.uid value: - stringValue: 2c5b60e0-a01e-4312-8818-d85f94ab841e + stringValue: 3bc0ca83-314f-4653-9179-43351ce6ec3d schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: + - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asDouble: 0.1 + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.cpu_limit + unit: '{cpu}' - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: @@ -1320,7 +1284,7 @@ resourceMetrics: - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asInt: "178257920" + - asInt: "52428800" startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.memory_limit @@ -1328,7 +1292,7 @@ resourceMetrics: - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asInt: "73400320" + - asInt: "52428800" startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.memory_request @@ -1350,44 +1314,36 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 7349de0618283fb11a957febc6689a0fbbfd9b52af1106bb3608bc4278a27ecf + stringValue: 95dd9be2d5d8a17bdde0d4ee90910dee65589de65eb7428b85068e66f0467501 - key: container.image.name value: - stringValue: registry.k8s.io/kube-scheduler-arm64 + stringValue: docker.io/library/alpine - key: container.image.tag value: - stringValue: v1.30.0 + stringValue: latest - key: k8s.container.name value: - stringValue: kube-scheduler + stringValue: alpine - key: k8s.namespace.name value: - stringValue: kube-system + stringValue: default - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kube-scheduler-kind-control-plane + stringValue: test-k8scluster-receiver-cronjob-28848323-mcsr8 - key: k8s.pod.uid value: - stringValue: 991bbf5d-d6b9-4e33-8954-2a5f3505ff2d + stringValue: 0010e2e8-8797-4bfb-8ef5-ac9c87cee06c schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asDouble: 0.1 - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.cpu_request - unit: '{cpu}' - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1405,21 +1361,21 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 9c70b20960c36ddb400607a354058cd7525ec491251379c5aa84c359c5d518d7 + stringValue: cf67cab7bc6b163d1d43edd2ed222ae5f76e123eb1ff0a1b770757feeebd66cf - key: container.image.name value: - stringValue: registry.k8s.io/etcd + stringValue: registry.k8s.io/kube-apiserver-amd64 - key: container.image.tag value: - stringValue: 3.5.12-0 + stringValue: v1.29.2 - key: k8s.container.name value: - stringValue: etcd + stringValue: kube-apiserver - key: k8s.namespace.name value: stringValue: kube-system @@ -1428,29 +1384,21 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: etcd-kind-control-plane + stringValue: kube-apiserver-kind-control-plane - key: k8s.pod.uid value: - stringValue: 40e8f13b-bec6-4dae-98d9-fd86939dfc4c + stringValue: f66aabd7-0b50-4839-9a1f-fc35eb59d040 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asDouble: 0.1 + - asDouble: 0.25 startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.cpu_request unit: '{cpu}' - - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asInt: "104857600" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.memory_request - unit: By - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1468,60 +1416,36 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: 9c9e2d8cc660d21018432215b93bd4b9f26fbb0b0dfe71dca8c7089997cce23e + stringValue: d291e1a11a62f9340ff410465c38db9e57a3646c5b9b3b479e968d1dea5c38de - key: container.image.name value: - stringValue: registry.k8s.io/coredns/coredns + stringValue: docker.io/library/alpine - key: container.image.tag value: - stringValue: v1.11.1 + stringValue: latest - key: k8s.container.name value: - stringValue: coredns + stringValue: alpine - key: k8s.namespace.name value: - stringValue: kube-system + stringValue: default - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: coredns-7db6d8ff4d-p89tc + stringValue: test-k8scluster-receiver-job-4whkq - key: k8s.pod.uid value: - stringValue: f3494708-493a-4f0f-965c-dcedfdca253f + stringValue: b93fa4ec-ab09-4815-9c20-bc4860febfcc schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asDouble: 0.1 - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.cpu_request - unit: '{cpu}' - - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asInt: "178257920" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.memory_limit - unit: By - - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asInt: "73400320" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.memory_request - unit: By - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1539,36 +1463,68 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: acef2130e48fde6137e919c9eebc876435ff8a6a22031754fc1dde00cb6dae92 + stringValue: d54bdc2a7810420f7a2b46c187f5d44d3d4ff1f714f1aa47062d5bb6a46821f8 - key: container.image.name value: - stringValue: docker.io/kindest/local-path-provisioner + stringValue: docker.io/library/otelcontribcol - key: container.image.tag value: - stringValue: v20240202-8f1494ea + stringValue: latest - key: k8s.container.name value: - stringValue: local-path-provisioner + stringValue: opentelemetry-collector - key: k8s.namespace.name value: - stringValue: local-path-storage + stringValue: default - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: local-path-provisioner-988d74bc-c2wx7 + stringValue: otelcol-aa664a32-694bd5645b-9fmzd - key: k8s.pod.uid value: - stringValue: 1169e7ae-031e-4535-bb94-aee23b0b7df3 + stringValue: 6913e713-f407-4186-aa31-946410566b81 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: + - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asDouble: 0.128 + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.cpu_limit + unit: '{cpu}' + - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asDouble: 0.128 + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.cpu_request + unit: '{cpu}' + - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asInt: "268435456" + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.memory_limit + unit: By + - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details + gauge: + dataPoints: + - asInt: "268435456" + startTimeUnixNano: "1000000" + timeUnixNano: "2000000" + name: k8s.container.memory_request + unit: By - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1586,44 +1542,36 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: bd25536854ec1e582f0bb3ac0f79ce761ae97317d9ba1f7b256f3e833bcba862 + stringValue: deecc7697ef991519718ffbc8f59e496f8ffc1c4120455f115f9cadf149bad95 - key: container.image.name value: - stringValue: registry.k8s.io/kube-apiserver-arm64 + stringValue: docker.io/kindest/local-path-provisioner - key: container.image.tag value: - stringValue: v1.30.0 + stringValue: v20240202-8f1494ea - key: k8s.container.name value: - stringValue: kube-apiserver + stringValue: local-path-provisioner - key: k8s.namespace.name value: - stringValue: kube-system + stringValue: local-path-storage - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kube-apiserver-kind-control-plane + stringValue: local-path-provisioner-7577fdbbfb-q4vsw - key: k8s.pod.uid value: - stringValue: d2032a9e-8c7c-4d9c-bbcb-526bd1a7b4f7 + stringValue: ff867316-a95b-4024-9da6-ad397f94750a schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asDouble: 0.25 - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.cpu_request - unit: '{cpu}' - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1641,21 +1589,21 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: cc67e9bcb82cbeed83bc8dec9cf2b0c7915d921e793efb0d21da5225dfeb907d + stringValue: dfabe34b0764f7189eb24204d390caefc32f56d0e713048532e637db0ce0184e - key: container.image.name value: - stringValue: registry.k8s.io/kube-controller-manager-arm64 + stringValue: registry.k8s.io/kube-proxy-amd64 - key: container.image.tag value: - stringValue: v1.30.0 + stringValue: v1.29.2 - key: k8s.container.name value: - stringValue: kube-controller-manager + stringValue: kube-proxy - key: k8s.namespace.name value: stringValue: kube-system @@ -1664,21 +1612,13 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kube-controller-manager-kind-control-plane + stringValue: kube-proxy-vf6lk - key: k8s.pod.uid value: - stringValue: e3e6d44a-5bc6-4687-85f1-37eb42c42c05 + stringValue: 3ab3dafa-1d0a-450c-b04e-908f8c634a7a schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asDouble: 0.2 - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.cpu_request - unit: '{cpu}' - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) gauge: dataPoints: @@ -1696,48 +1636,40 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: e14e6f08e774618b74202d19334266e4c65c1feb0b26ef7e8b7807644754f730 + stringValue: ed83ae29a5becf08c8cca7e1bf12f11f89e7ee9ac4ac1e50a38f18d68791aff5 - key: container.image.name value: - stringValue: docker.io/library/otelcontribcol + stringValue: registry.k8s.io/coredns/coredns - key: container.image.tag value: - stringValue: latest + stringValue: v1.11.1 - key: k8s.container.name value: - stringValue: opentelemetry-collector + stringValue: coredns - key: k8s.namespace.name value: - stringValue: default + stringValue: kube-system - key: k8s.node.name value: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: otelcol-786b94f3-67cf69944f-6zv25 + stringValue: coredns-76f75df574-mmjtf - key: k8s.pod.uid value: - stringValue: 1fb8be2b-ae32-41c2-a172-e6cb9beb7c37 + stringValue: ed088c60-0fe4-4b70-9eba-55ea389dc573 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asDouble: 0.128 - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.cpu_limit - unit: '{cpu}' - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asDouble: 0.128 + - asDouble: 0.1 startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.cpu_request @@ -1745,7 +1677,7 @@ resourceMetrics: - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asInt: "268435456" + - asInt: "178257920" startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.memory_limit @@ -1753,7 +1685,7 @@ resourceMetrics: - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asInt: "268435456" + - asInt: "73400320" startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.memory_request @@ -1775,21 +1707,21 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev - resource: attributes: - key: container.id value: - stringValue: ed3ab86077c3de40d6d9125bf4f25dbf1734c58c9c3a864e5ccc1ce3bcfc1d30 + stringValue: f3f77fad1afc9498b4a341a1fb241821a91fc33f1401bd4e62920e929659be7e - key: container.image.name value: - stringValue: docker.io/kindest/kindnetd + stringValue: registry.k8s.io/etcd - key: container.image.tag value: - stringValue: v20240202-8f1494ea + stringValue: 3.5.10-0 - key: k8s.container.name value: - stringValue: kindnet-cni + stringValue: etcd - key: k8s.namespace.name value: stringValue: kube-system @@ -1798,21 +1730,13 @@ resourceMetrics: stringValue: kind-control-plane - key: k8s.pod.name value: - stringValue: kindnet-qwzhw + stringValue: etcd-kind-control-plane - key: k8s.pod.uid value: - stringValue: 955e1f8c-2fe3-4a1d-85e6-31ff7410dc00 + stringValue: 89fb113f-1bd3-4623-b46c-933da87e2719 schemaUrl: https://opentelemetry.io/schemas/1.18.0 scopeMetrics: - metrics: - - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asDouble: 0.1 - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.cpu_limit - unit: '{cpu}' - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: @@ -1821,18 +1745,10 @@ resourceMetrics: timeUnixNano: "2000000" name: k8s.container.cpu_request unit: '{cpu}' - - description: Maximum resource limit set for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details - gauge: - dataPoints: - - asInt: "52428800" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.memory_limit - unit: By - description: Resource requested for the container. See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#resourcerequirements-v1-core for details gauge: dataPoints: - - asInt: "52428800" + - asInt: "104857600" startTimeUnixNano: "1000000" timeUnixNano: "2000000" name: k8s.container.memory_request @@ -1854,51 +1770,4 @@ resourceMetrics: unit: '{restart}' scope: name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest - - resource: - attributes: - - key: container.id - value: - stringValue: f01b9f5343f9ba34db396889c75d6128dace385b8f0c7aed2d39866ddd0df826 - - key: container.image.name - value: - stringValue: docker.io/library/alpine - - key: container.image.tag - value: - stringValue: latest - - key: k8s.container.name - value: - stringValue: alpine - - key: k8s.namespace.name - value: - stringValue: default - - key: k8s.node.name - value: - stringValue: kind-control-plane - - key: k8s.pod.name - value: - stringValue: test-k8scluster-receiver-cronjob-28839770-9pp7g - - key: k8s.pod.uid - value: - stringValue: e388cfa8-06c3-47b6-a7a6-113d7cdda849 - schemaUrl: https://opentelemetry.io/schemas/1.18.0 - scopeMetrics: - - metrics: - - description: Whether a container has passed its readiness probe (0 for no, 1 for yes) - gauge: - dataPoints: - - asInt: "1" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.ready - - description: How many times the container has restarted in the recent past. This value is pulled directly from the K8s API and the value can go indefinitely high and be reset to 0 at any time depending on how your kubelet is configured to prune dead containers. It is best to not depend too much on the exact value but rather look at it as either == 0, in which case you can conclude there were no restarts in the recent past, or > 0, in which case you can conclude there were restarts in the recent past, and not try and analyze the value beyond that. - gauge: - dataPoints: - - asInt: "0" - startTimeUnixNano: "1000000" - timeUnixNano: "2000000" - name: k8s.container.restarts - unit: '{restart}' - scope: - name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver - version: latest + version: 0.112.0-dev diff --git a/receiver/k8sclusterreceiver/testdata/e2e/testobjects/cronjob.yaml b/receiver/k8sclusterreceiver/testdata/e2e/testobjects/cronjob.yaml index 706bc90f26df..b78f59a4fe07 100644 --- a/receiver/k8sclusterreceiver/testdata/e2e/testobjects/cronjob.yaml +++ b/receiver/k8sclusterreceiver/testdata/e2e/testobjects/cronjob.yaml @@ -5,6 +5,8 @@ metadata: namespace: default spec: schedule: "*/1 * * * *" + # ensure that only one job/pod is active for the lifetime of the test + concurrencyPolicy: Forbid jobTemplate: spec: template: @@ -15,5 +17,5 @@ spec: args: - /bin/sh - -c - - "echo Running; sleep 120" + - "echo Running; sleep 600" restartPolicy: OnFailure diff --git a/testbed/tests/log_test.go b/testbed/tests/log_test.go index 288b3c117783..8b44f83f670a 100644 --- a/testbed/tests/log_test.go +++ b/testbed/tests/log_test.go @@ -250,6 +250,7 @@ func TestLogLargeFiles(t *testing.T) { sender testbed.DataSender receiver testbed.DataReceiver loadOptions testbed.LoadOptions + resourceSpec testbed.ResourceSpec sleepSeconds int }{ { @@ -266,6 +267,10 @@ func TestLogLargeFiles(t *testing.T) { ItemsPerBatch: 1, Parallel: 100, }, + resourceSpec: testbed.ResourceSpec{ + ExpectedMaxCPU: 80, + ExpectedMaxRAM: 150, + }, sleepSeconds: 100, }, { @@ -282,6 +287,10 @@ func TestLogLargeFiles(t *testing.T) { ItemsPerBatch: 10, Parallel: 10, }, + resourceSpec: testbed.ResourceSpec{ + ExpectedMaxCPU: 100, + ExpectedMaxRAM: 150, + }, sleepSeconds: 200, }, }