johrstrom / jmeter-prometheus-plugin

A Prometheus Listener for Apache JMeter that exposes results in an http API
Apache License 2.0
168 stars 111 forks source link

Distributed testing metrics not available #87

Closed beemi closed 4 years ago

beemi commented 4 years ago

Hi,

Plugin working as expected with out REMOTE hosts(slave IP's).

Without Remote IP's (WORKS)

jmeter \ -Dprometheus.ip=0.0.0.0 \ -f \ -n -t Health_Check.jmx

So I am running a test with few slave IP's and localhost:9270 is not reachable

JMeter Master running as below with Remote IP's (NOT WORKING)

jmeter \ -Dprometheus.ip=0.0.0.0 \ -f \ -n -t Health_Check.jmx \ -R{SLAVE_IP_1},{SLAVE_IP_2}

JMeter Slave's running as below

jmeter-server \ -Dserver.rmi.ssl.disable=true \ -Dserver.rmi.localport=50000 \ -Dserver_port=1099

Note: Plugin jar has been available on both master and slave's

Similar issue: https://github.com/johrstrom/jmeter-prometheus-plugin/issues/85

johrstrom commented 4 years ago

Hi! Sorry, I commented on #85 if they're similar which it looks like they are.

beemi commented 4 years ago

Thanks, do we need to pass -Dprometheus.ip=0.0.0.0against JMeter-server also?

beemi commented 4 years ago

JAR 0.6.0 has been available in both master and slave Pods at /lib/ext location, this is the same issue https://github.com/johrstrom/jmeter-prometheus-plugin/issues/67

If its distributed testing localhost:9270 is not reachable.

JMeter server POD logs

2020-08-26 20:55:20,312 INFO o.a.j.u.JMeterUtils: Setting Locale to en_EN 2020-08-26 20:55:20,432 INFO o.a.j.JMeter: Loading user properties from: user.properties 2020-08-26 20:55:20,432 INFO o.a.j.JMeter: Loading system properties from: system.properties 2020-08-26 20:55:20,433 INFO o.a.j.JMeter: Setting System property: server_port=1099 2020-08-26 20:55:20,433 INFO o.a.j.JMeter: Setting System property: server.rmi.ssl.disable=true 2020-08-26 20:55:20,433 INFO o.a.j.JMeter: Setting System property: server.rmi.localport=50000 2020-08-26 20:55:20,433 INFO o.a.j.JMeter: Setting System property: server_port=1099 2020-08-26 20:55:20,435 INFO o.a.j.JMeter: Copyright (c) 1998-2020 The Apache Software Foundation 2020-08-26 20:55:20,435 INFO o.a.j.JMeter: Version 5.3 2020-08-26 20:55:20,435 INFO o.a.j.JMeter: java.version=11.0.6 2020-08-26 20:55:20,435 INFO o.a.j.JMeter: java.vm.name=OpenJDK 64-Bit Server VM 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: os.name=Linux 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: os.arch=amd64 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: os.version=4.19.76-linuxkit 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: file.encoding=UTF-8 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: java.awt.headless=true 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: Max memory =1073741824 2020-08-26 20:55:20,436 INFO o.a.j.JMeter: Available Processors =4 2020-08-26 20:55:20,450 INFO o.a.j.JMeter: Default Locale=English (EN) 2020-08-26 20:55:20,451 INFO o.a.j.JMeter: JMeter Locale=English (EN) 2020-08-26 20:55:20,451 INFO o.a.j.JMeter: JMeterHome=/jmeter/apache-jmeter-5.3 2020-08-26 20:55:20,451 INFO o.a.j.JMeter: user.dir =/jmeter/apache-jmeter-5.3/bin 2020-08-26 20:55:20,451 INFO o.a.j.JMeter: PWD =/jmeter/apache-jmeter-5.3/bin 2020-08-26 20:55:20,451 INFO o.a.j.JMeter: IP: MY IP Name: MY IP FullName: MY FULL NAME 2020-08-26 20:55:20,468 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true' 2020-08-26 20:55:20,468 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true' 2020-08-26 20:55:20,656 INFO o.a.j.e.RemoteJMeterEngineImpl: Starting backing engine on 1099 2020-08-26 20:55:20,657 INFO o.a.j.r.RmiUtils: System property 'java.rmi.server.hostname' is not defined, using localHost address 2020-08-26 20:55:20,657 INFO o.a.j.r.RmiUtils: Local IP address=MY IP 2020-08-26 20:55:20,657 INFO o.a.j.e.RemoteJMeterEngineImpl: IP address is a site-local address; this may cause problems with remote access. Can be overridden by defining the system property 'java.rmi.server.hostname' - see jmeter-server script file 2020-08-26 20:55:20,658 INFO o.a.j.e.RemoteJMeterEngineImpl: Creating RMI registry (server.rmi.create=true) 2020-08-26 20:55:20,658 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true' 2020-08-26 20:55:20,658 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true' 2020-08-26 20:55:20,681 INFO o.a.j.e.RemoteJMeterEngineImpl: Bound to RMI registry on port 1099 2020-08-26 20:55:22,575 INFO o.a.j.s.SampleEvent: List of sample_variables: [] 2020-08-26 20:55:22,660 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/html is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser 2020-08-26 20:55:22,660 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for application/xhtml+xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser 2020-08-26 20:55:22,660 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for application/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser 2020-08-26 20:55:22,660 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser 2020-08-26 20:55:22,660 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser 2020-08-26 20:55:22,661 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/css is org.apache.jmeter.protocol.http.parser.CssParser 2020-08-26 20:55:22,706 INFO o.a.j.s.StandardSampleSender: Using StandardSampleSender for this test run 2020-08-26 20:55:22,736 INFO o.a.j.e.RemoteJMeterEngineImpl: Creating JMeter engine on host jmeter-load-tests_slave_1 base '.' 2020-08-26 20:55:22,737 INFO o.a.j.e.RemoteJMeterEngineImpl: Remote client host: MY IP 2020-08-26 20:55:22,745 INFO o.a.j.s.FileServer: Default base='/jmeter/apache-jmeter-5.3/bin' 2020-08-26 20:55:22,748 INFO o.a.j.s.FileServer: Set new base='.' 2020-08-26 20:55:22,751 INFO o.a.j.e.StandardJMeterEngine: Applying properties {} 2020-08-26 20:55:22,752 INFO o.a.j.e.RemoteJMeterEngineImpl: Running test 2020-08-26 20:55:22,763 INFO o.a.j.e.StandardJMeterEngine: Running the test! 2020-08-26 20:55:22,764 INFO o.a.j.s.SampleEvent: List of sample_variables: [] 2020-08-26 20:55:22,777 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must contain the string: '.functions.' 2020-08-26 20:55:22,777 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must not contain the string: '.gui.' 2020-08-26 20:55:23,200 WARN c.g.j.l.PrometheusListener: Collector registry has not yet been initialized, doing it now 2020-08-26 20:55:23,203 DEBUG c.g.j.c.JMeterCollectorRegistry: Creating prometheus collector registry 2020-08-26 20:55:23,233 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the response time for a jmeter, collector.metric_name: jsr223_rt_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, ] 2020-08-26 20:55:23,237 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the response time for a jmeter, collector.metric_name: jsr223_rt_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, ] 2020-08-26 20:55:23,239 DEBUG c.g.j.l.PrometheusListener: added jsr223_rt_as_hist to list of collectors 2020-08-26 20:55:23,239 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the response time for a jmeter as summary, collector.metric_name: jsr223_rt_as_summary, collector.type: SUMMARY, collector.labels: [category, label, code], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: ResponseTime, ] 2020-08-26 20:55:23,241 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the response time for a jmeter as summary, collector.metric_name: jsr223_rt_as_summary, collector.type: SUMMARY, collector.labels: [category, label, code], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: ResponseTime, ] 2020-08-26 20:55:23,241 DEBUG c.g.j.l.PrometheusListener: added jsr223_rt_as_summary to list of collectors 2020-08-26 20:55:23,241 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the total number of samples, collector.metric_name: jsr223_count_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: CountTotal, ] 2020-08-26 20:55:23,241 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the total number of samples, collector.metric_name: jsr223_count_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: CountTotal, ] 2020-08-26 20:55:23,242 DEBUG c.g.j.l.PrometheusListener: added jsr223_count_total to list of collectors 2020-08-26 20:55:23,242 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the total number of successful samples, collector.metric_name: jsr223_success_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessTotal, ] 2020-08-26 20:55:23,243 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the total number of successful samples, collector.metric_name: jsr223_success_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessTotal, ] 2020-08-26 20:55:23,243 DEBUG c.g.j.l.PrometheusListener: added jsr223_success_total to list of collectors 2020-08-26 20:55:23,243 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the response size for a jmeter sample, collector.metric_name: jsr223_rsize_as_hist, collector.type: HISTOGRAM, collector.labels: [], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: ResponseSize, ] 2020-08-26 20:55:23,244 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the response size for a jmeter sample, collector.metric_name: jsr223_rsize_as_hist, collector.type: HISTOGRAM, collector.labels: [], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: ResponseSize, ] 2020-08-26 20:55:23,244 DEBUG c.g.j.l.PrometheusListener: added jsr223_rsize_as_hist to list of collectors 2020-08-26 20:55:23,244 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: success ratio of the can, collector.metric_name: jsr223_can_fail, collector.type: SUCCESS_RATIO, collector.labels: [], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessRatio, ] 2020-08-26 20:55:23,246 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: success ratio of the can, collector.metric_name: jsr223_can_fail, collector.type: SUCCESS_RATIO, collector.labels: [], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessRatio, ] 2020-08-26 20:55:23,246 DEBUG c.g.j.l.PrometheusListener: added jsr223_can_fail to list of collectors 2020-08-26 20:55:23,246 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the latency(ttfb) for jsr, collector.metric_name: jsr223_latency_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: Latency, ] 2020-08-26 20:55:23,246 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the latency(ttfb) for jsr, collector.metric_name: jsr223_latency_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: Latency, ] 2020-08-26 20:55:23,246 DEBUG c.g.j.l.PrometheusListener: added jsr223_latency_as_hist to list of collectors 2020-08-26 20:55:23,246 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the ideal time for a jsr223, collector.metric_name: jsr223_idle_time, collector.type: SUMMARY, collector.labels: [], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: IdleTime, ] 2020-08-26 20:55:23,248 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the ideal time for a jsr223, collector.metric_name: jsr223_idle_time, collector.type: SUMMARY, collector.labels: [], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: IdleTime, ] 2020-08-26 20:55:23,249 DEBUG c.g.j.l.PrometheusListener: added jsr223_idle_time to list of collectors 2020-08-26 20:55:23,249 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: default help string, collector.metric_name: jsr223_assertions, collector.type: SUCCESS_RATIO, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.listen_to: assertions, listener.collector.measuring: SuccessRatio, ] 2020-08-26 20:55:23,249 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: default help string, collector.metric_name: jsr223_assertions, collector.type: SUCCESS_RATIO, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.listen_to: assertions, listener.collector.measuring: SuccessRatio, ] 2020-08-26 20:55:23,249 DEBUG c.g.j.l.PrometheusListener: added jsr223_assertions to list of collectors 2020-08-26 20:55:23,249 WARN c.g.j.l.PrometheusListener: Prometheus server has not yet been initialized, doing it now 2020-08-26 20:55:23,251 DEBUG c.g.j.l.PrometheusServer: Creating Prometheus Server 2020-08-26 20:55:23,304 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin 2020-08-26 20:55:23,305 INFO o.a.j.e.StandardJMeterEngine: Starting 0 threads for group bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin. 2020-08-26 20:55:23,305 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error 2020-08-26 20:55:23,326 INFO o.a.j.t.JMeterThread: Thread started: jmeter-load-tests_slave_1-bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin-ThreadStarter 1-1 2020-08-26 20:55:23,330 INFO o.a.j.s.SampleResult: Note: Sample TimeStamps are START times 2020-08-26 20:55:23,330 INFO o.a.j.s.SampleResult: sampleresult.default.encoding is set to ISO-8859-1 2020-08-26 20:55:23,330 INFO o.a.j.s.SampleResult: sampleresult.useNanoTime=true 2020-08-26 20:55:23,330 INFO o.a.j.s.SampleResult: sampleresult.nanoThreadSleep=5000 2020-08-26 20:55:23,331 INFO c.b.j.t.a.ArrivalsThreadGroup: Got first arrival 2020-08-26 20:55:23,332 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started 2020-08-26 20:55:23,362 INFO o.a.j.p.h.s.HTTPHCAbstractImpl: Local host = 174c8795e161 2020-08-26 20:55:23,375 INFO o.a.j.p.h.s.HTTPHC4Impl: HTTP request retry count = 0 2020-08-26 20:55:23,817 INFO o.a.j.u.JsseSSLManager: Using default SSL protocol: TLS 2020-08-26 20:55:23,817 INFO o.a.j.u.JsseSSLManager: SSL session context: per-thread 2020-08-26 20:56:01,321 INFO o.a.j.t.JMeterThread: Thread started: jmeter-load-tests_slave_1-bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin-ThreadStarter 1-2 2020-08-26 20:58:23,313 INFO c.b.j.t.a.ArrivalsThreadStarter: Duration limit reached, no more arrivals needed, had arrivals: 360 2020-08-26 20:58:23,360 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test 2020-08-26 20:58:23,361 INFO c.b.j.t.a.ArrivalsThreadGroup: Done 360 arrivals, 360 completions, 0 abandonments 2020-08-26 20:58:23,361 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_rt_as_hist 2020-08-26 20:58:23,361 INFO o.a.j.t.JMeterThread: Thread is done: jmeter-load-tests_slave_1-bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin-ThreadStarter 1-1 2020-08-26 20:58:23,362 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_count_total 2020-08-26 20:58:23,362 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_latency_as_hist 2020-08-26 20:58:23,362 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_success_total 2020-08-26 20:58:23,362 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_assertions 2020-08-26 20:58:23,362 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_can_fail 2020-08-26 20:58:23,363 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_rsize_as_hist 2020-08-26 20:58:23,363 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_rt_as_summary 2020-08-26 20:58:23,363 DEBUG c.g.j.c.JMeterCollectorRegistry: unregistering jsr223_idle_time 2020-08-26 20:58:23,364 INFO o.a.j.t.JMeterThread: Thread is done: jmeter-load-tests_slave_1-bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin-ThreadStarter 1-2 2020-08-26 20:58:23,365 INFO o.a.j.t.JMeterThread: Thread finished: jmeter-load-tests_slave_1-bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin-ThreadStarter 1-2 2020-08-26 20:58:23,363 INFO o.a.j.t.JMeterThread: Thread finished: jmeter-load-tests_slave_1-bzm - Arrivals Thread Group [HTTP] - Prometheus_plugin-ThreadStarter 1-1 2020-08-26 20:58:23,372 INFO o.a.j.s.StandardSampleSender: Test Ended on jmeter-load-tests_slave_1 2020-08-26 20:58:23,378 INFO o.a.j.e.StandardJMeterEngine: Test has ended on host jmeter-load-tests_slave_1

