Skip to content

Commit f82db5a

Browse files
authored
Injecting Prometheus path if not specified in agent config (#258)
* Injecting Prom path if it doesn't exist
1 parent 7ae202e commit f82db5a

File tree

5 files changed

+337
-14
lines changed

5 files changed

+337
-14
lines changed

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Build the manager binary
2-
FROM golang:1.20 as builder
2+
FROM golang:1.21 as builder
33

44
# set goproxy=direct
55
ENV GOPROXY direct
@@ -42,4 +42,4 @@ WORKDIR /
4242
COPY --from=builder /workspace/manager .
4343
USER 65532:65532
4444

45-
ENTRYPOINT ["/manager"]
45+
ENTRYPOINT ["/manager"]

go.mod

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ require (
2929
github.com/prometheus/prometheus v0.48.1
3030
github.com/spf13/pflag v1.0.5
3131
github.com/stretchr/testify v1.9.0
32+
go.opentelemetry.io/collector/confmap v0.101.0
3233
go.opentelemetry.io/collector/featuregate v0.77.0
3334
go.opentelemetry.io/otel v1.21.0
34-
go.uber.org/zap v1.25.0
35+
go.uber.org/zap v1.27.0
3536
golang.org/x/exp v0.0.0-20231127185646-65229373498e
3637
gopkg.in/yaml.v2 v2.4.0
3738
gopkg.in/yaml.v3 v3.0.1
@@ -102,6 +103,7 @@ require (
102103
github.com/go-playground/universal-translator v0.18.1 // indirect
103104
github.com/go-playground/validator/v10 v10.20.0 // indirect
104105
github.com/go-resty/resty/v2 v2.7.0 // indirect
106+
github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
105107
github.com/go-zookeeper/zk v1.0.3 // indirect
106108
github.com/goccy/go-json v0.10.2 // indirect
107109
github.com/gogo/protobuf v1.3.2 // indirect
@@ -128,7 +130,7 @@ require (
128130
github.com/hashicorp/go-multierror v1.1.1 // indirect
129131
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
130132
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
131-
github.com/hashicorp/go-version v1.6.0 // indirect
133+
github.com/hashicorp/go-version v1.7.0 // indirect
132134
github.com/hashicorp/golang-lru v0.6.0 // indirect
133135
github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c // indirect
134136
github.com/hashicorp/serf v0.10.1 // indirect
@@ -141,6 +143,9 @@ require (
141143
github.com/jpillora/backoff v1.0.0 // indirect
142144
github.com/klauspost/compress v1.17.1 // indirect
143145
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
146+
github.com/knadh/koanf/maps v0.1.1 // indirect
147+
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
148+
github.com/knadh/koanf/v2 v2.1.1 // indirect
144149
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
145150
github.com/kylelemons/godebug v1.1.0 // indirect
146151
github.com/leodido/go-urn v1.4.0 // indirect
@@ -150,7 +155,9 @@ require (
150155
github.com/mattn/go-isatty v0.0.20 // indirect
151156
github.com/metalmatze/signal v0.0.0-20210307161603-1c9aa721a97a // indirect
152157
github.com/miekg/dns v1.1.56 // indirect
158+
github.com/mitchellh/copystructure v1.2.0 // indirect
153159
github.com/mitchellh/go-homedir v1.1.0 // indirect
160+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
154161
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
155162
github.com/modern-go/reflect2 v1.0.2 // indirect
156163
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
@@ -181,7 +188,7 @@ require (
181188
go.opentelemetry.io/otel/metric v1.21.0 // indirect
182189
go.opentelemetry.io/otel/trace v1.21.0 // indirect
183190
go.uber.org/atomic v1.11.0 // indirect
184-
go.uber.org/goleak v1.2.1 // indirect
191+
go.uber.org/goleak v1.3.0 // indirect
185192
go.uber.org/multierr v1.11.0 // indirect
186193
golang.org/x/arch v0.8.0 // indirect
187194
golang.org/x/crypto v0.24.0 // indirect

go.sum

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2z
8585
github.com/aws/aws-sdk-go v1.45.25 h1:c4fLlh5sLdK2DCRTY1z0hyuJZU4ygxX8m1FswL6/nF4=
8686
github.com/aws/aws-sdk-go v1.45.25/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
8787
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
88-
github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o=
89-
github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
9088
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
9189
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
9290
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -250,6 +248,8 @@ github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSM
250248
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
251249
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
252250
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
251+
github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
252+
github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
253253
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
254254
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
255255
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
@@ -412,8 +412,8 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
412412
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
413413
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
414414
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
415-
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
416-
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
415+
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
416+
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
417417
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
418418
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
419419
github.com/hashicorp/golang-lru v0.6.0 h1:uL2shRDx7RTrOrTCUZEGP/wJUFiUI8QT6E7z5o8jga4=
@@ -467,6 +467,12 @@ github.com/klauspost/compress v1.17.1/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQs
467467
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
468468
github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
469469
github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
470+
github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
471+
github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
472+
github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU=
473+
github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU=
474+
github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
475+
github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
470476
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
471477
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
472478
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
@@ -520,6 +526,8 @@ github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJys
520526
github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
521527
github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
522528
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
529+
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
530+
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
523531
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
524532
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
525533
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
@@ -529,6 +537,8 @@ github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
529537
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
530538
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
531539
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
540+
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
541+
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
532542
github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA=
533543
github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
534544
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -703,6 +713,8 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
703713
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
704714
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
705715
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
716+
go.opentelemetry.io/collector/confmap v0.101.0 h1:pGXZRBKnZqys1HgNECGSi8Pec5RBGa9vVCfrpcvW+kA=
717+
go.opentelemetry.io/collector/confmap v0.101.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
706718
go.opentelemetry.io/collector/featuregate v0.77.0 h1:m1/IzaXoQh6SgF6CM80vrBOCf5zSJ2GVISfA27fYzGU=
707719
go.opentelemetry.io/collector/featuregate v0.77.0/go.mod h1:/kVAsGUCyJXIDSgHftCN63QiwAEVHRLX2Kh/S+dqgHY=
708720
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg=
@@ -725,14 +737,14 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
725737
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
726738
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
727739
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
728-
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
729-
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
740+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
741+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
730742
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
731743
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
732744
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
733745
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
734-
go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
735-
go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
746+
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
747+
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
736748
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
737749
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
738750
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=

internal/manifests/collector/config_replace.go

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
ta "github.com/aws/amazon-cloudwatch-agent-operator/internal/manifests/targetallocator/adapters"
1818
"github.com/aws/amazon-cloudwatch-agent-operator/internal/naming"
1919
"github.com/aws/amazon-cloudwatch-agent-operator/pkg/featuregate"
20+
"go.opentelemetry.io/collector/confmap"
2021
)
2122

2223
type targetAllocator struct {
@@ -33,12 +34,57 @@ type Config struct {
3334
}
3435

3536
func ReplaceConfig(instance v1alpha1.AmazonCloudWatchAgent) (string, error) {
37+
// Parse the original configuration from instance.Spec.Config
3638
config, err := adapters.ConfigFromJSONString(instance.Spec.Config)
3739
if err != nil {
3840
return "", err
3941
}
4042

41-
out, err := json.Marshal(config)
43+
conf := confmap.NewFromStringMap(config)
44+
45+
prometheusFilePath := conf.Get("logs::metrics_collected::prometheus::prometheus_config_path")
46+
if prometheusFilePath == nil {
47+
prometheusFilePath = "/etc/prometheusconfig/prometheus.yaml"
48+
}
49+
if conf.IsSet("logs::metrics_collected::prometheus") && !instance.Spec.Prometheus.IsEmpty() {
50+
prometheusConfig := confmap.NewFromStringMap(map[string]interface{}{
51+
"logs": map[string]interface{}{
52+
"metrics_collected": map[string]interface{}{
53+
"prometheus": map[string]interface{}{
54+
"prometheus_config_path": prometheusFilePath,
55+
},
56+
},
57+
},
58+
})
59+
60+
err = conf.Merge(prometheusConfig)
61+
if err != nil {
62+
return "", err
63+
}
64+
}
65+
prometheusFilePath = conf.Get("metrics::metrics_collected::prometheus::prometheus_config_path")
66+
if prometheusFilePath == nil {
67+
prometheusFilePath = "/etc/prometheusconfig/prometheus.yaml"
68+
}
69+
if conf.IsSet("metrics::metrics_collected::prometheus") && !instance.Spec.Prometheus.IsEmpty() {
70+
prometheusConfig := confmap.NewFromStringMap(map[string]interface{}{
71+
"metrics": map[string]interface{}{
72+
"metrics_collected": map[string]interface{}{
73+
"prometheus": map[string]interface{}{
74+
"prometheus_config_path": prometheusFilePath,
75+
},
76+
},
77+
},
78+
})
79+
80+
err = conf.Merge(prometheusConfig)
81+
if err != nil {
82+
return "", err
83+
}
84+
}
85+
86+
finalConfig := conf.ToStringMap()
87+
out, err := json.Marshal(finalConfig)
4288
if err != nil {
4389
return "", err
4490
}

0 commit comments

Comments
 (0)