Skip to content
Open
Show file tree
Hide file tree
Changes from 81 commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
14fef66
[receiver/oracledb] events for oracledbreceiver - Adding top_query an…
sv-splunk Jun 27, 2025
9dae10e
Adding limit for query samples collection
sv-splunk Jun 27, 2025
5c41bae
merging main
sv-splunk Jun 27, 2025
ae28536
Merge pull request #1 from sv-splunk/oracledbreceiver_events
sv-splunk Jun 27, 2025
5e18297
Merge branch 'open-telemetry:main' into main
sv-splunk Jun 27, 2025
7481e69
lint fixes and generated files.
sv-splunk Jun 27, 2025
1c300a9
Merge branch 'main' into main
sv-splunk Jun 27, 2025
5400baf
cleaning logs
sv-splunk Jun 30, 2025
7e5b5b4
Merge branch 'main' into main
sv-splunk Jun 30, 2025
d258f51
Adding additional attributes
sv-splunk Jun 30, 2025
5099908
Lint & tests
sv-splunk Jun 30, 2025
74e948b
merge main
sv-splunk Jul 1, 2025
4e2be2d
Merge pull request #2 from sv-splunk/oracle_draft_attrs
sv-splunk Jul 1, 2025
8668f73
merge from upstream
sv-splunk Jul 1, 2025
5c6a451
merge from upstream
sv-splunk Jul 1, 2025
b40e443
Merge branch 'main' into main
sv-splunk Jul 4, 2025
0f2f58a
merge from upstream
sv-splunk Jul 7, 2025
1f145fc
Merge from upstream
sv-splunk Jul 7, 2025
425797d
Removing 'Query sample' implementaion. Will be raising separate PR
sv-splunk Jul 7, 2025
dcf0ada
Updating chloggen
sv-splunk Jul 7, 2025
c3f9ff5
Update description
sv-splunk Jul 8, 2025
7e263c6
merge from upstream
sv-splunk Jul 9, 2025
5fd856a
Addressing review comments
sv-splunk Jul 9, 2025
59c8520
merge upstream
sv-splunk Jul 9, 2025
0b61051
Updating cacheSize to be alligned to MaxQuerySampleCount
sv-splunk Jul 10, 2025
a207210
fix lint
sv-splunk Jul 10, 2025
72ecc74
Merge branch 'main' into main
sv-splunk Jul 10, 2025
8bd1571
merge from upstream
sv-splunk Jul 11, 2025
eede7b6
crosslink fix
sv-splunk Jul 11, 2025
95da33b
Merge branch 'main' into main
sv-splunk Jul 11, 2025
65835db
Merge branch 'main' into main
sv-splunk Jul 14, 2025
b60a3e9
lint fixes
sv-splunk Jul 14, 2025
43645d5
Merge branch 'main' into main
sv-splunk Jul 14, 2025
05a9d00
merge from upstream main
sv-splunk Jul 14, 2025
52ef2c8
Merge branch 'main' into main
sv-splunk Jul 14, 2025
bed9ef0
merge from upstream
sv-splunk Jul 14, 2025
92e9736
Merge branch 'main' into main
sv-splunk Jul 14, 2025
d9a9d6d
Fixing obfuscator
sv-splunk Jul 14, 2025
f8d9ebe
Merge branch 'main' of https://github.com/sv-splunk/opentelemetry-col…
sv-splunk Jul 14, 2025
819a345
Merge branch 'main' into main
sv-splunk Jul 14, 2025
dded7b5
Merge branch 'main' into main
sv-splunk Jul 14, 2025
a466a0e
Merge branch 'open-telemetry:main' into main
sv-splunk Jul 15, 2025
b734b81
[receiver/oracledb] Support query-level log collection - Query sample…
sv-splunk Jul 15, 2025
eefae2e
Adding chloggen
sv-splunk Jul 15, 2025
2160cdc
Merge branch 'main' into main
sv-splunk Jul 15, 2025
fde3f2d
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
sv-splunk Jul 29, 2025
cde522f
Merge branch 'open-telemetry:main' into main
sv-splunk Jul 29, 2025
edb64c6
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
sv-splunk Jul 30, 2025
78e445a
Updates to include CHILD_ADDRESS and OPTIONS in the Oracle query plan
sv-splunk Jul 30, 2025
baa59cc
Fixing test data
sv-splunk Jul 30, 2025
ab6ad10
Merge branch 'main' into main
sv-splunk Jul 30, 2025
1bd1d49
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
sv-splunk Jul 31, 2025
c9a42d4
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
sv-splunk Jul 31, 2025
4f7d16c
[receiver/oracledb] moving child_address from plan details to attributes
sv-splunk Jul 31, 2025
f91ba9d
Merge branch 'main' of https://github.com/sv-splunk/opentelemetry-col…
sv-splunk Jul 31, 2025
cd5c712
revert builder-config
sv-splunk Jul 31, 2025
775fa1d
Merge branch 'main' into main
sv-splunk Jul 31, 2025
455b0d5
Merge branch 'main' into main
sv-splunk Aug 1, 2025
34f29e7
Merge branch 'open-telemetry:main' into main
sv-splunk Aug 6, 2025
0e32ad5
Merge branch 'open-telemetry:main' into main
sv-splunk Aug 6, 2025
fdb70cd
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
sv-splunk Aug 18, 2025
17afc8d
Merge branch 'main' of https://github.com/open-telemetry/opentelemetr…
sv-splunk Aug 18, 2025
6674daa
Adding child_address to samples payload
sv-splunk Aug 19, 2025
c0424c6
Fix test
sv-splunk Aug 19, 2025
a837002
Adding chlog
sv-splunk Aug 19, 2025
3a48ed4
Removing the toLowercase on sql_text in topN & adding child_address i…
sv-splunk Aug 19, 2025
a2f992b
Merge branch 'open-telemetry:main' into main
sv-splunk Aug 19, 2025
999e0de
removing toLowercase on sql_text
sv-splunk Aug 19, 2025
901bc83
merge from upstream
sv-splunk Aug 21, 2025
ef1b272
Merge branch 'open-telemetry:main' into main
sv-splunk Aug 21, 2025
8a51a74
cleanup
sv-splunk Aug 21, 2025
6b56b29
Merge branch 'main' of https://github.com/sv-splunk/opentelemetry-col…
sv-splunk Aug 21, 2025
041e4ee
Merge branch 'open-telemetry:main' into main
sv-splunk Sep 1, 2025
98bbc5c
[oracledbreceiver] Add service.instance.id in resource attributes
sv-splunk Sep 1, 2025
ef87cd2
lint fixes
sv-splunk Sep 1, 2025
aa0b9eb
chlog & other refactor
sv-splunk Sep 1, 2025
ea60e09
chlog & other refactor
sv-splunk Sep 1, 2025
3df3c2b
chlog
sv-splunk Sep 1, 2025
d7b3a9c
chlog
sv-splunk Sep 1, 2025
47b4443
Merge branch 'main' into main
sv-splunk Sep 2, 2025
5719fbd
fix chlog
sv-splunk Sep 2, 2025
349978b
changes to preserve original port if failed to resolve hostname
sv-splunk Sep 3, 2025
56108ea
Merge branch 'main' of https://github.com/sv-splunk/opentelemetry-col…
sv-splunk Sep 3, 2025
c3c9abd
fix
sv-splunk Sep 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .chloggen/service_instance_id_for_oracledbreceiver.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 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: oracledbreceiver

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: service.instance.id attribute is added in resourceAttributes of all metrics and logs in oracledbreceiver

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [42402]