beemi commented 4 years ago

Hi! Sorry, I commented on #85 if they're similar which it looks like they are.

It's not the same issue #85, don't see ClassNotFoundException from my end.

beemi commented 4 years ago

@johrstrom @chiabre Can some one help me on this.

chiabre commented 4 years ago

Hi, i cannot test it right now but in the past i had the plugin working in a distributed test with the following configuration.

JMeter Slave1 jmeter-server -n -Djava.rmi.server.hostname={ip_slave1} -Jserver.rmi.ssl.disable=true -JGmode=asych -JGasynch.batch.queue.size=200

JMeter Slave2 jmeter-server -n -Djava.rmi.server.hostname={ip_slave2} -Jserver.rmi.ssl.disable=true -JGmode=asych -JGasynch.batch.queue.size=200

JMeter Master jmeter -n -t "{script.jmx}" -R{ip_slave1:1664},{ip_slave2:1664} -Jserver.rmi.ssl.disable=true -l "{log.jtl}"

I was working on 3 distinct fiscal servers and I had no need to bind jmeter to all the interfaces.Prometheus was configured to scrape the data only from the 2 slaves on default plugin port. If you are running on a different set-up (e.g. containerized jmeter or single box) you have to adapt the above configuration accordingly.

Hope this helps

Il giorno ven 28 ago 2020 alle ore 00:55 Rajasekhar Reddy Beemireddy < notifications@github.com> ha scritto:

