Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9945b83
feat(deps): Update OTel Contrib to v0.143.0
sky333999 Feb 6, 2026
7dc89cc
fix(prometheus): Adapt target allocator to upstream API changes
sky333999 Feb 6, 2026
35d6a2f
fix: Adapt agent code to OTel v0.143.0 and Prometheus v0.308.1 API ch…
sky333999 Feb 7, 2026
14417d5
fix(otel): migrate telemetry types to otelconftelemetry subpackage
sky333999 Feb 9, 2026
17ab20d
fix(confmap): change KeyDelimiter from const to var to match upstream
sky333999 Feb 9, 2026
7788d90
fix(pipeline): replace removed MustNewIDWithName with NewIDWithName
sky333999 Feb 9, 2026
7da6f8f
Fix metric_type_handler_test for Prometheus v0.308.1 API changes
sky333999 Feb 9, 2026
4760599
Fix TA config: call Validate() for POD_NAME fallback, remove Collecto…
sky333999 Feb 9, 2026
edff77e
fix: add Telemetry factory to otelcol.Factories and remove obsolete s…
sky333999 Feb 9, 2026
a58224f
fix(otlp): use GetOrInsertDefault for configoptional Default flavor
sky333999 Feb 10, 2026
875983a
fix(prometheus): add Reload() after manual config copy for loaded flag
sky333999 Feb 10, 2026
5a82d21
fix(debug): build expected config from factory defaults in test
sky333999 Feb 10, 2026
6a52ab0
fix(prw): update golden YAML with new upstream defaults
sky333999 Feb 10, 2026
9261618
fix(filter): compare exported fields only due to ottl.Factory pointers
sky333999 Feb 10, 2026
cd604a8
fix(prometheus): build expected config via promconfig.Load in test
sky333999 Feb 10, 2026
f038625
fix(golden): regenerate 60 golden YAML files for v0.143.0 defaults
sky333999 Feb 11, 2026
44c557b
fix(fmt): realign struct literals in metric_type_handler_test.go
sky333999 Feb 12, 2026
cec8045
fix(lint): replace deprecated golang.org/x/exp/rand with math/rand/v2
sky333999 Feb 12, 2026
ab862d7
fix(golden): regenerate complete_windows_config.yaml for v0.143.0 def…
sky333999 Feb 12, 2026
029d5bc
fix(prometheus): set NameValidationScheme on programmatic relabel con…
sky333999 Feb 14, 2026
fa69d48
fix(prw): disable add_metric_suffixes to preserve backward-compatible…
sky333999 Feb 15, 2026
28e1bf2
fix(resourcedetection): set eks node_from_env_var to HOST_NAME
sky333999 Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
653 changes: 341 additions & 312 deletions go.mod

Large diffs are not rendered by default.

1,395 changes: 699 additions & 696 deletions go.sum

Large diffs are not rendered by default.

4 changes: 1 addition & 3 deletions internal/merge/confmap/confmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ import (
otelconfmap "go.opentelemetry.io/collector/confmap"
)

const (
KeyDelimiter = otelconfmap.KeyDelimiter
)
var KeyDelimiter = otelconfmap.KeyDelimiter

