ITADN

panic: duplicate metrics collector registration attempted

#445Openmanselmi 创建于 2026-07-06
bug
M
manselmicommented
Hello, After https://github.com/mholt/caddy-l4/pull/431 (https://github.com/mholt/caddy-l4/commit/afd4a761fad1b97d9203860c5324fc53b78badcb) Caddy panics with ``` panic: duplicate metrics collector registration attempted ``` OS: ``` console % sw_vers ProductName: macOS ProductVersion: 26.5.1 BuildVersion: 25F80 ``` Golang: ``` console % go version go version go1.26.4 darwin/arm64 ``` Most recent succeeding commit is https://github.com/mholt/caddy-l4/commit/7b7abcbbb8afb7d7eeb359bfc0f6b24e6c5bbe02 (the one preceding https://github.com/mholt/caddy-l4/commit/afd4a761fad1b97d9203860c5324fc53b78badcb): ``` console % xcaddy build 13a4c3f43c79ca04064457ab9cf95b376c294141 \ > --with=github.com/mholt/caddy-l4@7b7abcbbb8afb7d7eeb359bfc0f6b24e6c5bbe02 ``` Failing commit https://github.com/mholt/caddy-l4/commit/afd4a761fad1b97d9203860c5324fc53b78badcb: ``` console % xcaddy build 13a4c3f43c79ca04064457ab9cf95b376c294141 \ > --with=github.com/mholt/caddy-l4@afd4a761fad1b97d9203860c5324fc53b78badcb ``` Standard error after launching Caddy: ``` text {"level":"info","ts":1783343714.3722398,"msg":"maxprocs: Leaving GOMAXPROCS=18: CPU quota undefined"} {"level":"info","ts":1783343714.372309,"msg":"GOMEMLIMIT is updated","GOMEMLIMIT":123695058124,"previous":9223372036854775807} {"level":"info","ts":1783343714.3723168,"msg":"using config from file","file":"/Users/manselmi/.config/caddy/Caddyfile"} {"level":"info","ts":1783343714.3723211,"msg":"adapted config to JSON","adapter":"caddyfile"} {"level":"info","ts":1783343714.3732102,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//127.0.0.1:2019","//localhost:2019","//[::1]:2019"]} {"level":"info","ts":1783343714.373295,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0x24e6a8aefe80"} {"level":"info","ts":1783343714.37465,"logger":"http.auto_https","msg":"automatic HTTPS is completely disabled for server","server_name":"https"} panic: duplicate metrics collector registration attempted goroutine 1 [running]: github.com/prometheus/client_golang/prometheus.(*Registry).MustRegister(0x24e6a8da6b90, {0x24e6a9135a00?, 0x1, 0xc?}) github.com/prometheus/client_golang@v1.23.2/prometheus/registry.go:406 +0x78 github.com/prometheus/client_golang/prometheus/promauto.Factory.NewCounterVec({{0x1059dbae0?, 0x24e6a8da6b90?}}, {{0x104102555, 0x5}, {0x10411477d, 0xc}, {0x104121050, 0x11}, {0x104186f5c, 0x39}, ...}, ...) github.com/prometheus/client_golang@v1.23.2/prometheus/promauto/auto.go:276 +0x168 github.com/mholt/caddy-l4/modules/l4proxy.newProxyMetrics(0x24e6a8da6b90) github.com/mholt/caddy-l4@v0.1.2-0.20260703160116-bf180f4a228c/modules/l4proxy/metrics.go:35 +0xa4 github.com/mholt/caddy-l4/modules/l4proxy.(*Handler).Provision(0x24e6a92bc180, {{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a8e8b8c0, 0x2, 0x2}, {0x0, 0x0, ...}, ...}) github.com/mholt/caddy-l4@v0.1.2-0.20260703160116-bf180f4a228c/modules/l4proxy/proxy.go:83 +0x100 github.com/caddyserver/caddy/v2.Context.LoadModuleByID({{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a8e8b8c0, 0x2, 0x2}, {0x0, 0x0, 0x0}, ...}, ...) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/context.go:426 +0x7c8 github.com/caddyserver/caddy/v2.Context.loadModuleInline({{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/context.go:484 +0xfc github.com/caddyserver/caddy/v2.Context.LoadModule({{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/context.go:231 +0x6d4 github.com/mholt/caddy-l4/layer4.(*Route).Provision(0x24e6a8ab8840, {{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, {0x0, 0x0, ...}, ...}) github.com/mholt/caddy-l4@v0.1.2-0.20260703160116-bf180f4a228c/layer4/routes.go:65 +0x150 github.com/mholt/caddy-l4/layer4.RouteList.Provision({0x24e6a90f4220, 0x1, 0x0?}, {{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, ...}) github.com/mholt/caddy-l4@v0.1.2-0.20260703160116-bf180f4a228c/layer4/routes.go:90 +0x6c github.com/mholt/caddy-l4/layer4.(*Server).Provision(0x24e6a8c68a80, {{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, {0x0, 0x0, ...}, ...}, ...) github.com/mholt/caddy-l4@v0.1.2-0.20260703160116-bf180f4a228c/layer4/server.go:81 +0x40c github.com/mholt/caddy-l4/layer4.(*App).Provision(0x24e6a91000b0, {{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, {0x0, 0x0, ...}, ...}) github.com/mholt/caddy-l4@v0.1.2-0.20260703160116-bf180f4a228c/layer4/app.go:56 +0x15c github.com/caddyserver/caddy/v2.Context.LoadModuleByID({{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x24e6a9135520, 0x1, 0x1}, {0x0, 0x0, 0x0}, ...}, ...) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/context.go:426 +0x7c8 github.com/caddyserver/caddy/v2.Context.App({{0x1059e0558, 0x24e6a8da6be0}, 0x24e6a8c0c480, 0x24e6a8aef580, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0}, ...}, ...) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/context.go:514 +0x1e0 github.com/caddyserver/caddy/v2.provisionContext.func3(...) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/caddy.go:575 github.com/caddyserver/caddy/v2.provisionContext(0xa?, 0x1) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/caddy.go:580 +0x590 github.com/caddyserver/caddy/v2.run(0x24e6a92f3300?, 0x1) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/caddy.go:420 +0x54 github.com/caddyserver/caddy/v2.unsyncedDecodeAndRun({0x24e6a92f1980, 0x18ce, 0x1980}, 0x1) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/caddy.go:363 +0x114 github.com/caddyserver/caddy/v2.changeConfig({0x104100fb5, 0x4}, {0x104106e8d, 0x7}, {0x24e6a92f0000, 0x18ce, 0x1980}, {0x0, 0x0}, 0x1) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/caddy.go:247 +0x7b4 github.com/caddyserver/caddy/v2.Load({0x24e6a92f0000?, 0x27?, 0x10410cedf?}, 0x9?) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/caddy.go:136 +0x84 github.com/caddyserver/caddy/v2/cmd.cmdRun({0x0?}) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/cmd/commandfuncs.go:283 +0x61c github.com/caddyserver/caddy/v2/cmd.init.1.func2.WrapCommandFuncForCobra.1(0x24e6a8d54308, {0x104101021?, 0x4?, 0x104100fed?}) github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/cmd/cobra.go:151 +0x34 github.com/spf13/cobra.(*Command).execute(0x24e6a8d54308, {0x24e6a8e80500, 0x2, 0x2}) github.com/spf13/cobra@v1.10.2/command.go:1015 +0x814 github.com/spf13/cobra.(*Command).ExecuteC(0x24e6a8bc7b08) github.com/spf13/cobra@v1.10.2/command.go:1148 +0x350 github.com/spf13/cobra.(*Command).Execute(...) github.com/spf13/cobra@v1.10.2/command.go:1071 github.com/caddyserver/caddy/v2/cmd.Main() github.com/caddyserver/caddy/v2@v2.11.5-0.20260622162543-13a4c3f43c79/cmd/main.go:72 +0x6c main.main() caddy/main.go:13 +0x1c ``` Caddyfile: ``` Caddyfile { log { level INFO } grace_period 1s layer4 { tcp/:443 { @biomappings tls sni biomappings-curation-app.localhost route @biomappings { proxy { proxy_protocol v2 upstream tcp/localhost:8443 } } @tls tls route @tls { proxy { proxy_protocol v2 upstream tcp/localhost:2443 } } } udp/:443 { # Caddy's implementation of PROXY protocol doesn't work with UDP, as the listener_wrappers # directive supports only TCP connections. This is problematic for backends that, for example, # obtain the client IP address from the X-Forwarded-For header. # # https://github.com/caddyserver/caddy/issues/6827 # @quic quic route @quic { proxy udp/localhost:2443 } } } http_port 2080 https_port 2443 auto_https off skip_install_trust servers :2443 { name https listener_wrappers { proxy_protocol { allow 127.0.0.1/32 ::1/128 fallback_policy reject } tls } strict_sni_host on } } (response_headers) { header >Alt-Svc "h3=\":443\"; ma=2592000; persist=1, h2=\":443\"; ma=2592000; persist=1" } (reverse_proxy_config) { flush_interval -1 stream_timeout 1m stream_close_delay 1m transport http { compression off } } (tls) { tls {env.TLS_CRT_PEM} {env.TLS_KEY_PEM} } jupyterlab.{$DOMAIN_LOCALHOST} { import tls handle_errors { import response_headers } import response_headers reverse_proxy http://[::1]:8889 { import reverse_proxy_config } } mermaid.{$DOMAIN_LOCALHOST} { import tls handle_errors { import response_headers } import response_headers reverse_proxy http://[::1]:5081 { import reverse_proxy_config } } seaweedfs-admin.{$DOMAIN_LOCALHOST} { import tls handle_errors { import response_headers } import response_headers reverse_proxy http://[::1]:23646 { import reverse_proxy_config } } seaweedfs-iceberg.{$DOMAIN_LOCALHOST} { import tls handle_errors { import response_headers } import response_headers reverse_proxy http://[::1]:8181 { import reverse_proxy_config } } seaweedfs-s3.{$DOMAIN_LOCALHOST} { import tls handle_errors { import response_headers } import response_headers reverse_proxy http://[::1]:8333 { import reverse_proxy_config } } syncthing.{$DOMAIN_LOCALHOST} { import tls handle_errors { import response_headers } import response_headers reverse_proxy http://[::1]:8384 { import reverse_proxy_config } } ```
1 条评论