@johrstrom https://github.com/johrstrom @chiabre https://github.com/chiabre Can some one help me on this.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/johrstrom/jmeter-prometheus-plugin/issues/87#issuecomment-682231296, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB2WL4HEJTRNPVJSLQN6EEDSC3P57ANCNFSM4QMEUCTQ .

johrstrom commented 4 years ago

From the logs it looks like everything is OK.

If you're running in a container you need to expose the port though docker (with -p 9270:9270) and I believe containers do need the -Dprometheus.ip=0.0.0.0 to ensure they're reachable.

beemi commented 4 years ago

From the logs it looks like everything is OK.

If you're running in a container you need to expose the port though docker (with -p 9270:9270) and I believe containers do need the -Dprometheus.ip=0.0.0.0 to ensure they're reachable.

Yes, its work without passing Remote IP's, I have exposed 9270 port for both Master and Slave containers, the issue is if I pass -R{SLAVE_IP_1},{SLAVE_IP_2}... I am not able to reach localhost:9270

Without distribution testing the metrics work expected.

JMeter Master Command.

jmeter \ -Dprometheus.ip=0.0.0.0 \ -Jserver.rmi.ssl.disable=true \ -f \ -n -t Healthcheck.jmx \ -R$combined

JMeter Slave commands

jmeter-server \ -JGmode=asych \ -JGasynch.batch.queue.size=200 \ -Dserver.rmi.ssl.disable=true \ -Dserver.rmi.localport=${JMETER_SLAVE_RMI_LOCAL_PORT} \ -Dserver_port=${JMETER_SLAVE_SERVER_PORT}