type Conf struct {
k *koanf.Koanf
Expand Down
48 changes: 25 additions & 23 deletions plugins/inputs/prometheus/metric_type_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
package prometheus

import (
"net/url"
"testing"

"github.com/prometheus/common/model"
promconfig "github.com/prometheus/prometheus/config"
"github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/scrape"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -35,10 +35,10 @@ func (mStore *mockMetricMetadataStore) GetMetadata(metric string) (scrape.Metric
}

return scrape.MetricMetadata{
Metric: metric,
Type: mStore.Type,
Help: mStore.Help,
Unit: mStore.Unit,
MetricFamily: metric,
Type: mStore.Type,
Help: mStore.Help,
Unit: mStore.Unit,
}, true
}

Expand All @@ -63,16 +63,17 @@ func (ms *mockScrapeManager) TargetsAll() map[string][]*scrape.Target {
targetMap := make(map[string][]*scrape.Target)

//add a target
params := url.Values{
"abc": []string{"foo", "bar", "baz"},
"xyz": []string{"www"},
}
labels1 := labels.FromMap(map[string]string{
model.JobLabel: "job1",
model.InstanceLabel: "instance1",
savedScrapeInstanceLabel: "instance1",
})
target1 := scrape.NewTarget(labels1, labels1, params)
tLabels1 := model.LabelSet{
model.LabelName(model.JobLabel): "job1",
model.LabelName(model.InstanceLabel): "instance1",
model.LabelName(savedScrapeInstanceLabel): "instance1",
}
target1 := scrape.NewTarget(labels1, &promconfig.ScrapeConfig{}, tLabels1, nil)
mStore1 := &mockMetricMetadataStore{
MetricList: []string{"m1", "m2", "m4"},
Type: model.MetricTypeCounter,
Expand All @@ -83,16 +84,17 @@ func (ms *mockScrapeManager) TargetsAll() map[string][]*scrape.Target {
targetMap["job1"] = []*scrape.Target{target1}

//add a target whose job name has been replaced (e.g. job2 -> job2_replaced)
params2 := url.Values{
"abc": []string{"foo", "bar", "foobar"},
"xyz": []string{"ooo"},
}
labels2 := labels.FromMap(map[string]string{
model.JobLabel: "job2_replaced",
model.InstanceLabel: "instance2",
savedScrapeInstanceLabel: "instance2",
})
target2 := scrape.NewTarget(labels2, labels2, params2)
tLabels2 := model.LabelSet{
model.LabelName(model.JobLabel): "job2_replaced",
model.LabelName(model.InstanceLabel): "instance2",
model.LabelName(savedScrapeInstanceLabel): "instance2",
}
target2 := scrape.NewTarget(labels2, &promconfig.ScrapeConfig{}, tLabels2, nil)
mStore2 := &mockMetricMetadataStore{
MetricList: []string{"m1", "m2"},
Type: model.MetricTypeGauge,
Expand Down Expand Up @@ -133,20 +135,20 @@ func TestMetadataServiceImpl_GetWithOriginalJobname(t *testing.T) {
mCache, err = metricsTypeHandler.ms.Get("job1", "instance1")
require.NoError(t, err)
expectedMetricMetadata := scrape.MetricMetadata{
Metric: "m1",
Type: model.MetricTypeCounter,
Help: "",
Unit: "",
MetricFamily: "m1",
Type: model.MetricTypeCounter,
Help: "",
Unit: "",
}
metricMetadata, ok := mCache.Metadata("m1")
assert.Equal(t, ok, true)
assert.Equal(t, expectedMetricMetadata, metricMetadata)

expectedMetricMetadata = scrape.MetricMetadata{
Metric: "m2",
Type: model.MetricTypeCounter,
Help: "",
Unit: "",
MetricFamily: "m2",
Type: model.MetricTypeCounter,
Help: "",
Unit: "",
}
metricMetadata, ok = mCache.Metadata("m2")
assert.Equal(t, ok, true)
Expand Down
8 changes: 4 additions & 4 deletions plugins/inputs/prometheus/metrics_receiver.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,14 @@ func (mr *metricsReceiver) feed(batch PrometheusMetricBatch) error {
func (ma *metricAppender) Append(_ storage.SeriesRef, ls labels.Labels, t int64, v float64) (storage.SeriesRef, error) {
metricName := ""

labelMap := make(map[string]string, len(ls))
for _, l := range ls {
labelMap := make(map[string]string, ls.Len())
ls.Range(func(l labels.Label) {
if l.Name == model.MetricNameLabel {
metricName = l.Value
continue
return
}
labelMap[l.Name] = l.Value
}
})

if metricName == "" {
// The error should never happen, print log here for debugging
Expand Down
48 changes: 25 additions & 23 deletions plugins/inputs/prometheus/metrics_receiver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ func Test_metricAppender_Add_BadMetricName(t *testing.T) {
var ts int64 = 10
var v = 10.0

ls := []labels.Label{
{Name: "name_a", Value: "value_a"},
{Name: "name_b", Value: "value_b"},
}
ls := labels.FromStrings(
"name_a", "value_a",
"name_b", "value_b",
)

r, err := ma.Append(0, ls, ts, v)
assert.Equal(t, storage.SeriesRef(0), r)
Expand All @@ -37,10 +37,10 @@ func Test_metricAppender_Add(t *testing.T) {
ma := mr.Appender(nil)
var ts int64 = 10
var v = 10.0
ls := []labels.Label{
{Name: "__name__", Value: "metric_name"},
{Name: "tag_a", Value: "a"},
}
ls := labels.FromStrings(
"__name__", "metric_name",
"tag_a", "a",
)

ref, err := ma.Append(0, ls, ts, v)
assert.Equal(t, ref, storage.SeriesRef(0))
Expand Down Expand Up @@ -70,10 +70,10 @@ func Test_metricAppender_Rollback(t *testing.T) {
ma := mr.Appender(nil)
var ts int64 = 10
var v = 10.0
ls := []labels.Label{
{Name: "__name__", Value: "metric_name"},
{Name: "tag_a", Value: "a"},
}
ls := labels.FromStrings(
"__name__", "metric_name",
"tag_a", "a",
)

ref, err := ma.Append(0, ls, ts, v)
assert.Equal(t, ref, storage.SeriesRef(0))
Expand All @@ -91,10 +91,10 @@ func Test_metricAppender_Commit(t *testing.T) {
ma := mr.Appender(nil)
var ts int64 = 10
var v = 10.0
ls := []labels.Label{
{Name: "__name__", Value: "metric_name"},
{Name: "tag_a", Value: "a"},
}
ls := labels.FromStrings(
"__name__", "metric_name",
"tag_a", "a",
)

ref, err := ma.Append(0, ls, ts, v)
assert.Equal(t, ref, storage.SeriesRef(0))
Expand Down Expand Up @@ -123,7 +123,7 @@ func Test_loadConfigFromFileWithTargetAllocator(t *testing.T) {

configFile := filepath.Join("testdata", "target_allocator.yaml")

logLevel := &promslog.AllowedLevel{}
logLevel := promslog.NewLevel()
err := logLevel.Set("info")
require.NoError(t, err)

Expand All @@ -141,8 +141,10 @@ func Test_loadConfigFromFileWithTargetAllocator(t *testing.T) {

assert.NoError(t, err)
assert.True(t, taManager.enabled)
assert.Equal(t, taManager.config.TargetAllocator.CollectorID, "collector-1")
assert.Equal(t, taManager.config.TargetAllocator.TLSSetting.CAFile, DefaultTLSCaFilePath)
taCfg := taManager.config.TargetAllocator.Get()
require.NotNil(t, taCfg)
assert.Equal(t, taCfg.CollectorID, "collector-1")
assert.Equal(t, taCfg.TLS.CAFile, DefaultTLSCaFilePath)
}

func Test_loadConfigFromFileWithoutTargetAllocator(t *testing.T) {
Expand All @@ -152,11 +154,11 @@ func Test_loadConfigFromFileWithoutTargetAllocator(t *testing.T) {
configFile := filepath.Join("testdata", "base-k8.yaml")

// Create logger configuration
logLevel := &promslog.AllowedLevel{}
logLevel := promslog.NewLevel()
err := logLevel.Set("debug")
require.NoError(t, err)

format := &promslog.AllowedFormat{}
format := &promslog.Format{}
err = format.Set("logfmt")
require.NoError(t, err)

Expand Down Expand Up @@ -184,11 +186,11 @@ func Test_loadConfigFromFileEC2(t *testing.T) {
configFile := filepath.Join("testdata", "base-k8.yaml")

// Create logger configuration
logLevel := &promslog.AllowedLevel{}
logLevel := promslog.NewLevel()
err := logLevel.Set("debug")
require.NoError(t, err)

format := &promslog.AllowedFormat{}
format := &promslog.Format{}
err = format.Set("logfmt")
require.NoError(t, err)

Expand Down
5 changes: 4 additions & 1 deletion plugins/inputs/prometheus/metrics_type_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"

v1 "github.com/prometheus/client_golang/api/prometheus/v1"
"github.com/prometheus/prometheus/model/labels"
"github.com/prometheus/prometheus/scrape"
)

Expand Down Expand Up @@ -88,8 +89,10 @@ func (t *metadataServiceImpl) Get(job, instance string) (metadataCache, error) {
}

// from the same targetGroup, instance is not going to be duplicated
lb := labels.NewBuilder(labels.EmptyLabels())
for _, target := range targetGroup {
if target.DiscoveredLabels().Get(savedScrapeInstanceLabel) == instance || target.DiscoveredLabels().Get(scrapeInstanceLabel) == instance {
dl := target.DiscoveredLabels(lb)
if dl.Get(savedScrapeInstanceLabel) == instance || dl.Get(scrapeInstanceLabel) == instance {
return &mCache{target}, nil
}
}
Expand Down
37 changes: 20 additions & 17 deletions plugins/inputs/prometheus/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,12 @@ var (
// https://github.com/aws/amazon-cloudwatch-agent/blob/main/plugins/inputs/prometheus_scraper/metrics_filter.go#L23
metricNameRelabelConfigs = []*relabel.Config{
{
Action: relabel.Replace,
Regex: relabel.MustNewRegexp("(.*)"),
Replacement: "$1",
TargetLabel: savedScrapeNameLabel,
SourceLabels: model.LabelNames{"__name__"},
Action: relabel.Replace,
Regex: relabel.MustNewRegexp("(.*)"),
Replacement: "$1",
TargetLabel: savedScrapeNameLabel,
SourceLabels: model.LabelNames{"__name__"},
NameValidationScheme: model.UTF8Validation,
},
}
)
Expand All @@ -79,15 +80,15 @@ func init() {
}

func Start(configFilePath string, receiver storage.Appendable, shutDownChan chan interface{}, wg *sync.WaitGroup, mth *metricsTypeHandler) {
logLevel := &promslog.AllowedLevel{}
logLevel := promslog.NewLevel()
logLevel.Set("info")

if os.Getenv("DEBUG") != "" {
runtime.SetBlockProfileRate(20)
runtime.SetMutexProfileFraction(20)
logLevel.Set("debug")
}
logFormat := &promslog.AllowedFormat{}
logFormat := &promslog.Format{}
_ = logFormat.Set("logfmt")

cfg := struct {
Expand Down Expand Up @@ -340,19 +341,21 @@ func relabelScrapeConfigs(prometheusConfig *config.Config, logger *slog.Logger)
relabelConfigs := []*relabel.Config{
// job
{
Action: relabel.Replace,
Regex: relabel.MustNewRegexp(".*"), // __address__ is always there, so we will find a match for every job
Replacement: sc.JobName, // value is hard coded job name
SourceLabels: model.LabelNames{"__address__"},
TargetLabel: savedScrapeJobLabel, // creates a new magic label
Action: relabel.Replace,
Regex: relabel.MustNewRegexp(".*"), // __address__ is always there, so we will find a match for every job
Replacement: sc.JobName, // value is hard coded job name
SourceLabels: model.LabelNames{"__address__"},
TargetLabel: savedScrapeJobLabel, // creates a new magic label
NameValidationScheme: model.UTF8Validation,
},
// instance
{
Action: relabel.Replace,
Regex: relabel.MustNewRegexp("(.*)"),
Replacement: "$1", // value is actual __address__, i.e. instance if you don't relabel it.
SourceLabels: model.LabelNames{"__address__"},
TargetLabel: savedScrapeInstanceLabel, // creates a new magic label
Action: relabel.Replace,
Regex: relabel.MustNewRegexp("(.*)"),
Replacement: "$1", // value is actual __address__, i.e. instance if you don't relabel it.
SourceLabels: model.LabelNames{"__address__"},
TargetLabel: savedScrapeInstanceLabel, // creates a new magic label
NameValidationScheme: model.UTF8Validation,
},
}

Expand Down
Loading
Loading