PDavid commented on PR #2360:
URL: https://github.com/apache/zookeeper/pull/2360#issuecomment-4039969101

   ### Testing
   
   Tested this locally as follows:
   
   Created keystore:
   
   ```
   keytool -genkeypair -alias zkAdmin -keyalg RSA -keysize 2048 \
     -dname "CN=your.server.com" -validity 365 \
     -keystore keystore.jks -storepass password -keypass password
   ```
   
   Created truststore:
   
   ```
   # Export the cert
   keytool -export -alias zkAdmin -file zkAdmin.crt \
     -keystore keystore.jks -storepass password
   
   # Import into truststore
   keytool -import -alias zkAdmin -file zkAdmin.crt \
     -keystore truststore.jks -storepass password -noprompt
   ```
   
   Added these to  `zoo.cfg`:
   
   ```
   ...
   ssl.enabledProtocols=TLSv1.2,TLSv1.3
   
ssl.ciphersuites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
   ssl.keyStore.type=jks
   ssl.keyStore.location=keystore.jks
   ssl.keyStore.password=password
   ssl.trustStore.type=jks
   ssl.trustStore.location=truststore.jks
   ssl.trustStore.password=password
   ssl.quorum.enabledProtocols=TLSv1.2,TLSv1.3
   
ssl.quorum.ciphersuites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
   ssl.quorum.keyStore.type=jks
   ssl.quorum.keyStore.location=keystore.jks
   ssl.quorum.keyStore.password=password
   ssl.quorum.trustStore.type=jks
   ssl.quorum.trustStore.location=truststore.jks
   ssl.quorum.trustStore.password=password
   ssl.clientAuth=none
   
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
   #metricsProvider.httpPort=7000
   metricsProvider.httpsPort=7000
   metricsProvider.ssl.keyStore.location=keystore.jks
   metricsProvider.ssl.keyStore.password=password
   metricsProvider.ssl.trustStore.location=keystore.jks
   metricsProvider.ssl.trustStore.password=password
   metricsProvider.ssl.need.client.auth=false
   metricsProvider.ssl.enabledProtocols=TLSv1.2,TLSv1.3
   
metricsProvider.ssl.ciphersuites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
   ```
   
   Started ZooKeeper:
   
   ```
   mvn clean install -DskipTests && bin/zkServer.sh start
   ```
   
   ZooKeeper log:
   
   ```
   ...
   2026-03-11 15:46:36,926 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@167] - Reading configuration from: 
/home/david/projects/zookeeper/bin/../conf/zoo.cfg
   2026-03-11 15:46:36,932 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@434] - clientPortAddress is 0.0.0.0:2181
   2026-03-11 15:46:36,933 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@438] - secureClientPort is not set
   2026-03-11 15:46:36,933 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@454] - observerMasterPort is not set
   2026-03-11 15:46:36,933 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@471] - metricsProvider.className is 
org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
   2026-03-11 15:46:36,935 [myid:] - INFO  
[main:o.a.z.s.DatadirCleanupManager@78] - autopurge.snapRetainCount set to 3
   2026-03-11 15:46:36,936 [myid:] - INFO  
[main:o.a.z.s.DatadirCleanupManager@79] - autopurge.purgeInterval set to 0
   2026-03-11 15:46:36,936 [myid:] - INFO  
[main:o.a.z.s.DatadirCleanupManager@101] - Purge task is not scheduled.
   2026-03-11 15:46:36,936 [myid:] - WARN  [main:o.a.z.s.q.QuorumPeerMain@139] 
- Either no config or no quorum defined in config, running in standalone mode
   2026-03-11 15:46:36,939 [myid:] - INFO  [main:o.a.z.j.ManagedUtil@46] - 
Log4j 1.2 jmx support not found; jmx disabled.
   2026-03-11 15:46:36,939 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@167] - Reading configuration from: 
/home/david/projects/zookeeper/bin/../conf/zoo.cfg
   2026-03-11 15:46:36,940 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@434] - clientPortAddress is 0.0.0.0:2181
   2026-03-11 15:46:36,940 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@438] - secureClientPort is not set
   2026-03-11 15:46:36,940 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@454] - observerMasterPort is not set
   2026-03-11 15:46:36,940 [myid:] - INFO  
[main:o.a.z.s.q.QuorumPeerConfig@471] - metricsProvider.className is 
org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
   2026-03-11 15:46:36,940 [myid:] - INFO  
[main:o.a.z.s.ZooKeeperServerMain@122] - Starting server
   2026-03-11 15:46:36,946 [myid:] - INFO  
[main:o.a.z.m.p.PrometheusMetricsProvider@122] - Initializing Prometheus 
metrics with Jetty, configuration: {ssl.enabledProtocols=TLSv1.2,TLSv1.3, 
ssl.trustStore.password=password, httpsPort=7000, 
ssl.keyStore.location=keystore.jks, ssl.keyStore.password=password, 
ssl.need.client.auth=false, 
ssl.ciphersuites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
 ssl.trustStore.location=keystore.jks}
   2026-03-11 15:46:36,978 [myid:] - INFO  
[main:o.a.z.m.p.PrometheusMetricsProvider@161] - Starting Prometheus Jetty 
server...
   2026-03-11 15:46:36,983 [myid:] - INFO  [main:o.e.j.u.l.Log@170] - Logging 
initialized @436ms to org.eclipse.jetty.util.log.Slf4jLog
   2026-03-11 15:46:36,997 [myid:] - INFO  
[main:o.a.z.m.p.PrometheusMetricsProvider@245] - Setting enabled protocols: 
'TLSv1.2,TLSv1.3'
   2026-03-11 15:46:36,997 [myid:] - INFO  
[main:o.a.z.m.p.PrometheusMetricsProvider@251] - Setting enabled cipherSuites: 
'TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384'
   2026-03-11 15:46:37,036 [myid:] - INFO  [main:o.e.j.s.Server@375] - 
jetty-9.4.58.v20250814; built: 2025-08-14T02:28:49.637Z; git: 
8f1440587e9e4ae7db3d74cf205643f3d707148d; jvm 1.8.0_422-b05
   2026-03-11 15:46:37,065 [myid:] - INFO  [main:o.e.j.s.h.ContextHandler@921] 
- Started o.e.j.s.ServletContextHandler@1165b38{/,null,AVAILABLE}
   2026-03-11 15:46:37,163 [myid:] - INFO  
[main:o.e.j.u.s.SslContextFactory@358] - 
x509=X509@4c39bec8(zkadmin,h=[your.server.com],a=[],w=[]) for 
Server@1f59a598[provider=null,keyStore=file:///home/david/projects/zookeeper/keystore.jks,trustStore=file:///home/david/projects/zookeeper/keystore.jks]
   2026-03-11 15:46:37,211 [myid:] - INFO  [main:o.e.j.s.AbstractConnector@333] 
- Started ServerConnector@16ec5519{SSL, (ssl, http/1.1)}{0.0.0.0:7000}
   2026-03-11 15:46:37,212 [myid:] - INFO  [main:o.e.j.s.Server@415] - Started 
@665ms
   2026-03-11 15:46:37,212 [myid:] - INFO  
[main:o.a.z.m.p.PrometheusMetricsProvider@199] - Prometheus metrics provider 
with Jetty started. HTTP port: disabled, HTTPS port: 7000
   2026-03-11 15:46:37,218 [myid:] - INFO  [main:o.a.z.s.ServerMetrics@64] - 
ServerMetrics initialized with provider 
org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider@68e965f5
   2026-03-11 15:46:37,225 [myid:] - INFO  
[main:o.a.z.s.a.DigestAuthenticationProvider@51] - ACL digest algorithm is: SHA1
   2026-03-11 15:46:37,226 [myid:] - INFO  
[main:o.a.z.s.a.DigestAuthenticationProvider@65] - 
zookeeper.DigestAuthenticationProvider.enabled = true
   2026-03-11 15:46:37,227 [myid:] - INFO  [main:o.a.z.s.p.FileTxnSnapLog@124] 
- zookeeper.snapshot.trust.empty : false
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] - 
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -   
______                  _                                          
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -  
|___  /                 | |                                         
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -    
 / /    ___     ___   | | __   ___    ___   _ __     ___   _ __   
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -    
/ /    / _ \   / _ \  | |/ /  / _ \  / _ \ | '_ \   / _ \ | '__|
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -   
/ /__  | (_) | | (_) | |   <  |  __/ |  __/ | |_) | |  __/ | |    
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -  
/_____|  \___/   \___/  |_|\_\  \___|  \___| | .__/   \___| |_|
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -    
                                           | |                     
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] -    
                                           |_|                     
   2026-03-11 15:46:37,232 [myid:] - INFO  [main:o.a.z.ZookeeperBanner@42] - 
   2026-03-11 15:46:37,233 [myid:] - INFO  [main:o.a.z.Environment@98] - Server 
environment:zookeeper.version=3.10.0-SNAPSHOT-c084c2537ec60ce47131bb61181b9833bd6630e6-dirty,
 built on 2026-03-11 14:43 UTC
   
   
   ```
   
   Call PrometheusMetricsProvider:
   
   ```
   curl -k -v https://localhost:7000/metrics 
   * Host localhost:7000 was resolved.
   * IPv6: ::1
   * IPv4: 127.0.0.1
   *   Trying [::1]:7000...
   * ALPN: curl offers h2,http/1.1
   * TLSv1.3 (OUT), TLS handshake, Client hello (1):
   * TLSv1.3 (IN), TLS handshake, Server hello (2):
   * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
   * TLSv1.3 (OUT), TLS handshake, Client hello (1):
   * TLSv1.3 (IN), TLS handshake, Server hello (2):
   * TLSv1.3 (IN), TLS change cipher, Change cipher spec (1):
   * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
   * TLSv1.3 (IN), TLS handshake, Request CERT (13):
   * TLSv1.3 (IN), TLS handshake, Certificate (11):
   * TLSv1.3 (IN), TLS handshake, CERT verify (15):
   * TLSv1.3 (IN), TLS handshake, Finished (20):
   * TLSv1.3 (OUT), TLS handshake, Certificate (11):
   * TLSv1.3 (OUT), TLS handshake, Finished (20):
   * SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256 / secp256r1 / 
RSASSA-PSS
   * ALPN: server did not agree on a protocol. Uses default.
   * Server certificate:
   *  subject: CN=your.server.com
   *  start date: Mar 10 12:58:28 2026 GMT
   *  expire date: Mar 10 12:58:28 2027 GMT
   *  issuer: CN=your.server.com
   *  SSL certificate verify result: self-signed certificate (18), continuing 
anyway.
   *   Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed 
using sha256WithRSAEncryption
   * Connected to localhost (::1) port 7000
   * using HTTP/1.x
   > GET /metrics HTTP/1.1
   > Host: localhost:7000
   > User-Agent: curl/8.15.0
   > Accept: */*
   > 
   * Request completely sent off
   * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
   < HTTP/1.1 200 OK
   < Date: Wed, 11 Mar 2026 15:15:54 GMT
   < Content-Type: text/plain; version=0.0.4; charset=utf-8
   < Content-Length: 38630
   < Server: Jetty(9.4.58.v20250814)
   < 
   # HELP add_dead_watcher_stall_time_total add_dead_watcher_stall_time counter
   # TYPE add_dead_watcher_stall_time_total counter
   add_dead_watcher_stall_time_total 0.0
   # HELP approximate_data_size approximate_data_size
   # TYPE approximate_data_size gauge
   approximate_data_size 44.0
   # HELP auth_failed_count auth_failed_count
   # TYPE auth_failed_count gauge
   auth_failed_count 0.0
   # HELP avg_latency avg_latency
   # TYPE avg_latency gauge
   avg_latency 0.0
   # HELP bytes_received_count_total bytes_received_count counter
   # TYPE bytes_received_count_total counter
   bytes_received_count_total 0.0
   # HELP close_session_prep_time close_session_prep_time summary
   # TYPE close_session_prep_time summary
   close_session_prep_time{quantile="0.5"} NaN
   close_session_prep_time{quantile="0.95"} NaN
   close_session_prep_time{quantile="0.99"} NaN
   close_session_prep_time_count 0
   close_session_prep_time_sum 0.0
   # HELP cnxn_closed_without_zk_server_running_total 
cnxn_closed_without_zk_server_running counter
   # TYPE cnxn_closed_without_zk_server_running_total counter
   cnxn_closed_without_zk_server_running_total 0.0
   
   ...
   
   # HELP write_final_proc_time_ms write_final_proc_time_ms summary
   # TYPE write_final_proc_time_ms summary
   write_final_proc_time_ms{quantile="0.5"} NaN
   write_final_proc_time_ms{quantile="0.95"} NaN
   write_final_proc_time_ms{quantile="0.99"} NaN
   write_final_proc_time_ms_count 0
   write_final_proc_time_ms_sum 0.0
   # HELP znode_count znode_count
   # TYPE znode_count gauge
   znode_count 5.0
   * Connection #0 to host localhost left intact
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to