{"id":37427474,"url":"https://github.com/tilln/jmeter-sshmon","last_synced_at":"2026-01-16T06:32:09.847Z","repository":{"id":48300150,"uuid":"93689965","full_name":"tilln/jmeter-sshmon","owner":"tilln","description":"SSH Monitoring Plugin for JMeter","archived":false,"fork":false,"pushed_at":"2024-04-05T23:37:02.000Z","size":131,"stargazers_count":17,"open_issues_count":0,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-05-07T18:13:55.874Z","etag":null,"topics":["agentless","jmeter","jmeter-plugin","monitoring","ssh","ssh-client"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tilln.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-08T00:04:00.000Z","updated_at":"2024-03-23T21:38:08.000Z","dependencies_parsed_at":"2022-08-30T15:03:00.644Z","dependency_job_id":null,"html_url":"https://github.com/tilln/jmeter-sshmon","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/tilln/jmeter-sshmon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-sshmon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-sshmon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-sshmon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-sshmon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tilln","download_url":"https://codeload.github.com/tilln/jmeter-sshmon/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tilln%2Fjmeter-sshmon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentless","jmeter","jmeter-plugin","monitoring","ssh","ssh-client"],"created_at":"2026-01-16T06:32:07.145Z","updated_at":"2026-01-16T06:32:09.825Z","avatar_url":"https://github.com/tilln.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SSHMon Samples Collector [![github-actions](https://github.com/tilln/jmeter-sshmon/actions/workflows/release.yml/badge.svg)](https://github.com/tilln/jmeter-sshmon/actions/workflows/release.yml)\n\nOverview\n--------\n\nApache JMeter monitoring plugin for [agentless collection](https://en.wikipedia.org/wiki/Agentless_data_collection) and plotting of remote server metrics via [SSH connections](https://en.wikipedia.org/wiki/Secure_shell).\n\nThe output of remotely executed commands can be plotted over time and/or written to JTL file (CSV or XML format).\n\n![SSHMon Samples Collector](https://raw.githubusercontent.com/tilln/jmeter-sshmon/master/docs/sshmon_samples_collector.png)\n\nIn contrast to other plugins (such as [PerfMon](https://jmeter-plugins.org/wiki/PerfMon/)), the installation of a custom server agent is not required, just an SSH server and logon credentials.\n\nThe impact on the remote server is minimized by establishing a connection only once and reusing it.\n\nThis plugin is powered by [JMeter-Plugins](https://jmeter-plugins.org/) components.\n\nInstallation\n------------\n\n### Via [PluginsManager](https://jmeter-plugins.org/wiki/PluginsManager/)\n\nUnder tab \"Available Plugins\", select \"SSHMon Samples Collector\", then click \"Apply Changes and Restart JMeter\".\n\n### Via Package from [JMeter-Plugins.org](https://jmeter-plugins.org/)\n\nExtract the [zip package](https://jmeter-plugins.org/files/packages/tilln-sshmon-1.4.zip) into JMeter's lib directory, then restart JMeter.\n\n### Via Manual Download\n\n1. Copy the [jmeter-sshmon jar file](https://github.com/tilln/jmeter-sshmon/releases/download/1.4/jmeter-sshmon-1.4.jar) into JMeter's lib/ext directory.\n2. Copy the following dependencies into JMeter's lib directory:\n\t* [kg.apc / jmeter-plugins-cmn-jmeter](https://search.maven.org/remotecontent?filepath=kg/apc/jmeter-plugins-cmn-jmeter/0.7/jmeter-plugins-cmn-jmeter-0.7.jar)\n    * [org.apache.sshd / sshd-core](https://search.maven.org/remotecontent?filepath=org/apache/sshd/sshd-core/2.12.1/sshd-core-2.12.1.jar)\n    * [org.apache.sshd / sshd-common](https://search.maven.org/remotecontent?filepath=org/apache/sshd/sshd-common/2.12.1/sshd-common-2.12.1.jar)\n3. Restart JMeter.\n\n**Important: Make sure to remove any older jar file version than `jmeter-plugins-cmn-jmeter-0.6.jar` from JMeter's lib directory!**\n\nUsage\n-----\n\nFrom the context menu, select \"Add\" / \"Listeners\" / \"SSHMon Samples Collector\".\n\nAdd one row for each metric to be collected from a remote command, such as `sar`, `iostat`, `vmstat`, `mpstat` etc.\n\n**Important:** The command *must* return a single decimal number (integer or floating point) or it will fail!\nThat means commands that return multiple rows and/or columns of console output will have to be filtered accordingly (e.g. via `grep`, `awk`, `sed` etc).\n\n### Example\n\n|Label|Host|Port|Username|Private Key (PEM)|Password|Command|Delta|\n|-----|----|----|--------|-----------------|--------|-------|-----|\n|CPU%|127.0.0.1|22|jmeter||secret|\u003ccode\u003esar -u 1 1 \u0026#124; awk '/^Average:/{print 100-$8}'\u003c/code\u003e|\u0026#x25fb;|\n\n* Connect to localhost on TCP port 22 with username *jmeter* and password *secret*\n* Get CPU utilisation from [`sar`](http://linuxcommand.org/man_pages/sar1.html) (1 sample, 1 second)\n* Filter that output for the row starting with *Average*\n* Take the 8\u003csup\u003eth\u003c/sup\u003e column (this may vary depending on the OS) as idle percentage and calculate the difference to 100%\n* Record and/or plot the value with label *CPU%*\n\n*Note that the password is not masked so it may be useful to define a variable or property (e.g. on the command line -Juser.password=secret).*\n\n### Public Key Authentication\n\n1. Enter the username in the username field.\n2. Make the private key available in PEM format and supply the *content* in the private key field. In most cases when this comes from a file use the JMeter function [`${__FileToString(pem_file)}`](http://jmeter.apache.org/usermanual/functions.html#__FileToString).\n3. Enter the password for the private key in the password field.\n4. Make sure the public key is on the server.\n\n### Cumulative Values\n\nIn some cases the difference between sample values may be more interesting than the absolute value.\nThe *Delta* check box can be ticked to record/plot the difference from the previous sample.\n\n### Chart Generation\n\nCharts can be generated in the following ways:\n- In GUI mode, a live chart will be plotted that can be saved to an image file or copied to clipboard via right-click on the chart area.\n- In GUI mode, an output file from a previous test can be loaded via the Filename text field.\n- Without the GUI, the [\"Command-Line Graph Plotting Tool\"](https://jmeter-plugins.org/wiki/JMeterPluginsCMD/) may be used to generate charts by specifying the `--plugin-type` option like so:\n\n  ```\n  JMeterPluginsCMD.bat --plugin-type nz.co.breakpoint.jmeter.vizualizers.sshmon.SSHMonGui --input-jtl sshmon-results-filename.csv --generate-png output.png --width 800 --height 600\n  ```\n  For a full list of options refer to the [plugin documentation](https://jmeter-plugins.org/wiki/JMeterPluginsCMD/#Usage-and-Parameters).\n\n### Jump Hosts (since v1.3)\n\nSometimes the hosts to be monitored are not directly accessible from where the JMeter script runs but only through a jump host.\n\nFor this purpose, this plugin supports the SSH [ProxyJump directive](http://man.openbsd.org/ssh_config.5#ProxyJump)\nin an SSH config file.\n\nThe JMeter property `jmeter.sshmon.sshConfig` must be set to the location of such a config file.\nJump hosts cannot be configured in the plugin's user interface.\n\nExample:\n\nThe below SSH config file shows how the host `target` can be accessed via `jumphost`,\nin both cases authenticating as `user_name` with their `privatekeyfile`.\nThe credentials can be omitted from the UI config.\n\n|Label|Host |Port|Username|Private Key (PEM)|Password|Command|Delta|\n|-----|-----|----|--------|-----------------|--------|-------|-----|\n|CPU%|target|22| | | |(some command)|\n\n```\nHost target\n    User user_name\n    PreferredAuthentications publickey\n    IdentityFile ./privatekeyfile\n    ProxyJump jumphost\nHost jumphost\n    User user_name\n    PreferredAuthentications publickey\n    IdentityFile ./privatekeyfile\n```\n\nIf the private key file is password protected, the JMeter property `jmeter.sshmon.identityPassword`\ncan be used to define this password.\n(Different passwords for different files are not currently supported.)\n\nConfiguration\n-------------\n\n### Chart Settings\n\nThe tabs *Charts*, *Rows*, and *Settings* are only relevant in GUI mode.\nFor details refer to the [JMeter-Plugins wiki](https://jmeter-plugins.org/wiki/SettingsPanel/).\n\n### JMeter Properties\n\nThe following properties control the plugin behaviour:\n  * `jmeter.sshmon.knownHosts`: Filename of a known_hosts file containing public keys of trusted remote servers (in OpenSSH format).\n    If defined, connections to unknown hosts will be rejected (via `StrictHostKeyChecking=yes`).\n    If undefined, connections to unknown hosts will be established (via `StrictHostKeyChecking=no`).\n    Default: undefined.\n  * `jmeter.sshmon.interval`: Metrics collection interval in milliseconds.\n    This is inclusive of the execution time of the remote commands.\n    Default: 1 second.\n  * `jmeter.sshmon.forceOutputFile` (true/false): Makes sure JMeter writes metrics to CSV file in the current directory if no filename is specified.\n    Default: false.\n  * `jmeter.sshmon.locale` (since v1.2; in ISO format, e.g. `en_NZ`): Allows to override the locale for parsing numbers returned from the monitored host, \n    in case its locale is different from the JVM running the plugin.\n  * `jmeter.sshmon.sshConfig` (since v1.3): Location of an optional SSH Config file to use.\n    If undefined, an existing file (e.g. in `~/.ssh/config`) will be ignored.\n  * `jmeter.sshmon.identityPassword` (since v1.3): Password for identity files (encrypted private key).\n\nLimitations\n-----------\n\n* Samples are collected by a single thread, so if a command takes more than an insignificant amount of time to run, the frequency of sample collection will be limited.\nEven more so if more than one command is sampled. In this case, use a separate monitor for each sample command.\n* When a JMeter test ends, this plugin will not interrupt the collector thread but let the current sample finish before stopping.\nThis may take longer than the JMeter engine [waits](https://jmeter.apache.org/usermanual/get-started.html#shutdown) in headless (non-GUI) mode.\nIn this case, increase the JMeter property `jmeter.exit.check.pause`.\n* Cryptographic algorithms used by SSH for key exchange, signature and encryption are negotiated between client and server \nwhen a session is established. The algorithms supported by the client are determined by the Java platform's Security Provider(s).\nThe default implementation Java Cryptography Extension (JCE) does not support all modern algorithms (e.g. Ed25519)\nand not all key strengths without the [JCE Unlimited Strength Policy](https://www.oracle.com/java/technologies/javase-jce-all-downloads.html).\nAlternative providers can be used to overcome this limitation, such as [BouncyCastle](https://www.bouncycastle.org/)\nor [EdDSA](https://github.com/str4d/ed25519-java), by simply placing their jar file in JMeter's lib directory.\n* Only a single password can be provided for encrypted private key files (`jmeter.sshmon.identityPassword`),\nso multiple files are not supported unless they use the same password.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftilln%2Fjmeter-sshmon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftilln%2Fjmeter-sshmon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftilln%2Fjmeter-sshmon/lists"}