# (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: |
The `service.instance.id` attribute is added in the format `<host>:<port>` to uniquely identify
Oracle db hosts.

# 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: [user]
1 change: 1 addition & 0 deletions receiver/oracledbreceiver/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -470,3 +470,4 @@ Collection of event metrics for top N queries, filtered based on the highest CPU
| ---- | ----------- | ------ | ------- |
| host.name | The host name of Oracle Server | Any Str | true |
| oracledb.instance.name | The name of the instance that data is coming from. | Any Str | true |
| service.instance.id | A unique identifier of the Oracle db instance in the format host:port | Any Str | true |

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

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

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

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

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

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

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

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

Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ all_set:
enabled: true
oracledb.instance.name:
enabled: true
service.instance.id:
enabled: true
none_set:
metrics:
oracledb.consistent_gets:
Expand Down Expand Up @@ -191,6 +193,8 @@ none_set:
enabled: false
oracledb.instance.name:
enabled: false
service.instance.id:
enabled: false
filter_set_include:
resource_attributes:
host.name:
Expand All @@ -205,6 +209,12 @@ filter_set_include:
- regexp: ".*"
events_include:
- regexp: ".*"
service.instance.id:
enabled: true
metrics_include:
- regexp: ".*"
events_include:
- regexp: ".*"
filter_set_exclude:
resource_attributes:
host.name:
Expand All @@ -219,3 +229,9 @@ filter_set_exclude:
- strict: "oracledb.instance.name-val"
events_exclude:
- strict: "oracledb.instance.name-val"
service.instance.id:
enabled: true
metrics_exclude:
- strict: "service.instance.id-val"
events_exclude:
- strict: "service.instance.id-val"
4 changes: 4 additions & 0 deletions receiver/oracledbreceiver/metadata.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ resource_attributes:
description: The host name of Oracle Server
enabled: true
type: string
service.instance.id:
description: A unique identifier of the Oracle db instance in the format host:port
enabled: true
type: string