Result

http://localhost:9270/. not reachable

beemi commented 4 years ago

Hi, i cannot test it right now but in the past i had the plugin working in a distributed test with the following configuration. JMeter Slave1 jmeter-server -n -Djava.rmi.server.hostname={ip_slave1} -Jserver.rmi.ssl.disable=true -JGmode=asych -JGasynch.batch.queue.size=200 JMeter Slave2 jmeter-server -n -Djava.rmi.server.hostname={ip_slave2} -Jserver.rmi.ssl.disable=true -JGmode=asych -JGasynch.batch.queue.size=200 JMeter Master jmeter -n -t "{script.jmx}" -R{ip_slave1:1664},{ip_slave2:1664} -Jserver.rmi.ssl.disable=true -l "{log.jtl}" I was working on 3 distinct fiscal servers and I had no need to bind jmeter to all the interfaces.Prometheus was configured to scrape the data only from the 2 slaves on default plugin port. If you are running on a different set-up (e.g. containerized jmeter or single box) you have to adapt the above configuration accordingly. Hope this helps Il giorno ven 28 ago 2020 alle ore 00:55 Rajasekhar Reddy Beemireddy < notifications@github.com> ha scritto: @johrstrom https://github.com/johrstrom @chiabre https://github.com/chiabre Can some one help me on this. — You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub <#87 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB2WL4HEJTRNPVJSLQN6EEDSC3P57ANCNFSM4QMEUCTQ .

