Skip to content

Commit

Permalink
Merge branch 'main' into thampiotr/fix-promtailconvert
Browse files Browse the repository at this point in the history
  • Loading branch information
thampiotr authored Nov 29, 2023
2 parents 405d7af + df3afc6 commit fb43557
Show file tree
Hide file tree
Showing 72 changed files with 1,691 additions and 508 deletions.
21 changes: 19 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ internal API changes are not present.
Main (unreleased)
-----------------

### Security fixes

- Fix CVE-2023-47108 by updating `otelgrpc` from v0.45.0 to v0.46.0. (@hainenber)

### Features

- Agent Management: Introduce support for templated configuration. (@jcreixell)
Expand All @@ -31,16 +35,25 @@ Main (unreleased)
Previously, only `remote.*` and `local.*` components could be referenced
without a circular dependency. (@rfratto)

- Add a `resource_to_telemetry_conversion` argument to `otelcol.exporter.prometheus`
for converting resource attributes to Prometheus labels. (@hainenber)

- `pyroscope.ebpf` support python on arm64 platforms. (@korniltsev)

### Bugfixes

- Permit `X-Faro-Session-ID` header in CORS requests for the `faro.receiver`
component (flow mode) and the `app_agent_receiver` integration (static mode).
(@cedricziel)

- Fix issue with windows_exporter defaults not being set correctly. (@mattdurham)

- Fix agent crash when process null OTel's fan out consumers. (@hainenber)

- Fix issue in `prometheus.operator.*` where targets would be dropped if two crds share a common prefix in their names. (@Paul424, @captncraig)

- Fix issue where `convert` command would generate incorrect Flow Mode config
when provided `promtail` configuration that uses `docker_sd_configs` (@thampiotr)
when provided `promtail` configuration that uses `docker_sd_configs` (@thampiotr)

v0.38.0 (2023-11-21)
--------------------
Expand Down Expand Up @@ -123,7 +136,7 @@ v0.38.0 (2023-11-21)
- Make component list sortable in web UI. (@hainenber)

- Adds new metrics (`mssql_server_total_memory_bytes`, `mssql_server_target_memory_bytes`,
and `mssql_available_commit_memory_bytes`) for `mssql` integration.
and `mssql_available_commit_memory_bytes`) for `mssql` integration (@StefanKurek).

- Grafana Agent Operator: `config-reloader` container no longer runs as root.
(@rootmout)
Expand All @@ -140,6 +153,8 @@ v0.38.0 (2023-11-21)

- Allow agent to start with `module.git` config if cached before. (@hainenber)

- Adds new optional config parameter `query_config` to `mssql` integration to allow for custom metrics (@StefanKurek)

### Bugfixes

- Set exit code 1 on grafana-agentctl non-runnable command. (@fgouteroux)
Expand Down Expand Up @@ -197,6 +212,8 @@ v0.38.0 (2023-11-21)
- Fix converter output for prometheus.exporter.windows to not unnecessarily add
empty blocks. (@erikbaranowski)

- Fix converter issue with `loki.relabel` and `max_cache_size` being set to 0 instead of default (10_000). (@mattdurham)

### Other changes

- Bump `mysqld_exporter` version to v0.15.0. (@marctc)
Expand Down
50 changes: 38 additions & 12 deletions component/otelcol/exporter/prometheus/internal/convert/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ type Options struct {
IncludeScopeLabels bool
// AddMetricSuffixes controls whether suffixes are added to metric names. Defaults to true.
AddMetricSuffixes bool
// ResourceToTelemetryConversion controls whether to convert resource attributes to Prometheus-compatible datapoint attributes
ResourceToTelemetryConversion bool
}

var _ consumer.Metrics = (*Converter)(nil)
Expand Down Expand Up @@ -131,6 +133,7 @@ func (conv *Converter) consumeResourceMetrics(app storage.Appender, rm pmetric.R
Type: textparse.MetricTypeGauge,
Help: "Target metadata",
})
resAttrs := rm.Resource().Attributes()
memResource := conv.getOrCreateResource(rm.Resource())

