diff --git a/changelogs/head.asciidoc b/changelogs/head.asciidoc index c0c37664a00..f3211c82c9f 100644 --- a/changelogs/head.asciidoc +++ b/changelogs/head.asciidoc @@ -7,6 +7,7 @@ https://github.com/elastic/apm-server/compare/8.15\...main[View commits] ==== Bug fixes - Track all bulk request response status codes {pull}13574[13574] +- Fix a concurrent map write panic in monitoring middleware {pull}14335[14335] - Apply shutdown timeout to http server {pull}14339[14339] [float] diff --git a/docker-compose.yml b/docker-compose.yml index e4882ba608b..e02e428a248 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,7 +11,7 @@ x-logging: &default-logging services: elasticsearch: # TODO: replace with a pinned version such as 9.0.0-aaaaaaaa-SNAPSHOT - image: docker.elastic.co/elasticsearch/elasticsearch:9.0.0-532d78c6-SNAPSHOT + image: docker.elastic.co/elasticsearch/elasticsearch:9.0.0-9b4a1f9a-SNAPSHOT ports: - 9200:9200 healthcheck: @@ -43,7 +43,7 @@ services: kibana: # TODO: replace with a pinned version such as 9.0.0-aaaaaaaa-SNAPSHOT - image: docker.elastic.co/kibana/kibana:9.0.0-532d78c6-SNAPSHOT + image: docker.elastic.co/kibana/kibana:9.0.0-9b4a1f9a-SNAPSHOT ports: - 5601:5601 healthcheck: @@ -63,7 +63,7 @@ services: metricbeat: # TODO: replace with a pinned version such as 9.0.0-aaaaaaaa-SNAPSHOT - image: docker.elastic.co/beats/metricbeat:9.0.0-532d78c6-SNAPSHOT + image: docker.elastic.co/beats/metricbeat:9.0.0-9b4a1f9a-SNAPSHOT environment: ELASTICSEARCH_HOSTS: '["http://elasticsearch:9200"]' ELASTICSEARCH_USERNAME: "${KIBANA_ES_USER:-admin}" diff --git a/internal/beater/middleware/monitoring_middleware.go b/internal/beater/middleware/monitoring_middleware.go index 67c0125c285..e34b4b52ebc 100644 --- a/internal/beater/middleware/monitoring_middleware.go +++ b/internal/beater/middleware/monitoring_middleware.go @@ -20,6 +20,7 @@ package middleware import ( "context" "net/http" + "sync" "time" "go.opentelemetry.io/otel" @@ -37,8 +38,8 @@ type monitoringMiddleware struct { meter metric.Meter ints map[request.ResultID]*monitoring.Int - counters map[string]metric.Int64Counter - histograms map[string]metric.Int64Histogram + counters sync.Map + histograms sync.Map } func (m *monitoringMiddleware) Middleware() Middleware { @@ -79,23 +80,23 @@ func (m *monitoringMiddleware) inc(id request.ResultID) { func (m *monitoringMiddleware) getCounter(n string) metric.Int64Counter { name := "http.server." + n - if met, ok := m.counters[name]; ok { - return met + if met, ok := m.counters.Load(name); ok { + return met.(metric.Int64Counter) } nm, _ := m.meter.Int64Counter(name) - m.counters[name] = nm + m.counters.LoadOrStore(name, nm) return nm } func (m *monitoringMiddleware) getHistogram(n string, opts ...metric.Int64HistogramOption) metric.Int64Histogram { name := "http.server." + n - if met, ok := m.histograms[name]; ok { - return met + if met, ok := m.histograms.Load(name); ok { + return met.(metric.Int64Histogram) } nm, _ := m.meter.Int64Histogram(name, opts...) - m.histograms[name] = nm + m.histograms.LoadOrStore(name, nm) return nm } @@ -109,8 +110,8 @@ func MonitoringMiddleware(m map[request.ResultID]*monitoring.Int, mp metric.Mete mid := &monitoringMiddleware{ meter: mp.Meter("internal/beater/middleware"), ints: m, - counters: map[string]metric.Int64Counter{}, - histograms: map[string]metric.Int64Histogram{}, + counters: sync.Map{}, + histograms: sync.Map{}, } return mid.Middleware() diff --git a/testing/benchmark/outputs.tf b/testing/benchmark/outputs.tf index 2cad7994126..a2f40c81e43 100644 --- a/testing/benchmark/outputs.tf +++ b/testing/benchmark/outputs.tf @@ -43,6 +43,6 @@ output "apm_server_ip" { } output "admin_console_url" { - value = var.run_standalone ? "" : module.ec_deployment[0].admin_console_url + value = var.run_standalone ? "https://cloud.elastic.co/deployments" : module.ec_deployment[0].admin_console_url description = "The admin console URL" } diff --git a/testing/infra/k8s/base/stack/apm-server.yaml b/testing/infra/k8s/base/stack/apm-server.yaml index fd5060edc65..d1e03f77243 100644 --- a/testing/infra/k8s/base/stack/apm-server.yaml +++ b/testing/infra/k8s/base/stack/apm-server.yaml @@ -4,7 +4,7 @@ metadata: name: apm-server spec: # TODO: replace with a pinned version such as 9.0.0-aaaaaaaa-SNAPSHOT - version: 9.0.0-532d78c6-SNAPSHOT + version: 9.0.0-9b4a1f9a-SNAPSHOT count: 1 http: tls: diff --git a/testing/infra/k8s/base/stack/elasticsearch.yaml b/testing/infra/k8s/base/stack/elasticsearch.yaml index b4d245f9b68..ef1a70cda46 100644 --- a/testing/infra/k8s/base/stack/elasticsearch.yaml +++ b/testing/infra/k8s/base/stack/elasticsearch.yaml @@ -4,7 +4,7 @@ metadata: name: elasticsearch spec: # TODO: replace with a pinned version such as 9.0.0-aaaaaaaa-SNAPSHOT - version: 9.0.0-532d78c6-SNAPSHOT + version: 9.0.0-9b4a1f9a-SNAPSHOT auth: fileRealm: - secretName: elasticsearch-admin diff --git a/testing/infra/k8s/base/stack/kibana.yaml b/testing/infra/k8s/base/stack/kibana.yaml index 8cabf59e0fb..94991546342 100644 --- a/testing/infra/k8s/base/stack/kibana.yaml +++ b/testing/infra/k8s/base/stack/kibana.yaml @@ -4,7 +4,7 @@ metadata: name: kibana spec: # TODO: replace with a pinned version such as 9.0.0-aaaaaaaa-SNAPSHOT - version: 9.0.0-532d78c6-SNAPSHOT + version: 9.0.0-9b4a1f9a-SNAPSHOT count: 1 elasticsearchRef: name: elasticsearch diff --git a/x-pack/apm-server/default.pgo b/x-pack/apm-server/default.pgo index d377661ceed..6b9b1f269b5 100644 Binary files a/x-pack/apm-server/default.pgo and b/x-pack/apm-server/default.pgo differ