Thanks @chiabre

Yes JMeter and Slave containers are running in a single server, JMeter server logs

2020-08-28 14:28:59,236 WARN c.g.j.l.PrometheusListener: Collector registry has not yet been initialized, doing it now 2020-08-28 14:28:59,239 DEBUG c.g.j.c.JMeterCollectorRegistry: Creating prometheus collector registry

2020-08-28 14:28:59,287 WARN c.g.j.l.PrometheusListener: Prometheus server has not yet been initialized, doing it now 2020-08-28 14:28:59,289 DEBUG c.g.j.l.PrometheusServer: Creating Prometheus Server

2020-08-28 14:28:59,236 WARN c.g.j.l.PrometheusListener: Collector registry has not yet been initialized, doing it now 2020-08-28 14:28:59,239 DEBUG c.g.j.c.JMeterCollectorRegistry: Creating prometheus collector registry 2020-08-28 14:28:59,269 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the response time for a jmeter, collector.metric_name: jsr223_rt_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, ] 2020-08-28 14:28:59,274 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the response time for a jmeter, collector.metric_name: jsr223_rt_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, ] 2020-08-28 14:28:59,276 DEBUG c.g.j.l.PrometheusListener: added jsr223_rt_as_hist to list of collectors 2020-08-28 14:28:59,276 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the response time for a jmeter as summary, collector.metric_name: jsr223_rt_as_summary, collector.type: SUMMARY, collector.labels: [category, label, code], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: ResponseTime, ] 2020-08-28 14:28:59,278 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the response time for a jmeter as summary, collector.metric_name: jsr223_rt_as_summary, collector.type: SUMMARY, collector.labels: [category, label, code], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: ResponseTime, ] 2020-08-28 14:28:59,278 DEBUG c.g.j.l.PrometheusListener: added jsr223_rt_as_summary to list of collectors 2020-08-28 14:28:59,278 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the total number of samples, collector.metric_name: jsr223_count_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: CountTotal, ] 2020-08-28 14:28:59,278 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the total number of samples, collector.metric_name: jsr223_count_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: CountTotal, ] 2020-08-28 14:28:59,279 DEBUG c.g.j.l.PrometheusListener: added jsr223_count_total to list of collectors 2020-08-28 14:28:59,279 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the total number of successful samples, collector.metric_name: jsr223_success_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessTotal, ] 2020-08-28 14:28:59,279 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the total number of successful samples, collector.metric_name: jsr223_success_total, collector.type: COUNTER, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessTotal, ] 2020-08-28 14:28:59,280 DEBUG c.g.j.l.PrometheusListener: added jsr223_success_total to list of collectors 2020-08-28 14:28:59,280 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the response size for a jmeter sample, collector.metric_name: jsr223_rsize_as_hist, collector.type: HISTOGRAM, collector.labels: [], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: ResponseSize, ] 2020-08-28 14:28:59,281 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the response size for a jmeter sample, collector.metric_name: jsr223_rsize_as_hist, collector.type: HISTOGRAM, collector.labels: [], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: ResponseSize, ] 2020-08-28 14:28:59,281 DEBUG c.g.j.l.PrometheusListener: added jsr223_rsize_as_hist to list of collectors 2020-08-28 14:28:59,281 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: success ratio of the can, collector.metric_name: jsr223_can_fail, collector.type: SUCCESS_RATIO, collector.labels: [], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessRatio, ] 2020-08-28 14:28:59,282 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: success ratio of the can, collector.metric_name: jsr223_can_fail, collector.type: SUCCESS_RATIO, collector.labels: [], collector.quantiles_or_buckets: , listener.collector.measuring: SuccessRatio, ] 2020-08-28 14:28:59,283 DEBUG c.g.j.l.PrometheusListener: added jsr223_can_fail to list of collectors 2020-08-28 14:28:59,283 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the latency(ttfb) for jsr, collector.metric_name: jsr223_latency_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: Latency, ] 2020-08-28 14:28:59,283 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the latency(ttfb) for jsr, collector.metric_name: jsr223_latency_as_hist, collector.type: HISTOGRAM, collector.labels: [label], collector.quantiles_or_buckets: 100,500,1000,3000, listener.collector.measuring: Latency, ] 2020-08-28 14:28:59,283 DEBUG c.g.j.l.PrometheusListener: added jsr223_latency_as_hist to list of collectors 2020-08-28 14:28:59,283 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: the ideal time for a jsr223, collector.metric_name: jsr223_idle_time, collector.type: SUMMARY, collector.labels: [], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: IdleTime, ] 2020-08-28 14:28:59,286 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: the ideal time for a jsr223, collector.metric_name: jsr223_idle_time, collector.type: SUMMARY, collector.labels: [], collector.quantiles_or_buckets: 0.75,0.5|0.95,0.1|0.99,0.01, listener.collector.measuring: IdleTime, ] 2020-08-28 14:28:59,286 DEBUG c.g.j.l.PrometheusListener: added jsr223_idle_time to list of collectors 2020-08-28 14:28:59,286 DEBUG c.g.j.l.PrometheusListener: Creating collector from configuration: [collector.help: default help string, collector.metric_name: jsr223_assertions, collector.type: SUCCESS_RATIO, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.listen_to: assertions, listener.collector.measuring: SuccessRatio, ] 2020-08-28 14:28:59,286 DEBUG c.g.j.c.JMeterCollectorRegistry: created and registered [collector.help: default help string, collector.metric_name: jsr223_assertions, collector.type: SUCCESS_RATIO, collector.labels: [label], collector.quantiles_or_buckets: , listener.collector.listen_to: assertions, listener.collector.measuring: SuccessRatio, ] 2020-08-28 14:28:59,287 DEBUG c.g.j.l.PrometheusListener: added jsr223_assertions to list of collectors 2020-08-28 14:28:59,287 WARN c.g.j.l.PrometheusListener: Prometheus server has not yet been initialized, doing it now 2020-08-28 14:28:59,289 DEBUG c.g.j.l.PrometheusServer: Creating Prometheus Server