if conv.getOpts().IncludeTargetInfo {
Expand All @@ -144,7 +147,7 @@ func (conv *Converter) consumeResourceMetrics(app storage.Appender, rm pmetric.R

for smcount := 0; smcount < rm.ScopeMetrics().Len(); smcount++ {
sm := rm.ScopeMetrics().At(smcount)
conv.consumeScopeMetrics(app, memResource, sm)
conv.consumeScopeMetrics(app, memResource, sm, resAttrs)
}
}

Expand Down Expand Up @@ -219,7 +222,7 @@ func (conv *Converter) getOrCreateResource(res pcommon.Resource) *memorySeries {
return entry
}

func (conv *Converter) consumeScopeMetrics(app storage.Appender, memResource *memorySeries, sm pmetric.ScopeMetrics) {
func (conv *Converter) consumeScopeMetrics(app storage.Appender, memResource *memorySeries, sm pmetric.ScopeMetrics, resAttrs pcommon.Map) {
scopeMD := conv.createOrUpdateMetadata("otel_scope_info", metadata.Metadata{
Type: textparse.MetricTypeGauge,
})
Expand All @@ -236,7 +239,7 @@ func (conv *Converter) consumeScopeMetrics(app storage.Appender, memResource *me

for mcount := 0; mcount < sm.Metrics().Len(); mcount++ {
m := sm.Metrics().At(mcount)
conv.consumeMetric(app, memResource, memScope, m)
conv.consumeMetric(app, memResource, memScope, m, resAttrs)
}
}

Expand Down Expand Up @@ -274,20 +277,27 @@ func (conv *Converter) getOrCreateScope(res *memorySeries, scope pcommon.Instrum
return entry
}

func (conv *Converter) consumeMetric(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric) {
func (conv *Converter) consumeMetric(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric, resAttrs pcommon.Map) {
switch m.Type() {
case pmetric.MetricTypeGauge:
conv.consumeGauge(app, memResource, memScope, m)
conv.consumeGauge(app, memResource, memScope, m, resAttrs)
case pmetric.MetricTypeSum:
conv.consumeSum(app, memResource, memScope, m)
conv.consumeSum(app, memResource, memScope, m, resAttrs)
case pmetric.MetricTypeHistogram:
conv.consumeHistogram(app, memResource, memScope, m)
conv.consumeHistogram(app, memResource, memScope, m, resAttrs)
case pmetric.MetricTypeSummary:
conv.consumeSummary(app, memResource, memScope, m)
conv.consumeSummary(app, memResource, memScope, m, resAttrs)
}
}

func (conv *Converter) consumeGauge(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric) {
func joinAttributeMaps(from, to pcommon.Map) {
from.Range(func(k string, v pcommon.Value) bool {
v.CopyTo(to.PutEmpty(k))
return true
})
}

func (conv *Converter) consumeGauge(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric, resAttrs pcommon.Map) {
metricName := prometheus.BuildCompliantName(m, "", conv.opts.AddMetricSuffixes)

metricMD := conv.createOrUpdateMetadata(metricName, metadata.Metadata{
Expand All @@ -302,6 +312,10 @@ func (conv *Converter) consumeGauge(app storage.Appender, memResource *memorySer
for dpcount := 0; dpcount < m.Gauge().DataPoints().Len(); dpcount++ {
dp := m.Gauge().DataPoints().At(dpcount)

if conv.getOpts().ResourceToTelemetryConversion {
joinAttributeMaps(resAttrs, dp.Attributes())
}

memSeries := conv.getOrCreateSeries(memResource, memScope, metricName, dp.Attributes())
if err := writeSeries(app, memSeries, dp, getNumberDataPointValue(dp)); err != nil {
level.Error(conv.log).Log("msg", "failed to write metric sample", metricName, "err", err)
Expand Down Expand Up @@ -389,7 +403,7 @@ func getNumberDataPointValue(dp pmetric.NumberDataPoint) float64 {
return 0
}

func (conv *Converter) consumeSum(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric) {
func (conv *Converter) consumeSum(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric, resAttrs pcommon.Map) {
metricName := prometheus.BuildCompliantName(m, "", conv.opts.AddMetricSuffixes)

// Excerpt from the spec:
Expand Down Expand Up @@ -430,6 +444,10 @@ func (conv *Converter) consumeSum(app storage.Appender, memResource *memorySerie
for dpcount := 0; dpcount < m.Sum().DataPoints().Len(); dpcount++ {
dp := m.Sum().DataPoints().At(dpcount)

if conv.getOpts().ResourceToTelemetryConversion {
joinAttributeMaps(resAttrs, dp.Attributes())
}

memSeries := conv.getOrCreateSeries(memResource, memScope, metricName, dp.Attributes())

val := getNumberDataPointValue(dp)
Expand All @@ -447,7 +465,7 @@ func (conv *Converter) consumeSum(app storage.Appender, memResource *memorySerie
}
}

func (conv *Converter) consumeHistogram(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric) {
func (conv *Converter) consumeHistogram(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric, resAttrs pcommon.Map) {
metricName := prometheus.BuildCompliantName(m, "", conv.opts.AddMetricSuffixes)

if m.Histogram().AggregationTemporality() != pmetric.AggregationTemporalityCumulative {
Expand All @@ -469,6 +487,10 @@ func (conv *Converter) consumeHistogram(app storage.Appender, memResource *memor
for dpcount := 0; dpcount < m.Histogram().DataPoints().Len(); dpcount++ {
dp := m.Histogram().DataPoints().At(dpcount)

if conv.getOpts().ResourceToTelemetryConversion {
joinAttributeMaps(resAttrs, dp.Attributes())
}

// Sum metric
if dp.HasSum() {
sumMetric := conv.getOrCreateSeries(memResource, memScope, metricName+"_sum", dp.Attributes())
Expand Down Expand Up @@ -606,7 +628,7 @@ func (conv *Converter) convertExemplar(otelExemplar pmetric.Exemplar, ts time.Ti
}
}

func (conv *Converter) consumeSummary(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric) {
func (conv *Converter) consumeSummary(app storage.Appender, memResource *memorySeries, memScope *memorySeries, m pmetric.Metric, resAttrs pcommon.Map) {
metricName := prometheus.BuildCompliantName(m, "", conv.opts.AddMetricSuffixes)

metricMD := conv.createOrUpdateMetadata(metricName, metadata.Metadata{
Expand All @@ -621,6 +643,10 @@ func (conv *Converter) consumeSummary(app storage.Appender, memResource *memoryS
for dpcount := 0; dpcount < m.Summary().DataPoints().Len(); dpcount++ {
dp := m.Summary().DataPoints().At(dpcount)

if conv.getOpts().ResourceToTelemetryConversion {
joinAttributeMaps(resAttrs, dp.Attributes())
}

// Sum metric
{
sumMetric := conv.getOrCreateSeries(memResource, memScope, metricName+"_sum", dp.Attributes())
Expand Down
Loading

0 comments on commit fb43557

Please sign in to comment.