diff --git a/collector/collector.go b/collector/collector.go
index f237894..6155b3d 100644
--- a/collector/collector.go
+++ b/collector/collector.go
@@ -248,11 +248,15 @@ func (e *Exporter) scrapeDatabase(ch chan<- prometheus.Metric, errChan chan<- er
metricsToScrape := 0
for _, metric := range e.metricsToScrape.Metric {
metric := metric //https://golang.org/doc/faq#closures_and_goroutines
- if !e.isScrapeMetric(tick, metric, d) {
- continue
- }
+ isScrapeMetric := e.isScrapeMetric(tick, metric, d)
metricsToScrape++
go func() {
+ // If the metric doesn't need to be scraped, send the cached values
+ if !isScrapeMetric {
+ metric.sendAll(ch)
+ errChan <- nil
+ return
+ }
e.logger.Debug("About to scrape metric",
"Context", metric.Context,
"MetricsDesc", fmt.Sprint(metric.MetricsDesc),
@@ -389,7 +393,7 @@ func hashFile(h hash.Hash, fn string) error {
func (e *Exporter) reloadMetrics() {
// Truncate metricsToScrape
- e.metricsToScrape.Metric = []Metric{}
+ e.metricsToScrape.Metric = []*Metric{}
// Load default metrics
defaultMetrics := e.DefaultMetrics()
@@ -415,29 +419,24 @@ func (e *Exporter) reloadMetrics() {
}
// ScrapeMetric is an interface method to call scrapeGenericValues using Metric struct values
-func (e *Exporter) ScrapeMetric(d *Database, ch chan<- prometheus.Metric, m Metric) error {
+func (e *Exporter) ScrapeMetric(d *Database, ch chan<- prometheus.Metric, m *Metric) error {
e.logger.Debug("Calling function ScrapeGenericValues()")
- queryTimeout := e.getQueryTimeout(m, d)
- return e.scrapeGenericValues(d, ch, m.Context, m.Labels, m.MetricsDesc,
- m.MetricsType, m.MetricsBuckets, m.FieldToAppend, m.IgnoreZeroResult,
- m.Request, queryTimeout)
+ return e.scrapeGenericValues(d, ch, m)
}
// generic method for retrieving metrics.
-func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric, context string, labels []string,
- metricsDesc map[string]string, metricsType map[string]string, metricsBuckets map[string]map[string]string,
- fieldToAppend string, ignoreZeroResult bool, request string, queryTimeout time.Duration) error {
+func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric, m *Metric) error {
metricsCount := 0
constLabels := d.constLabels(e.constLabels())
e.logger.Debug("labels", constLabels)
genericParser := func(row map[string]string) error {
// Construct labels value
labelsValues := []string{}
- for _, label := range labels {
+ for _, label := range m.Labels {
labelsValues = append(labelsValues, row[label])
}
// Construct Prometheus values to sent back
- for metric, metricHelp := range metricsDesc {
+ for metric, metricHelp := range m.MetricsDesc {
value, ok := e.parseFloat(metric, metricHelp, row)
if !ok {
// Skip invalid metric values
@@ -446,14 +445,14 @@ func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric,
e.logger.Debug("Query result",
"value", value)
// If metric do not use a field content in metric's name
- if strings.Compare(fieldToAppend, "") == 0 {
+ if strings.Compare(m.FieldToAppend, "") == 0 {
desc := prometheus.NewDesc(
- prometheus.BuildFQName(namespace, context, metric),
+ prometheus.BuildFQName(namespace, m.Context, metric),
metricHelp,
- labels,
+ m.Labels,
constLabels,
)
- if metricsType[strings.ToLower(metric)] == "histogram" {
+ if m.MetricsType[strings.ToLower(metric)] == "histogram" {
count, err := strconv.ParseUint(strings.TrimSpace(row["count"]), 10, 64)
if err != nil {
e.logger.Error("Unable to convert count value to int (metric=" + metric +
@@ -461,7 +460,7 @@ func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric,
continue
}
buckets := make(map[float64]uint64)
- for field, le := range metricsBuckets[metric] {
+ for field, le := range m.MetricsBuckets[metric] {
lelimit, err := strconv.ParseFloat(strings.TrimSpace(le), 64)
if err != nil {
e.logger.Error("Unable to convert bucket limit value to float (metric=" + metric +
@@ -476,18 +475,18 @@ func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric,
}
buckets[lelimit] = counter
}
- ch <- prometheus.MustNewConstHistogram(desc, count, value, buckets, labelsValues...)
+ m.cacheAndSend(ch, prometheus.MustNewConstHistogram(desc, count, value, buckets, labelsValues...))
} else {
- ch <- prometheus.MustNewConstMetric(desc, getMetricType(metric, metricsType), value, labelsValues...)
+ m.cacheAndSend(ch, prometheus.MustNewConstMetric(desc, getMetricType(metric, m.MetricsType), value, labelsValues...))
}
// If no labels, use metric name
} else {
desc := prometheus.NewDesc(
- prometheus.BuildFQName(namespace, context, cleanName(row[fieldToAppend])),
+ prometheus.BuildFQName(namespace, m.Context, cleanName(row[m.FieldToAppend])),
metricHelp,
nil, constLabels,
)
- if metricsType[strings.ToLower(metric)] == "histogram" {
+ if m.MetricsType[strings.ToLower(metric)] == "histogram" {
count, err := strconv.ParseUint(strings.TrimSpace(row["count"]), 10, 64)
if err != nil {
e.logger.Error("Unable to convert count value to int (metric=" + metric +
@@ -495,7 +494,7 @@ func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric,
continue
}
buckets := make(map[float64]uint64)
- for field, le := range metricsBuckets[metric] {
+ for field, le := range m.MetricsBuckets[metric] {
lelimit, err := strconv.ParseFloat(strings.TrimSpace(le), 64)
if err != nil {
e.logger.Error("Unable to convert bucket limit value to float (metric=" + metric +
@@ -510,9 +509,9 @@ func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric,
}
buckets[lelimit] = counter
}
- ch <- prometheus.MustNewConstHistogram(desc, count, value, buckets)
+ m.cacheAndSend(ch, prometheus.MustNewConstHistogram(desc, count, value, buckets))
} else {
- ch <- prometheus.MustNewConstMetric(desc, getMetricType(metric, metricsType), value)
+ m.cacheAndSend(ch, prometheus.MustNewConstMetric(desc, getMetricType(metric, m.MetricsType), value))
}
}
metricsCount++
@@ -520,12 +519,12 @@ func (e *Exporter) scrapeGenericValues(d *Database, ch chan<- prometheus.Metric,
return nil
}
e.logger.Debug("Calling function GeneratePrometheusMetrics()")
- err := e.generatePrometheusMetrics(d, genericParser, request, queryTimeout)
+ err := e.generatePrometheusMetrics(d, genericParser, m.Request, e.getQueryTimeout(m, d))
e.logger.Debug("ScrapeGenericValues() - metricsCount: " + strconv.Itoa(metricsCount))
if err != nil {
return err
}
- if !ignoreZeroResult && metricsCount == 0 {
+ if !m.IgnoreZeroResult && metricsCount == 0 {
// a zero result error is returned for caller error identification.
// https://github.com/oracle/oracle-db-appdev-monitoring/issues/168
return newZeroResultError()
diff --git a/collector/metrics.go b/collector/metrics.go
index 1ef39b1..4a186f0 100644
--- a/collector/metrics.go
+++ b/collector/metrics.go
@@ -13,7 +13,7 @@ import (
// isScrapeMetric returns true if a metric should be scraped. Metrics may not be scraped if they have a custom scrape interval,
// and the time since the last scrape is less than the custom scrape interval.
// If there is no tick time or last known tick, the metric is always scraped.
-func (e *Exporter) isScrapeMetric(tick *time.Time, metric Metric, d *Database) bool {
+func (e *Exporter) isScrapeMetric(tick *time.Time, metric *Metric, d *Database) bool {
if len(metric.Databases) > 0 {
if !slices.Contains(metric.Databases, d.Name) {
return false
@@ -52,7 +52,7 @@ func (e *Exporter) getScrapeInterval(context, scrapeInterval string) (time.Durat
return 0, false
}
-func (e *Exporter) getQueryTimeout(metric Metric, d *Database) time.Duration {
+func (e *Exporter) getQueryTimeout(metric *Metric, d *Database) time.Duration {
if len(metric.QueryTimeout) > 0 {
qt, err := time.ParseDuration(metric.QueryTimeout)
if err != nil {
diff --git a/collector/types.go b/collector/types.go
index 700d246..a0ee0e0 100644
--- a/collector/types.go
+++ b/collector/types.go
@@ -28,11 +28,11 @@ type Exporter struct {
}
type Database struct {
- Name string
- Up float64
- Session *sql.DB
- Type float64
- Config DatabaseConfig
+ Name string
+ Up float64
+ Session *sql.DB
+ Type float64
+ Config DatabaseConfig
}
type Config struct {
@@ -57,28 +57,29 @@ type Config struct {
// Metric is an object description
type Metric struct {
- Context string
- Labels []string
- MetricsDesc map[string]string
- MetricsType map[string]string
- MetricsBuckets map[string]map[string]string
- FieldToAppend string
- Request string
- IgnoreZeroResult bool
- QueryTimeout string
- ScrapeInterval string
- Databases []string
+ Context string
+ Labels []string
+ MetricsDesc map[string]string
+ MetricsType map[string]string
+ MetricsBuckets map[string]map[string]string
+ FieldToAppend string
+ Request string
+ IgnoreZeroResult bool
+ QueryTimeout string
+ ScrapeInterval string
+ Databases []string
+ PrometheusMetrics map[string]prometheus.Metric
}
// Metrics is a container structure for prometheus metrics
type Metrics struct {
- Metric []Metric
+ Metric []*Metric
}
type ScrapeContext struct {
}
-func (m Metric) id(dbname string) string {
+func (m *Metric) id(dbname string) string {
builder := strings.Builder{}
builder.WriteString(dbname)
builder.WriteString(m.Context)
@@ -87,3 +88,19 @@ func (m Metric) id(dbname string) string {
}
return builder.String()
}
+
+// sendAll sends all cached metrics to the collector.
+func (m *Metric) sendAll(ch chan<- prometheus.Metric) {
+ for _, metric := range m.PrometheusMetrics {
+ ch <- metric
+ }
+}
+
+// cacheAndSend caches the metric and sends it to the collector.
+func (m *Metric) cacheAndSend(ch chan<- prometheus.Metric, metric prometheus.Metric) {
+ if len(m.PrometheusMetrics) == 0 {
+ m.PrometheusMetrics = map[string]prometheus.Metric{}
+ }
+ m.PrometheusMetrics[metric.Desc().String()] = metric
+ ch <- metric
+}
diff --git a/custom-metrics-example/custom-metrics.toml b/custom-metrics-example/custom-metrics.toml
index e60bafb..eb6bea1 100644
--- a/custom-metrics-example/custom-metrics.toml
+++ b/custom-metrics-example/custom-metrics.toml
@@ -16,38 +16,45 @@ from gv$sql
where last_active_time >= sysdate - 5/(24*60)
'''
+# User segment queries may return zero rows on certain database configurations
[[metric]]
context = "size_user_segments_top100"
metricsdesc = {table_bytes="Gauge metric with the size of the tables in user segments."}
labels = ["segment_name"]
request = "select * from (select segment_name,sum(bytes) as table_bytes from user_segments where segment_type='TABLE' group by segment_name) order by table_bytes DESC FETCH NEXT 100 ROWS ONLY"
+ignorezeroresult = true
[[metric]]
context = "size_user_segments_top100"
metricsdesc = {table_partition_bytes="Gauge metric with the size of the table partition in user segments."}
labels = ["segment_name"]
request = "select * from (select segment_name,sum(bytes) as table_partition_bytes from user_segments where segment_type='TABLE PARTITION' group by segment_name) order by table_partition_bytes DESC FETCH NEXT 100 ROWS ONLY"
+ignorezeroresult = true
[[metric]]
context = "size_user_segments_top100"
metricsdesc = {cluster_bytes="Gauge metric with the size of the cluster in user segments."}
labels = ["segment_name"]
request = "select * from (select segment_name,sum(bytes) as cluster_bytes from user_segments where segment_type='CLUSTER' group by segment_name) order by cluster_bytes DESC FETCH NEXT 100 ROWS ONLY"
+ignorezeroresult = true
[[metric]]
context = "size_dba_segments_top100"
metricsdesc = {table_bytes="Gauge metric with the size of the tables in user segments."}
labels = ["segment_name"]
request = "select * from (select segment_name,sum(bytes) as table_bytes from dba_segments where segment_type='TABLE' group by segment_name) order by table_bytes DESC FETCH NEXT 100 ROWS ONLY"
+ignorezeroresult = true
[[metric]]
context = "size_dba_segments_top100"
metricsdesc = {table_partition_bytes="Gauge metric with the size of the table partition in user segments."}
labels = ["segment_name"]
request = "select * from (select segment_name,sum(bytes) as table_partition_bytes from dba_segments where segment_type='TABLE PARTITION' group by segment_name) order by table_partition_bytes DESC FETCH NEXT 100 ROWS ONLY"
+ignorezeroresult = true
[[metric]]
context = "size_dba_segments_top100"
metricsdesc = {cluster_bytes="Gauge metric with the size of the cluster in user segments."}
labels = ["segment_name"]
-request = "select * from (select segment_name,sum(bytes) as cluster_bytes from dba_segments where segment_type='CLUSTER' group by segment_name) order by cluster_bytes DESC FETCH NEXT 100 ROWS ONLY"
\ No newline at end of file
+request = "select * from (select segment_name,sum(bytes) as cluster_bytes from dba_segments where segment_type='CLUSTER' group by segment_name) order by cluster_bytes DESC FETCH NEXT 100 ROWS ONLY"
+ignorezeroresult = true
\ No newline at end of file
diff --git a/docs/404.html b/docs/404.html
index 6a7d1af..4bf7aa3 100644
--- a/docs/404.html
+++ b/docs/404.html
@@ -4,7 +4,7 @@
Page Not Found | Oracle Database Metrics Exporter
-
+
diff --git a/docs/assets/js/c539bf3f.35853f87.js b/docs/assets/js/c539bf3f.35853f87.js
new file mode 100644
index 0000000..7f837ac
--- /dev/null
+++ b/docs/assets/js/c539bf3f.35853f87.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[100],{1432:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"releases/changelog","title":"Changelog","description":"List of upcoming and historic changes to the exporter.","source":"@site/docs/releases/changelog.md","sourceDirName":"releases","slug":"/releases/changelog","permalink":"/oracle-db-appdev-monitoring/docs/releases/changelog","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/releases/changelog.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Changelog","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap"}}');var r=i(4848),t=i(8453);const l={title:"Changelog",sidebar_position:2},o="Release Notes",a={},d=[{value:"Next, in-development",id:"next-in-development",level:3},{value:"Version 2.0.2, June 24, 2025",id:"version-202-june-24-2025",level:3},{value:"Version 2.0.1, June 12, 2025",id:"version-201-june-12-2025",level:3},{value:"Version 2.0.0, May 27, 2025",id:"version-200-may-27-2025",level:3},{value:"Version 1.6.1, May 2, 2025",id:"version-161-may-2-2025",level:3},{value:"Version 1.6.0, April 18, 2025",id:"version-160-april-18-2025",level:3},{value:"Version 1.5.5, March 13, 2025",id:"version-155-march-13-2025",level:3},{value:"Version 1.5.4, March 3, 2025",id:"version-154-march-3-2025",level:3},{value:"Version 1.5.3, January 28, 2025",id:"version-153-january-28-2025",level:3},{value:"Version 1.5.2, December 2, 2024",id:"version-152-december-2-2024",level:3},{value:"Version 1.5.1, October 28, 2024",id:"version-151-october-28-2024",level:3},{value:"Version 1.5.0, September 26, 2024",id:"version-150-september-26-2024",level:3},{value:"Version 1.4.0, September 4, 2024",id:"version-140-september-4-2024",level:3},{value:"Version 1.3.1, July 22, 2024",id:"version-131-july-22-2024",level:3},{value:"Version 1.3.0, June 7, 2024",id:"version-130-june-7-2024",level:3},{value:"Version 1.2.1, April 16, 2024",id:"version-121-april-16-2024",level:3},{value:"Version 1.2.0, January 17, 2024",id:"version-120-january-17-2024",level:3},{value:"Version 1.1.1, November 28, 2023",id:"version-111-november-28-2023",level:3},{value:"Version 1.1, October 27, 2023",id:"version-11-october-27-2023",level:3},{value:"Version 1.0, September 13, 2023",id:"version-10-september-13-2023",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"release-notes",children:"Release Notes"})}),"\n",(0,r.jsx)(n.p,{children:"List of upcoming and historic changes to the exporter."}),"\n",(0,r.jsx)(n.h3,{id:"next-in-development",children:"Next, in-development"}),"\n",(0,r.jsx)(n.p,{children:"Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release."}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Enable configuration of the prometheus webserver from the config file using the ",(0,r.jsx)(n.code,{children:"web"})," prefix."]}),"\n",(0,r.jsx)(n.li,{children:"Allow loading of database password(s) from a file."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': ",(0,r.jsx)(n.code,{children:"$test$pwd"})," becomes ",(0,r.jsx)(n.code,{children:"$$test$$pwd"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug when using ",(0,r.jsx)(n.code,{children:"metrics.scrapeInterval"})," combined with per-metric scrape intervals that made the available metrics data set inconsistent."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Supporterino",children:"@Supporterino"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aberinnj",children:"@aberinnj"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/qrkop",children:"@qrkop"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/KevDi",children:"@KevDi"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/bomuva",children:"@bomuva"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/anilmoris",children:"@anilmoris"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/kizuna-lek",children:"@kizuna-lek"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-202-june-24-2025",children:"Version 2.0.2, June 24, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed a case-sensitive issue with resource name in the default metrics file."}),"\n",(0,r.jsx)(n.li,{children:"Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations"}),"\n",(0,r.jsx)(n.li,{children:"Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rafal-szypulka",children:"@rafal-szypulka"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/darkelfit",children:"@darkelfit"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-201-june-12-2025",children:"Version 2.0.1, June 12, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support)."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-200-may-27-2025",children:"Version 2.0.0, May 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," that could cause metrics not to be scraped (#172, #176)."]}),"\n",(0,r.jsxs)(n.li,{children:["Added configuration through a YAML file, passed using the ",(0,r.jsx)(n.code,{children:"--config.file"})," command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file."]}),"\n",(0,r.jsx)(n.li,{children:"Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89)."}),"\n",(0,r.jsx)(n.li,{children:"Updated provided dashboards."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-161-may-2-2025",children:"Version 1.6.1, May 2, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Deepak A."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-160-april-18-2025",children:"Version 1.6.0, April 18, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added support for Azure Key Vault (#200)."}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})," added missing grants for alert log to the demo environment (#207)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Brian, Damian et al."}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-155-march-13-2025",children:"Version 1.5.5, March 13, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})," updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191)."]}),"\n",(0,r.jsx)(n.li,{children:"Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-154-march-3-2025",children:"Version 1.5.4, March 3, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Based of this recommendation from ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror?tab=readme-ov-file#pooling",children:"godror"}),", which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur."]}),"\n",(0,r.jsx)(n.li,{children:"Fix malloc error (#177, #181)."}),"\n",(0,r.jsx)(n.li,{children:"Fix intermittent connection issues with ADB-S when exporter is run in a container (#169)."}),"\n",(0,r.jsx)(n.li,{children:"Fix Multiple custom metrics files overwrite one another (#179)."}),"\n",(0,r.jsx)(n.li,{children:"Replace go-kit/log with log/slog, due to upstream changes in prometheus/common."}),"\n",(0,r.jsxs)(n.li,{children:["Add support for additional admin roles, expanding list of options for ",(0,r.jsx)(n.code,{children:"DB_ROLE"})," to ",(0,r.jsx)(n.code,{children:"SYSDBA"}),", ",(0,r.jsx)(n.code,{children:"SYSOPER"}),", ",(0,r.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,r.jsx)(n.code,{children:"SYSDG"}),", ",(0,r.jsx)(n.code,{children:"SYSKM"}),", ",(0,r.jsx)(n.code,{children:"SYSRAC"})," and ",(0,r.jsx)(n.code,{children:"SYSASM"})," (#180)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/oey",children:"@oey"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jlembeck06",children:"@jlembeck06"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/PeterP55P",children:"@PeterP55P"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rlagyu0",children:"@rlagyu0"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Thank you to ",(0,r.jsx)(n.a,{href:"https://github.com/tgulacsi",children:"@tgulacsi"})," for changes in godror (",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/361",children:"https://github.com/godror/godror/issues/361"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/360",children:"https://github.com/godror/godror/issues/360"}),"), and to ",(0,r.jsx)(n.a,{href:"https://github.com/cjbj",children:"@cjbj"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/sudarshan12s",children:"@sudarshan12s"})," for support and guidance from ODPI-C (",(0,r.jsx)(n.a,{href:"https://github.com/oracle/odpi",children:"https://github.com/oracle/odpi"}),")."]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also continued some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-153-january-28-2025",children:"Version 1.5.3, January 28, 2025"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Known issue"}),": This release has a known issue that results in the error message ",(0,r.jsx)(n.code,{children:"malloc(): unsorted double linked list corrupted"}),".\nWe recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March."]}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fix over-zealous supression of errors when ",(0,r.jsx)(n.code,{children:"ignorezeroresult = true"})," (#168)."]}),"\n",(0,r.jsxs)(n.li,{children:["When ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," is set, do first scrape immediately, not after the interval (#166)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also started some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-152-december-2-2024",children:"Version 1.5.2, December 2, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Update the metric defintion for tablespace usage to report more accurate temp space usage."}),"\n",(0,r.jsx)(n.li,{children:"Revert InstantClient to 21c version due to ADB connectivity issue."}),"\n",(0,r.jsx)(n.li,{children:"Update documentation to explain how to obtain credentials from a wallet."}),"\n",(0,r.jsx)(n.li,{children:"Fix race condition on err variable in scrape() func (by @valrusu)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aureliocirella",children:"@aureliocirella"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/mitoeth",children:"@mitoeth"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/valrusu",children:"@valrusu"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-151-october-28-2024",children:"Version 1.5.1, October 28, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Added support for using the ",(0,r.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name."]}),"\n",(0,r.jsx)(n.li,{children:"Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with wrong ",(0,r.jsx)(n.code,{children:"LD_LIBRARY_PATH"})," on some platforms. (#136)"]}),"\n",(0,r.jsxs)(n.li,{children:["Added documentation and an example of using the ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," setting to change the interval at which a certain metric is colected."]}),"\n",(0,r.jsx)(n.li,{children:"Added notes to documentation for extra security parameters needed when using a wallet with Podman."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-150-september-26-2024",children:"Version 1.5.0, September 26, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Support for running the exporter on ARM processors (darwin and linux)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n",(0,r.jsx)(n.li,{children:'Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup.'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-140-september-4-2024",children:"Version 1.4.0, September 4, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Allow multiple custom metrics definition files."}),"\n",(0,r.jsx)(n.li,{children:"Allow query timeout per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Allow scrape interval per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-131-july-22-2024",children:"Version 1.3.1, July 22, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be disabled by setting parameter ",(0,r.jsx)(n.code,{children:"log.disable"})," to ",(0,r.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Alert log exporter will stop if it gets three consecutive failures."}),"\n",(0,r.jsx)(n.li,{children:"Updated the list of required permissions."}),"\n",(0,r.jsx)(n.li,{children:"Updated the TxEventQ sample dashboard."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/tux-jochen",children:"@tux-jochen"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-130-june-7-2024",children:"Version 1.3.0, June 7, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default\noutput to ",(0,r.jsx)(n.code,{children:"/log/alert.log"})," in JSON format."]}),"\n",(0,r.jsx)(n.li,{children:"Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE."}),"\n",(0,r.jsx)(n.li,{children:"New default metric is added to report the type of database connected to (CDB or PDB)."}),"\n",(0,r.jsx)(n.li,{children:"New default metrics are added for cache hit ratios."}),"\n",(0,r.jsx)(n.li,{children:"Default metrics updated to suppress spurious warnings in log."}),"\n",(0,r.jsx)(n.li,{children:"Wait class metric updated to use a better query."}),"\n",(0,r.jsx)(n.li,{children:"The sample dashboard is updated to include new metrics."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug which prevented periodic freeing of memory."}),"\n",(0,r.jsx)(n.li,{children:"Set CLIENT_INFO to a meaningful value."}),"\n",(0,r.jsx)(n.li,{children:"Update Go toolchain to 1.22.4."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/pioro",children:"@pioro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/savoir81",children:"@savoir81"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-121-april-16-2024",children:"Version 1.2.1, April 16, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Accept max idle and open connections settings as parameters."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-120-january-17-2024",children:"Version 1.2.0, January 17, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically restart the process if requested."}),"\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically attempt to free OS memory if requested."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-111-november-28-2023",children:"Version 1.1.1, November 28, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release just updates some third-party dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"version-11-october-27-2023",children:"Version 1.1, October 27, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The query for the standard metric ",(0,r.jsx)(n.code,{children:"wait_class"})," has been updated so that it will work in both container databases\nand pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return\nany data unless the database instance is under load."]}),"\n",(0,r.jsxs)(n.li,{children:["Support for reading the database password from OCI Vault has been added (see ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/oci-vault",children:"details"}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Log messages have been improved"}),"\n",(0,r.jsx)(n.li,{children:"Some dependencies have been updated"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-10-september-13-2023",children:"Version 1.0, September 13, 2023"}),"\n",(0,r.jsx)(n.p,{children:"The first production release, v1.0, includes the following features:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A number of ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics",children:"standard metrics"})," are exposed,"]}),"\n",(0,r.jsxs)(n.li,{children:["Users can define ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",children:"custom metrics"}),","]}),"\n",(0,r.jsx)(n.li,{children:"Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues,"}),"\n",(0,r.jsx)(n.li,{children:"Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported,"}),"\n",(0,r.jsx)(n.li,{children:"Metrics for Oracle Transactional Event Queues are also supported,"}),"\n",(0,r.jsx)(n.li,{children:"A Grafana dashboard is provided for Transactional Event Queues, and"}),"\n",(0,r.jsx)(n.li,{children:"A pre-built container image is provided, based on Oracle Linux, and optimized for size and security."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size."}),"\n",(0,r.jsx)(n.p,{children:"The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/docs/assets/js/c539bf3f.7f73b018.js b/docs/assets/js/c539bf3f.7f73b018.js
deleted file mode 100644
index 99801c3..0000000
--- a/docs/assets/js/c539bf3f.7f73b018.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksite=self.webpackChunksite||[]).push([[100],{1432:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>l,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"releases/changelog","title":"Changelog","description":"List of upcoming and historic changes to the exporter.","source":"@site/docs/releases/changelog.md","sourceDirName":"releases","slug":"/releases/changelog","permalink":"/oracle-db-appdev-monitoring/docs/releases/changelog","draft":false,"unlisted":false,"editUrl":"https://github.com/oracle/oracle-db-appdev-monitoring/tree/main/site/docs/releases/changelog.md","tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Changelog","sidebar_position":2},"sidebar":"tutorialSidebar","previous":{"title":"Roadmap","permalink":"/oracle-db-appdev-monitoring/docs/releases/roadmap"}}');var r=i(4848),t=i(8453);const l={title:"Changelog",sidebar_position:2},o="Release Notes",a={},d=[{value:"Next, in-development",id:"next-in-development",level:3},{value:"Version 2.0.2, June 24, 2025",id:"version-202-june-24-2025",level:3},{value:"Version 2.0.1, June 12, 2025",id:"version-201-june-12-2025",level:3},{value:"Version 2.0.0, May 27, 2025",id:"version-200-may-27-2025",level:3},{value:"Version 1.6.1, May 2, 2025",id:"version-161-may-2-2025",level:3},{value:"Version 1.6.0, April 18, 2025",id:"version-160-april-18-2025",level:3},{value:"Version 1.5.5, March 13, 2025",id:"version-155-march-13-2025",level:3},{value:"Version 1.5.4, March 3, 2025",id:"version-154-march-3-2025",level:3},{value:"Version 1.5.3, January 28, 2025",id:"version-153-january-28-2025",level:3},{value:"Version 1.5.2, December 2, 2024",id:"version-152-december-2-2024",level:3},{value:"Version 1.5.1, October 28, 2024",id:"version-151-october-28-2024",level:3},{value:"Version 1.5.0, September 26, 2024",id:"version-150-september-26-2024",level:3},{value:"Version 1.4.0, September 4, 2024",id:"version-140-september-4-2024",level:3},{value:"Version 1.3.1, July 22, 2024",id:"version-131-july-22-2024",level:3},{value:"Version 1.3.0, June 7, 2024",id:"version-130-june-7-2024",level:3},{value:"Version 1.2.1, April 16, 2024",id:"version-121-april-16-2024",level:3},{value:"Version 1.2.0, January 17, 2024",id:"version-120-january-17-2024",level:3},{value:"Version 1.1.1, November 28, 2023",id:"version-111-november-28-2023",level:3},{value:"Version 1.1, October 27, 2023",id:"version-11-october-27-2023",level:3},{value:"Version 1.0, September 13, 2023",id:"version-10-september-13-2023",level:3}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"release-notes",children:"Release Notes"})}),"\n",(0,r.jsx)(n.p,{children:"List of upcoming and historic changes to the exporter."}),"\n",(0,r.jsx)(n.h3,{id:"next-in-development",children:"Next, in-development"}),"\n",(0,r.jsx)(n.p,{children:"Our current priorities are support for Exadata metrics. We expect to address these in an upcoming release."}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Enable configuration of the prometheus webserver from the config file using the ",(0,r.jsx)(n.code,{children:"web"})," prefix."]}),"\n",(0,r.jsx)(n.li,{children:"Allow loading of database password(s) from a file."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': ",(0,r.jsx)(n.code,{children:"$test$pwd"})," becomes ",(0,r.jsx)(n.code,{children:"$$test$$pwd"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-202-june-24-2025",children:"Version 2.0.2, June 24, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed a case-sensitive issue with resource name in the default metrics file."}),"\n",(0,r.jsx)(n.li,{children:"Add query timeouts to initial database connections, which could cause the exporter to hang in multi-database configurations"}),"\n",(0,r.jsx)(n.li,{children:"Fix an issue where rapidly acquiring connections could cause the exporter to crash. This was more common in multi-database configurations, due to the increased number of connection pools."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rfrozza",children:"@rfrozza"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/neilschelly",children:"@neilschelly"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rafal-szypulka",children:"@rafal-szypulka"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/darkelfit",children:"@darkelfit"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-201-june-12-2025",children:"Version 2.0.1, June 12, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Use gv$ views instead of v$ views to allow collection of metrics from all instances in a cluster. (In preparation for RAC support)."}),"\n",(0,r.jsx)(n.li,{children:"Update some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-200-may-27-2025",children:"Version 2.0.0, May 27, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," that could cause metrics not to be scraped (#172, #176)."]}),"\n",(0,r.jsxs)(n.li,{children:["Added configuration through a YAML file, passed using the ",(0,r.jsx)(n.code,{children:"--config.file"})," command-line argument. Backwards compatibility is maintained for the command-line arguments, through it is recommended to use the configuration file from the 2.0.0 release onward. It is not recommended to use a combination of command-line arguments and the configuration file."]}),"\n",(0,r.jsx)(n.li,{children:"Added support for multiple databases through the configuration file. As many database instances may be specified as needed, which will be scraped concurrently (#89)."}),"\n",(0,r.jsx)(n.li,{children:"Updated provided dashboards."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-161-may-2-2025",children:"Version 1.6.1, May 2, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Deepak A."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-160-april-18-2025",children:"Version 1.6.0, April 18, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added support for Azure Key Vault (#200)."}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})," added missing grants for alert log to the demo environment (#207)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Brian, Damian et al."}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/4Aiur",children:"4Aiur"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-155-march-13-2025",children:"Version 1.5.5, March 13, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})," updated the docker-compose sample with connection pool parameters to avoid fast connect cycling (#191)."]}),"\n",(0,r.jsx)(n.li,{children:"Update default values for connection pool parameters to use go-sql pooling by default to avoid fast connet cycling."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/VictorErmakov",children:"@VictorErmakov"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-154-march-3-2025",children:"Version 1.5.4, March 3, 2025"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Based of this recommendation from ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror?tab=readme-ov-file#pooling",children:"godror"}),", which relates to the two following items, and in discussion with the ODPI-C team, we have introduced additional parameters to allow you to set connection pool parameters, and have set defaults which will avoid fast connect cycling. It is our expectation that a fix may be produced in the underlying ODPI-C library for the underlying issue. In the mean time, these changes will avoid the conditions under which the error can occur."]}),"\n",(0,r.jsx)(n.li,{children:"Fix malloc error (#177, #181)."}),"\n",(0,r.jsx)(n.li,{children:"Fix intermittent connection issues with ADB-S when exporter is run in a container (#169)."}),"\n",(0,r.jsx)(n.li,{children:"Fix Multiple custom metrics files overwrite one another (#179)."}),"\n",(0,r.jsx)(n.li,{children:"Replace go-kit/log with log/slog, due to upstream changes in prometheus/common."}),"\n",(0,r.jsxs)(n.li,{children:["Add support for additional admin roles, expanding list of options for ",(0,r.jsx)(n.code,{children:"DB_ROLE"})," to ",(0,r.jsx)(n.code,{children:"SYSDBA"}),", ",(0,r.jsx)(n.code,{children:"SYSOPER"}),", ",(0,r.jsx)(n.code,{children:"SYSBACKUP"}),", ",(0,r.jsx)(n.code,{children:"SYSDG"}),", ",(0,r.jsx)(n.code,{children:"SYSKM"}),", ",(0,r.jsx)(n.code,{children:"SYSRAC"})," and ",(0,r.jsx)(n.code,{children:"SYSASM"})," (#180)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/oey",children:"@oey"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/jlembeck06",children:"@jlembeck06"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Jman1993",children:"@Jman1993"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/PeterP55P",children:"@PeterP55P"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/rlagyu0",children:"@rlagyu0"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/Sycri",children:"@Sycri"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Thank you to ",(0,r.jsx)(n.a,{href:"https://github.com/tgulacsi",children:"@tgulacsi"})," for changes in godror (",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/361",children:"https://github.com/godror/godror/issues/361"}),", ",(0,r.jsx)(n.a,{href:"https://github.com/godror/godror/issues/360",children:"https://github.com/godror/godror/issues/360"}),"), and to ",(0,r.jsx)(n.a,{href:"https://github.com/cjbj",children:"@cjbj"})," and ",(0,r.jsx)(n.a,{href:"https://github.com/sudarshan12s",children:"@sudarshan12s"})," for support and guidance from ODPI-C (",(0,r.jsx)(n.a,{href:"https://github.com/oracle/odpi",children:"https://github.com/oracle/odpi"}),")."]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also continued some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-153-january-28-2025",children:"Version 1.5.3, January 28, 2025"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.em,{children:"Known issue"}),": This release has a known issue that results in the error message ",(0,r.jsx)(n.code,{children:"malloc(): unsorted double linked list corrupted"}),".\nWe recommend staying on 1.5.2 until a new release with a fix is available. We hope to have a fix by early March."]}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Fix over-zealous supression of errors when ",(0,r.jsx)(n.code,{children:"ignorezeroresult = true"})," (#168)."]}),"\n",(0,r.jsxs)(n.li,{children:["When ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," is set, do first scrape immediately, not after the interval (#166)."]}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/redelang",children:"@redelang"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"In this release, we also started some minor code refactoring."}),"\n",(0,r.jsx)(n.h3,{id:"version-152-december-2-2024",children:"Version 1.5.2, December 2, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Update the metric defintion for tablespace usage to report more accurate temp space usage."}),"\n",(0,r.jsx)(n.li,{children:"Revert InstantClient to 21c version due to ADB connectivity issue."}),"\n",(0,r.jsx)(n.li,{children:"Update documentation to explain how to obtain credentials from a wallet."}),"\n",(0,r.jsx)(n.li,{children:"Fix race condition on err variable in scrape() func (by @valrusu)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/aureliocirella",children:"@aureliocirella"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/mitoeth",children:"@mitoeth"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/valrusu",children:"@valrusu"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-151-october-28-2024",children:"Version 1.5.1, October 28, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Added support for using the ",(0,r.jsx)(n.code,{children:"TNS_ADMIN"})," environment variable, which fixes an issue when connecting to Autonomous Database instances using TNS name."]}),"\n",(0,r.jsx)(n.li,{children:"Updated InstantClient to 23ai version for amd64 and latest available 19.24 version for arm64."}),"\n",(0,r.jsxs)(n.li,{children:["Fixed an issue with wrong ",(0,r.jsx)(n.code,{children:"LD_LIBRARY_PATH"})," on some platforms. (#136)"]}),"\n",(0,r.jsxs)(n.li,{children:["Added documentation and an example of using the ",(0,r.jsx)(n.code,{children:"scrapeinterval"})," setting to change the interval at which a certain metric is colected."]}),"\n",(0,r.jsx)(n.li,{children:"Added notes to documentation for extra security parameters needed when using a wallet with Podman."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-150-september-26-2024",children:"Version 1.5.0, September 26, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Support for running the exporter on ARM processors (darwin and linux)."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n",(0,r.jsx)(n.li,{children:'Updated the "test/demo environment" to use newer version of Oracle Database (23.5.0.24.07) and faster startup.'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-140-september-4-2024",children:"Version 1.4.0, September 4, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Allow multiple custom metrics definition files."}),"\n",(0,r.jsx)(n.li,{children:"Allow query timeout per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Allow scrape interval per-metric."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-131-july-22-2024",children:"Version 1.3.1, July 22, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be disabled by setting parameter ",(0,r.jsx)(n.code,{children:"log.disable"})," to ",(0,r.jsx)(n.code,{children:"1"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Alert log exporter will stop if it gets three consecutive failures."}),"\n",(0,r.jsx)(n.li,{children:"Updated the list of required permissions."}),"\n",(0,r.jsx)(n.li,{children:"Updated the TxEventQ sample dashboard."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/tux-jochen",children:"@tux-jochen"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-130-june-7-2024",children:"Version 1.3.0, June 7, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Alert logs can be exported for collection by a log reader like Promtail or FluentBit. Default\noutput to ",(0,r.jsx)(n.code,{children:"/log/alert.log"})," in JSON format."]}),"\n",(0,r.jsx)(n.li,{children:"Provide ability to connect as SYSDBA or SYSOPER by setting DB_ROLE."}),"\n",(0,r.jsx)(n.li,{children:"New default metric is added to report the type of database connected to (CDB or PDB)."}),"\n",(0,r.jsx)(n.li,{children:"New default metrics are added for cache hit ratios."}),"\n",(0,r.jsx)(n.li,{children:"Default metrics updated to suppress spurious warnings in log."}),"\n",(0,r.jsx)(n.li,{children:"Wait class metric updated to use a better query."}),"\n",(0,r.jsx)(n.li,{children:"The sample dashboard is updated to include new metrics."}),"\n",(0,r.jsx)(n.li,{children:"Fixed a bug which prevented periodic freeing of memory."}),"\n",(0,r.jsx)(n.li,{children:"Set CLIENT_INFO to a meaningful value."}),"\n",(0,r.jsx)(n.li,{children:"Update Go toolchain to 1.22.4."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Thank you to the following people for their suggestions and contributions:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/pioro",children:"@pioro"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/savoir81",children:"@savoir81"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-121-april-16-2024",children:"Version 1.2.1, April 16, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Accept max idle and open connections settings as parameters."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-120-january-17-2024",children:"Version 1.2.0, January 17, 2024"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically restart the process if requested."}),"\n",(0,r.jsx)(n.li,{children:"Introduced a new feature to periodically attempt to free OS memory if requested."}),"\n",(0,r.jsx)(n.li,{children:"Updated some third-party dependencies."}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-111-november-28-2023",children:"Version 1.1.1, November 28, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release just updates some third-party dependencies."}),"\n",(0,r.jsx)(n.h3,{id:"version-11-october-27-2023",children:"Version 1.1, October 27, 2023"}),"\n",(0,r.jsx)(n.p,{children:"This release includes the following changes:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["The query for the standard metric ",(0,r.jsx)(n.code,{children:"wait_class"})," has been updated so that it will work in both container databases\nand pluggable databases, including in Oracle Autonomous Database instances. Note that this query will not return\nany data unless the database instance is under load."]}),"\n",(0,r.jsxs)(n.li,{children:["Support for reading the database password from OCI Vault has been added (see ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/oci-vault",children:"details"}),")"]}),"\n",(0,r.jsx)(n.li,{children:"Log messages have been improved"}),"\n",(0,r.jsx)(n.li,{children:"Some dependencies have been updated"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"version-10-september-13-2023",children:"Version 1.0, September 13, 2023"}),"\n",(0,r.jsx)(n.p,{children:"The first production release, v1.0, includes the following features:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["A number of ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/getting-started/default-metrics",children:"standard metrics"})," are exposed,"]}),"\n",(0,r.jsxs)(n.li,{children:["Users can define ",(0,r.jsx)(n.a,{href:"/oracle-db-appdev-monitoring/docs/configuration/custom-metrics",children:"custom metrics"}),","]}),"\n",(0,r.jsx)(n.li,{children:"Oracle regularly reviews third-party licenses and scans the code and images, including transitive/recursive dependencies for issues,"}),"\n",(0,r.jsx)(n.li,{children:"Connection to Oracle can be a basic connection or use an Oracle Wallet and TLS - connection to Oracle Autonomous Database is supported,"}),"\n",(0,r.jsx)(n.li,{children:"Metrics for Oracle Transactional Event Queues are also supported,"}),"\n",(0,r.jsx)(n.li,{children:"A Grafana dashboard is provided for Transactional Event Queues, and"}),"\n",(0,r.jsx)(n.li,{children:"A pre-built container image is provided, based on Oracle Linux, and optimized for size and security."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Note that this exporter uses a different Oracle Database driver which in turn uses code directly written by Oracle to access the database. This driver does require an Oracle client. In this initial release, the client is bundled into the container image, however we intend to make that optional in order to minimize the image size."}),"\n",(0,r.jsx)(n.p,{children:"The interfaces for this version have been kept as close as possible to those of earlier alpha releases in this repository to assist with migration. However, it should be expected that there may be breaking changes in future releases."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>o});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/docs/assets/js/runtime~main.17989aec.js b/docs/assets/js/runtime~main.17989aec.js
new file mode 100644
index 0000000..31ec9da
--- /dev/null
+++ b/docs/assets/js/runtime~main.17989aec.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,t,r,o,c={},f={};function d(e){var a=f[e];if(void 0!==a)return a.exports;var t=f[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,d),t.loaded=!0,t.exports}d.m=c,d.c=f,e=[],d.O=(a,t,r,o)=>{if(!t){var c=1/0;for(i=0;i=o)&&Object.keys(d.O).every(e=>d.O[e](t[n]))?t.splice(n--,1):(f=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,r,o]},d.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return d.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var c={};a=a||[null,t({}),t([]),t(t)];for(var f=2&r&&e;("object"==typeof f||"function"==typeof f)&&!~a.indexOf(f);f=t(f))Object.getOwnPropertyNames(f).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,d.d(o,c),o},d.d=(e,a)=>{for(var t in a)d.o(a,t)&&!d.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((a,t)=>(d.f[t](e,a),a),[])),d.u=e=>"assets/js/"+({48:"a94703ab",61:"1f391b9e",71:"1e10f605",82:"5240f2c1",98:"a7bd4aaa",100:"c539bf3f",134:"393be207",173:"af966633",199:"dac61621",233:"6f6f2b68",235:"a7456010",359:"a7f4dc0a",401:"17896441",405:"384c9e20",434:"b8d4edc5",504:"2a1428c8",539:"49d0ab44",580:"d94a41cc",583:"1df93b7f",596:"2d404bd3",647:"5e95c892",666:"61f1b472",705:"867ce809",742:"aba21aa0",747:"2c91c66b",798:"21b27731",898:"a989571e",918:"85a0f18d",919:"d72bb23b",926:"6e6103cc",969:"14eb3368",976:"0e384e19"}[e]||e)+"."+{48:"643e6934",61:"d091afa4",71:"ef94c6bf",82:"1c8abb1b",98:"2ca06876",100:"35853f87",134:"fc1e167d",173:"0bc25fd8",199:"2f9dd97b",233:"116500b3",235:"25370a92",237:"d496122d",359:"b6021f3c",401:"951229dd",405:"1ed457f7",434:"c60980e4",504:"81093459",539:"3162fd79",580:"bc85db5c",583:"ff24e8ed",596:"778d36b4",647:"0955054f",666:"6d4df439",668:"a919aaa7",705:"fdf6483f",742:"ef5bd9e3",747:"4209897b",798:"093b684e",898:"01007baf",918:"23b1b3b5",919:"1e9dae26",926:"231b1b1b",969:"d64fc15c",976:"11007e6c"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="site:",d.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var f,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{f.onerror=f.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),n&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/oracle-db-appdev-monitoring/",d.gca=function(e){return e={17896441:"401",a94703ab:"48","1f391b9e":"61","1e10f605":"71","5240f2c1":"82",a7bd4aaa:"98",c539bf3f:"100","393be207":"134",af966633:"173",dac61621:"199","6f6f2b68":"233",a7456010:"235",a7f4dc0a:"359","384c9e20":"405",b8d4edc5:"434","2a1428c8":"504","49d0ab44":"539",d94a41cc:"580","1df93b7f":"583","2d404bd3":"596","5e95c892":"647","61f1b472":"666","867ce809":"705",aba21aa0:"742","2c91c66b":"747","21b27731":"798",a989571e:"898","85a0f18d":"918",d72bb23b:"919","6e6103cc":"926","14eb3368":"969","0e384e19":"976"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(a,t)=>{var r=d.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var c=d.p+d.u(a),f=new Error;d.l(c,t=>{if(d.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;f.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",f.name="ChunkLoadError",f.type=o,f.request=c,r[1](f)}},"chunk-"+a,a)}},d.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,c=t[0],f=t[1],n=t[2],b=0;if(c.some(a=>0!==e[a])){for(r in f)d.o(f,r)&&(d.m[r]=f[r]);if(n)var i=n(d)}for(a&&a(t);b{"use strict";var e,a,t,r,o,c={},d={};function f(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,f),t.loaded=!0,t.exports}f.m=c,f.c=d,e=[],f.O=(a,t,r,o)=>{if(!t){var c=1/0;for(i=0;i=o)&&Object.keys(f.O).every(e=>f.O[e](t[n]))?t.splice(n--,1):(d=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,r,o]},f.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return f.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var c={};a=a||[null,t({}),t([]),t(t)];for(var d=2&r&&e;("object"==typeof d||"function"==typeof d)&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach(a=>c[a]=()=>e[a]);return c.default=()=>e,f.d(o,c),o},f.d=(e,a)=>{for(var t in a)f.o(a,t)&&!f.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce((a,t)=>(f.f[t](e,a),a),[])),f.u=e=>"assets/js/"+({48:"a94703ab",61:"1f391b9e",71:"1e10f605",82:"5240f2c1",98:"a7bd4aaa",100:"c539bf3f",134:"393be207",173:"af966633",199:"dac61621",233:"6f6f2b68",235:"a7456010",359:"a7f4dc0a",401:"17896441",405:"384c9e20",434:"b8d4edc5",504:"2a1428c8",539:"49d0ab44",580:"d94a41cc",583:"1df93b7f",596:"2d404bd3",647:"5e95c892",666:"61f1b472",705:"867ce809",742:"aba21aa0",747:"2c91c66b",798:"21b27731",898:"a989571e",918:"85a0f18d",919:"d72bb23b",926:"6e6103cc",969:"14eb3368",976:"0e384e19"}[e]||e)+"."+{48:"643e6934",61:"d091afa4",71:"ef94c6bf",82:"1c8abb1b",98:"2ca06876",100:"7f73b018",134:"fc1e167d",173:"0bc25fd8",199:"2f9dd97b",233:"116500b3",235:"25370a92",237:"d496122d",359:"b6021f3c",401:"951229dd",405:"1ed457f7",434:"c60980e4",504:"81093459",539:"3162fd79",580:"bc85db5c",583:"ff24e8ed",596:"778d36b4",647:"0955054f",666:"6d4df439",668:"a919aaa7",705:"fdf6483f",742:"ef5bd9e3",747:"4209897b",798:"093b684e",898:"01007baf",918:"23b1b3b5",919:"1e9dae26",926:"231b1b1b",969:"d64fc15c",976:"11007e6c"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},o="site:",f.l=(e,a,t,c)=>{if(r[e])r[e].push(a);else{var d,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i{d.onerror=d.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach(e=>e(t)),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),n&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/oracle-db-appdev-monitoring/",f.gca=function(e){return e={17896441:"401",a94703ab:"48","1f391b9e":"61","1e10f605":"71","5240f2c1":"82",a7bd4aaa:"98",c539bf3f:"100","393be207":"134",af966633:"173",dac61621:"199","6f6f2b68":"233",a7456010:"235",a7f4dc0a:"359","384c9e20":"405",b8d4edc5:"434","2a1428c8":"504","49d0ab44":"539",d94a41cc:"580","1df93b7f":"583","2d404bd3":"596","5e95c892":"647","61f1b472":"666","867ce809":"705",aba21aa0:"742","2c91c66b":"747","21b27731":"798",a989571e:"898","85a0f18d":"918",d72bb23b:"919","6e6103cc":"926","14eb3368":"969","0e384e19":"976"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(a,t)=>{var r=f.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(354|869)$/.test(a))e[a]=0;else{var o=new Promise((t,o)=>r=e[a]=[t,o]);t.push(r[2]=o);var c=f.p+f.u(a),d=new Error;f.l(c,t=>{if(f.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+o+": "+c+")",d.name="ChunkLoadError",d.type=o,d.request=c,r[1](d)}},"chunk-"+a,a)}},f.O.j=a=>0===e[a];var a=(a,t)=>{var r,o,c=t[0],d=t[1],n=t[2],b=0;if(c.some(a=>0!==e[a])){for(r in d)f.o(d,r)&&(f.m[r]=d[r]);if(n)var i=n(f)}for(a&&a(t);bDevelopment | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/advanced/go-runtime/index.html b/docs/docs/advanced/go-runtime/index.html
index 9373d42..ffe2518 100644
--- a/docs/docs/advanced/go-runtime/index.html
+++ b/docs/docs/advanced/go-runtime/index.html
@@ -4,7 +4,7 @@
Configuring the Go Runtime | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/advanced/txeventq/index.html b/docs/docs/advanced/txeventq/index.html
index 09ac834..2983e64 100644
--- a/docs/docs/advanced/txeventq/index.html
+++ b/docs/docs/advanced/txeventq/index.html
@@ -4,7 +4,7 @@
Monitoring TxEventQ | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/category/advanced/index.html b/docs/docs/category/advanced/index.html
index 80b27c6..207d34b 100644
--- a/docs/docs/category/advanced/index.html
+++ b/docs/docs/category/advanced/index.html
@@ -4,7 +4,7 @@
Advanced | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/category/configuration/index.html b/docs/docs/category/configuration/index.html
index a25bee6..b75019b 100644
--- a/docs/docs/category/configuration/index.html
+++ b/docs/docs/category/configuration/index.html
@@ -4,7 +4,7 @@
Configuration | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/category/getting-started/index.html b/docs/docs/category/getting-started/index.html
index 6cceafd..84b093a 100644
--- a/docs/docs/category/getting-started/index.html
+++ b/docs/docs/category/getting-started/index.html
@@ -4,7 +4,7 @@
Getting Started | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/category/releases/index.html b/docs/docs/category/releases/index.html
index a9c9938..ab66b22 100644
--- a/docs/docs/category/releases/index.html
+++ b/docs/docs/category/releases/index.html
@@ -4,7 +4,7 @@
Releases | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/alert-logs/index.html b/docs/docs/configuration/alert-logs/index.html
index 0fd6c5e..728b738 100644
--- a/docs/docs/configuration/alert-logs/index.html
+++ b/docs/docs/configuration/alert-logs/index.html
@@ -4,7 +4,7 @@
Alert Logs | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/azure-vault/index.html b/docs/docs/configuration/azure-vault/index.html
index 658f53f..37449fa 100644
--- a/docs/docs/configuration/azure-vault/index.html
+++ b/docs/docs/configuration/azure-vault/index.html
@@ -4,7 +4,7 @@
Azure Vault | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/config-file/index.html b/docs/docs/configuration/config-file/index.html
index d304062..fd82273 100644
--- a/docs/docs/configuration/config-file/index.html
+++ b/docs/docs/configuration/config-file/index.html
@@ -4,7 +4,7 @@
Exporter Config File | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/custom-metrics/index.html b/docs/docs/configuration/custom-metrics/index.html
index 6879eff..330aa16 100644
--- a/docs/docs/configuration/custom-metrics/index.html
+++ b/docs/docs/configuration/custom-metrics/index.html
@@ -4,7 +4,7 @@
Custom Metrics | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/multiple-databases/index.html b/docs/docs/configuration/multiple-databases/index.html
index 3261257..fd7da2e 100644
--- a/docs/docs/configuration/multiple-databases/index.html
+++ b/docs/docs/configuration/multiple-databases/index.html
@@ -4,7 +4,7 @@
Multiple Databases | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/oci-vault/index.html b/docs/docs/configuration/oci-vault/index.html
index d72cb22..d2de408 100644
--- a/docs/docs/configuration/oci-vault/index.html
+++ b/docs/docs/configuration/oci-vault/index.html
@@ -4,7 +4,7 @@
OCI Vault | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/configuration/oracle-wallet/index.html b/docs/docs/configuration/oracle-wallet/index.html
index 2252344..e89f435 100644
--- a/docs/docs/configuration/oracle-wallet/index.html
+++ b/docs/docs/configuration/oracle-wallet/index.html
@@ -4,7 +4,7 @@
Oracle Wallet (mTLS) | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/getting-started/basics/index.html b/docs/docs/getting-started/basics/index.html
index 393509d..1c6d3f5 100644
--- a/docs/docs/getting-started/basics/index.html
+++ b/docs/docs/getting-started/basics/index.html
@@ -4,7 +4,7 @@
Installation | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/getting-started/default-metrics/index.html b/docs/docs/getting-started/default-metrics/index.html
index cfcd298..8d05d69 100644
--- a/docs/docs/getting-started/default-metrics/index.html
+++ b/docs/docs/getting-started/default-metrics/index.html
@@ -4,7 +4,7 @@
Default Metrics | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/getting-started/grafana-dashboards/index.html b/docs/docs/getting-started/grafana-dashboards/index.html
index 8a19efd..932037a 100644
--- a/docs/docs/getting-started/grafana-dashboards/index.html
+++ b/docs/docs/getting-started/grafana-dashboards/index.html
@@ -4,7 +4,7 @@
Grafana Dashboards | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/getting-started/kubernetes/index.html b/docs/docs/getting-started/kubernetes/index.html
index d851277..91116f1 100644
--- a/docs/docs/getting-started/kubernetes/index.html
+++ b/docs/docs/getting-started/kubernetes/index.html
@@ -4,7 +4,7 @@
Kubernetes | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/intro/index.html b/docs/docs/intro/index.html
index 8a2ef74..ed53787 100644
--- a/docs/docs/intro/index.html
+++ b/docs/docs/intro/index.html
@@ -4,7 +4,7 @@
OpenTelemetry Metrics for Oracle Database | Oracle Database Metrics Exporter
-
+
diff --git a/docs/docs/releases/changelog/index.html b/docs/docs/releases/changelog/index.html
index 583d963..4ad012d 100644
--- a/docs/docs/releases/changelog/index.html
+++ b/docs/docs/releases/changelog/index.html
@@ -4,7 +4,7 @@
Changelog | Oracle Database Metrics Exporter
-
+
@@ -21,6 +21,22 @@
Next, in
Allow loading of database password(s) from a file.
Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations.
Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': $test$pwd becomes $$test$$pwd.
+
Fixed a bug when using metrics.scrapeInterval combined with per-metric scrape intervals that made the available metrics data set inconsistent.
+
+
Thank you to the following people for their suggestions and contributions:
diff --git a/docs/docs/releases/roadmap/index.html b/docs/docs/releases/roadmap/index.html
index 2a9aa1c..127e99c 100644
--- a/docs/docs/releases/roadmap/index.html
+++ b/docs/docs/releases/roadmap/index.html
@@ -4,7 +4,7 @@
Roadmap | Oracle Database Metrics Exporter
-
+
diff --git a/docs/index.html b/docs/index.html
index 8c534be..366d746 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -4,7 +4,7 @@
Oracle Database Metrics Exporter
-
+
diff --git a/docs/markdown-page/index.html b/docs/markdown-page/index.html
index ab090cc..dd86d6e 100644
--- a/docs/markdown-page/index.html
+++ b/docs/markdown-page/index.html
@@ -4,7 +4,7 @@
Markdown page example | Oracle Database Metrics Exporter
-
+
diff --git a/main.go b/main.go
index 3c0e9b7..570bc1b 100644
--- a/main.go
+++ b/main.go
@@ -107,7 +107,7 @@ func main() {
}
m, err := collector.LoadMetricsConfiguration(logger, config, *metricPath, toolkitFlags)
if err != nil {
- logger.Error("unable to load metrics configuration", "error", err)
+ logger.Error("unable to load metrics configuration file", "error", err)
return
}
diff --git a/site/docs/releases/changelog.md b/site/docs/releases/changelog.md
index c54e366..96d8cd1 100644
--- a/site/docs/releases/changelog.md
+++ b/site/docs/releases/changelog.md
@@ -16,6 +16,22 @@ This release includes the following changes:
- Allow loading of database password(s) from a file.
- Fixed a bug where database type (CDB, PDB, etc.) was not reported in certain situations.
- Fixed a bug where literal passwords containing the '$' character (in the config file) would be evaluated as environment variables. To use literal passwords with the '$' character, escape the '$' character with a second '$': `$test$pwd` becomes `$$test$$pwd`.
+- Fixed a bug when using `metrics.scrapeInterval` combined with per-metric scrape intervals that made the available metrics data set inconsistent.
+
+Thank you to the following people for their suggestions and contributions:
+
+- [@Supporterino](https://github.com/Supporterino)
+- [@neilschelly](https://github.com/neilschelly)
+- [@aberinnj](https://github.com/aberinnj)
+- [@redelang](https://github.com/redelang)
+- [@qrkop](https://github.com/qrkop)
+- [@KevDi](https://github.com/KevDi)
+- [@bomuva](https://github.com/bomuva)
+- [@anilmoris](https://github.com/anilmoris)
+- [@Sycri](https://github.com/Sycri)
+- [@kizuna-lek](https://github.com/kizuna-lek)
+- [@rfrozza](https://github.com/rfrozza)
+- [@neilschelly](https://github.com/neilschelly)
### Version 2.0.2, June 24, 2025