johrstrom commented 4 years ago

Hi, sorry let's focus our discussion in this issue just to bc it's still open.

What is the command you're running to start the containers (or the compose file if that's the case)? Clearly they can communicate on the JMX port, but the http port doesn't seem to be open.

beemi commented 4 years ago

Hi,

I am using docker-compose up --build --scale slave=5

This is my docker-compose.yml, I do expose 9270 port in both Master and Slave Dockerfiles but didn't do port mapping for Slave service because it will scale up to n number.

`version: '3.5'

services:

master: build: jmeter-master/ container_name: jmeter-master-container image: jmeter-master ports:

networks: jmeternetwork:`

JMeter Slave CMD

jmeter-server \ -Dprometheus.ip=0.0.0.0 \ -JGmode=asych \ -JGasynch.batch.queue.size=200 \ -Dserver.rmi.ssl.disable=true \ -Dserver.rmi.localport=50000 \ -Dserver_port=1099

JMeter Master CMD

jmeter \ -Dprometheus.ip=0.0.0.0 \ -Dclient.rmi.localport=60000 \ -Jserver.rmi.ssl.disable=true \ -f \ -n -t HealthPage.jmx \ -l /jmeter-results/output.csv \ -e -o /jmeter-results/ \ -R$combined

beemi commented 4 years ago

