Skip to content

Commit

Permalink
chore: fix prometheus remote write exporter not setting timestamp on …
Browse files Browse the repository at this point in the history
…created metric (#29503)

As disucssed on cncf
[slack](https://cloud-native.slack.com/archives/C01LSCJBXDZ/p1700938910822949)
fixing the issue with _created metrics where prometheus backend refuses
it due to "too old" due to not setting a timestamp for the sample
created. The timestamp used is the timestamp for the original sample the
correspondent _created metrics is generated for.

**Link to tracking Issue:** #24915

Tested locally with prometheus compatible backend.

---------

Co-authored-by: Anthony Mirabella <[email protected]>
Co-authored-by: David Ashpole <[email protected]>
  • Loading branch information
3 people authored Dec 6, 2023
1 parent d7b1e26 commit 7b1ff5b
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: bug_fix

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: exporter/prometheusremotewrite

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: prometheusremotewrite exporter fix created metrics missing timestamp

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

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: []
8 changes: 5 additions & 3 deletions pkg/translator/prometheusremotewrite/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ func addSingleHistogramDataPoint(pt pmetric.HistogramDataPoint, resource pcommon
startTimestamp := pt.StartTimestamp()
if settings.ExportCreatedMetric && startTimestamp != 0 {
labels := createLabels(createdSuffix)
addCreatedTimeSeriesIfNeeded(tsMap, labels, startTimestamp, metric.Type().String())
addCreatedTimeSeriesIfNeeded(tsMap, labels, startTimestamp, pt.Timestamp(), metric.Type().String())
}
}

Expand Down Expand Up @@ -516,7 +516,7 @@ func addSingleSummaryDataPoint(pt pmetric.SummaryDataPoint, resource pcommon.Res
startTimestamp := pt.StartTimestamp()
if settings.ExportCreatedMetric && startTimestamp != 0 {
createdLabels := createLabels(baseName + createdSuffix)
addCreatedTimeSeriesIfNeeded(tsMap, createdLabels, startTimestamp, metric.Type().String())
addCreatedTimeSeriesIfNeeded(tsMap, createdLabels, startTimestamp, pt.Timestamp(), metric.Type().String())
}
}

Expand All @@ -526,6 +526,7 @@ func addCreatedTimeSeriesIfNeeded(
series map[string]*prompb.TimeSeries,
labels []prompb.Label,
startTimestamp pcommon.Timestamp,
timestamp pcommon.Timestamp,
metricType string,
) {
sig := timeSeriesSignature(metricType, &labels)
Expand All @@ -534,7 +535,8 @@ func addCreatedTimeSeriesIfNeeded(
Labels: labels,
Samples: []prompb.Sample{
{ // convert ns to ms
Value: float64(convertTimeStamp(startTimestamp)),
Value: float64(convertTimeStamp(startTimestamp)),
Timestamp: convertTimeStamp(timestamp),
},
},
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/translator/prometheusremotewrite/helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,7 @@ func TestAddSingleSummaryDataPoint(t *testing.T) {
timeSeriesSignature(pmetric.MetricTypeSummary.String(), &createdLabels): {
Labels: createdLabels,
Samples: []prompb.Sample{
{Value: float64(convertTimeStamp(ts))},
{Value: float64(convertTimeStamp(ts)), Timestamp: convertTimeStamp(ts)},
},
},
}
Expand Down Expand Up @@ -816,7 +816,7 @@ func TestAddSingleHistogramDataPoint(t *testing.T) {
timeSeriesSignature(pmetric.MetricTypeHistogram.String(), &createdLabels): {
Labels: createdLabels,
Samples: []prompb.Sample{
{Value: float64(convertTimeStamp(ts))},
{Value: float64(convertTimeStamp(ts)), Timestamp: convertTimeStamp(ts)},
},
},
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/translator/prometheusremotewrite/number_data_points.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func addSingleSumNumberDataPoint(
nameStr,
name+createdSuffix,
)
addCreatedTimeSeriesIfNeeded(series, createdLabels, startTimestamp, metric.Type().String())
addCreatedTimeSeriesIfNeeded(series, createdLabels, startTimestamp, pt.Timestamp(), metric.Type().String())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ func TestAddSingleSumNumberDataPoint(t *testing.T) {
timeSeriesSignature(pmetric.MetricTypeSum.String(), &createdLabels): {
Labels: createdLabels,
Samples: []prompb.Sample{
{Value: float64(convertTimeStamp(ts))},
{Value: float64(convertTimeStamp(ts)), Timestamp: convertTimeStamp(ts)},
},
},
}
Expand Down

0 comments on commit 7b1ff5b

Please sign in to comment.