attributes:
session_status:
Expand Down
38 changes: 29 additions & 9 deletions receiver/oracledbreceiver/scraper.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import (
"encoding/json"
"errors"
"fmt"
"net"
"os"
"sort"
"strconv"
"strings"
Expand Down Expand Up @@ -131,6 +133,7 @@ type oracleScraper struct {
topQueryCollectCfg TopQueryCollection
obfuscator *obfuscator
querySampleCfg QuerySample
serviceInstanceID string
}

func newScraper(metricsBuilder *metadata.MetricsBuilder, metricsBuilderConfig metadata.MetricsBuilderConfig, scrapeCfg scraperhelper.ControllerConfig, logger *zap.Logger, providerFunc dbProviderFunc, clientProviderFunc clientProviderFunc, instanceName, hostName string) (scraper.Metrics, error) {
Expand Down Expand Up @@ -164,6 +167,7 @@ func newLogsScraper(logsBuilder *metadata.LogsBuilder, logsBuilderConfig metadat
querySampleCfg: querySampleCfg,
hostName: hostName,
obfuscator: newObfuscator(),
serviceInstanceID: getInstanceID(hostName, logger),
}
return scraper.NewLogs(s.scrapeLogs, scraper.WithShutdown(s.shutdown), scraper.WithStart(s.start))
}
Expand Down Expand Up @@ -502,9 +506,8 @@ func (s *oracleScraper) scrape(ctx context.Context) (pmetric.Metrics, error) {
}
}

rb := s.mb.NewResourceBuilder()
rb.SetOracledbInstanceName(s.instanceName)
rb.SetHostName(s.hostName)
rb := s.setupResourceBuilder(s.mb.NewResourceBuilder())