JMeter Master docker port mapping

image

JMeter Slave docker (Ports are not mapped)

image

johrstrom commented 4 years ago

Well you can only bind a port once. The main runner doesn't need 9270 because in a distributed setup it won't start this listener. If you man N minions you probably need to bind to 9270 + n where n is the minion instance number. As an example, that 2nd minion you have shown would bind to 9272 and be configured accordingly.

That said, you've added complexity here by running distributing mode on a single host. I'm not sure if this prep for a docker swarm situation (or what this UI is like AWS container service?), but even in that case, things would change because when minions are on different hosts they can all use the same port number.

If you have only one host, you're better off just running a single instance of jmeter for performance and for complexity in your setup. There's a performance penalty for minions having to communicating back to the main instance, but what's the benefit of using distributed mode on a single host?

beemi commented 4 years ago

Thanks @johrstrom

Unfortunately can't spin minions in different hosts due to capacity of the hardware.

We have a requirement to download 600K files so I am trying to download with one instance (Master), got out of memory exception, that's the reason I have to spin up n number of slave containers for load injection.

Yes its works with single JMeter instance against the host, I have configured Grafana dashboard too.

I will try to increment the port number using ansible for n slaves and see if that works but in future, we try to spin up against different hosts.

Once again thanks for your help, I will close this