out := s.mb.Emit(metadata.WithResource(rb.Emit()))
s.logger.Debug("Done scraping")
if len(scrapeErrors) > 0 {
Expand Down Expand Up @@ -634,9 +637,7 @@ func (s *oracleScraper) collectTopNMetricData(ctx context.Context, logs plog.Log
hits = s.obfuscateCacheHits(hits)
childAddressToPlanMap := s.getChildAddressToPlanMap(ctx, hits)

rb := s.lb.NewResourceBuilder()
rb.SetOracledbInstanceName(s.instanceName)
rb.SetHostName(s.hostName)
rb := s.setupResourceBuilder(s.lb.NewResourceBuilder())

for _, hit := range hits {
planBytes, err := json.Marshal(childAddressToPlanMap[hit.childAddress])
Expand Down Expand Up @@ -717,9 +718,7 @@ func (s *oracleScraper) collectQuerySamples(ctx context.Context, logs plog.Logs)
scrapeErrors = append(scrapeErrors, fmt.Errorf("error executing %s: %w", samplesQuery, err))
}

rb := s.lb.NewResourceBuilder()
rb.SetOracledbInstanceName(s.instanceName)
rb.SetHostName(s.hostName)
rb := s.setupResourceBuilder(s.lb.NewResourceBuilder())

for _, row := range rows {
if row[sqlText] == "" {
Expand Down Expand Up @@ -828,3 +827,24 @@ func (s *oracleScraper) shutdown(_ context.Context) error {
}
return s.db.Close()
}

func (s *oracleScraper) setupResourceBuilder(rb *metadata.ResourceBuilder) *metadata.ResourceBuilder {
rb.SetOracledbInstanceName(s.instanceName)
rb.SetHostName(s.hostName)
rb.SetServiceInstanceID(s.serviceInstanceID)
return rb
}

func getInstanceID(hostString string, logger *zap.Logger) string {
host, port, err := net.SplitHostPort(hostString)
if err == nil && (strings.EqualFold(host, "localhost") || net.ParseIP(host).IsLoopback()) {
host, err = os.Hostname()
}

if err != nil {
logger.Warn("Failed to compute service.instance.id", zap.Error(err))
return "unknown:1521"
}

return host + ":" + port
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this also have the DB name?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The host+port combination should supply enough context to identify the db instance.

}
23 changes: 23 additions & 0 deletions receiver/oracledbreceiver/scraper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,29 @@ func TestSamplesQuery(t *testing.T) {
}
}

func TestGetInstanceId(t *testing.T) {
localhostName, _ := os.Hostname()

hostString := "example.com:1521"
instanceID := getInstanceID(hostString, zap.NewNop())
assert.Equal(t, "example.com:1521", instanceID)

localHostStringUppercase := "Localhost:1521"
localInstanceID := getInstanceID(localHostStringUppercase, zap.NewNop())
assert.NotNil(t, localInstanceID)
assert.Equal(t, localhostName+":1521", localInstanceID)

localHostString := "127.0.0.1:1521"
localInstanceID = getInstanceID(localHostString, zap.NewNop())
assert.NotNil(t, localInstanceID)
assert.Equal(t, localhostName+":1521", localInstanceID)

localHostStringIPV6 := "[::1]:1521"
localInstanceID = getInstanceID(localHostStringIPV6, zap.NewNop())
assert.NotNil(t, localInstanceID)
assert.Equal(t, localhostName+":1521", localInstanceID)
}

func readFile(fname string) []byte {
file, err := os.ReadFile(filepath.Join("testdata", fname))
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ resourceLogs:
- key: host.name
value:
stringValue: oracle-host-sample-1
- key: service.instance.id
value:
stringValue: ""
scopeLogs:
- logRecords:
- attributes:
Expand Down Expand Up @@ -81,9 +84,7 @@ resourceLogs:
doubleValue: 2e-05
body: {}
eventName: db.server.top_query
spanId: ""
timeUnixNano: "1752581882636677000"
traceId: ""
timeUnixNano: "1756763669220332000"
scope:
name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver
version: latest
7 changes: 5 additions & 2 deletions receiver/oracledbreceiver/testdata/expectedSamplesFile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ resourceLogs:
- key: host.name
value:
stringValue: ""
- key: service.instance.id
value:
stringValue: ""
scopeLogs:
- logRecords:
- attributes:
Expand Down Expand Up @@ -45,7 +48,7 @@ resourceLogs:
stringValue: "0"
- key: oracledb.child_address
value:
stringValue: "SDF3SDF1234D"
stringValue: SDF3SDF1234D
- key: oracledb.sid
value:
stringValue: "675"
Expand Down Expand Up @@ -91,7 +94,7 @@ resourceLogs:
body: {}
eventName: db.server.query_sample
spanId: a7ad6b7169203331
timeUnixNano: "1754828794690056000"
timeUnixNano: "1756763648441865000"
traceId: 0af7651916cd43dd8448eb211c80319c
scope:
name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver
Expand Down
Loading