OS Manuals

/usr/bin/fortiotel

FIPS-enabled Fortio load testing tool and echo server with OpenTelemetry tracing

From fortiotel-fips 1.76.0-r3 (enterprise-packages), captured 2026-11-09 by running fortiotel --help (exit 1). permalink

{"ts":1794235501.043298,"level":"info","r":1,"file":"scli.go","line":124,"msg":"Starting","command":"Fortio OTEL variant","version":"1.76.0+dirty  go1.27.3 amd64 linux","go-max-procs":64}
Fortio OTEL variant 1.76.0+dirty usage:
	fortiotel command [flags] target
where command is one of: load (load testing), server (starts ui, rest api,
 http-echo, redirect, proxies, tcp-echo, udp-echo and grpc ping servers),
 tcp-echo (only the tcp-echo server), udp-echo (only udp-echo server),
 report (report only UI server), redirect (only the redirect server),
 proxies (only the -M and -P configured proxies), grpcping (gRPC client),
 or curl (single URL debug), or nc (single tcp or udp:// connection),
 or script (interactive grol script mode or script file),
 or version (prints the full version and build details).
where target is a URL (http load tests) or host:port (grpc health test),
 or tcp://host:port (tcp load test), or udp://host:port (udp load test).
or 1 of the special arguments
	/usr/bin/fortiotel {help|envhelp|version|buildinfo}
flags:
  -H key:value
    	Additional HTTP header(s) or gRPC metadata. Multiple key:value pairs can be passed using multiple -H.
  -L	Follow redirects (implies -std-client) - do not use for load test
  -M value
    	HTTP multi proxy to run, e.g -M "localport1 baseDestURL1 baseDestURL2" -M ...
  -P value
    	TCP proxies to run, e.g -P "localport1 dest_host1:dest_port1" -P "[::1]:0 www.google.com:443" ...
  -X string
    	HTTP method to use instead of GET/POST depending on payload/content-type
  -a	Automatically save JSON result with filename based on labels & timestamp (default true)
  -abort-on int
    	HTTP status code that if encountered aborts the run. e.g., 503 or -1 for socket errors.
  -access-log-file path
    	file path to log all requests to. Maybe have performance impacts
  -access-log-format format
    	format for access log. Supported values: [json, influx] (default "json")
  -allow-initial-errors
    	Allow and don't abort on initial warmup errors
  -b3multi
    	Set to use b3 multi header propagation instead of traceparent (default true)
  -b3single
    	Set to use b3 single header propagation instead of traceparent
  -base-url URL
    	base URL used as prefix for data/index.tsv generation. (when empty, the URL from the first request is used)
  -c int
    	Number of connections/goroutine/threads (default 4)
  -cacert Path
    	Path to a custom CA certificate file to be used for the TLS client connections, if empty, use https:// prefix for standard internet/system CAs
  -calc-qps
    	Calculate the qps based on number of requests (-n) and duration (-t)
  -cert Path
    	Path to the certificate file to be used for client or server TLS
  -compression
    	Enable HTTP compression
  -config-dir directory
    	Config directory to watch for dynamic flag changes
  -config-port port
    	Config port to open for dynamic flag UI/api
  -connection-reuse min:max
    	Range min:max for the max number of connections to reuse for each thread, default to unlimited. e.g. 10:30 means randomly choose a max connection reuse threshold between 10 and 30 requests.
  -content-type string
    	Sets HTTP content type. Setting this value switches the request method from GET to POST.
  -curl
    	Just fetch the content once
  -curl-stdout-headers
    	Restore pre 1.22 behavior where HTTP headers of the fast client are output to stdout in curl mode. now stderr by default.
  -data-dir Directory
    	Directory where JSON results are stored/read (default ".")
  -dns-method method
    	When a name resolves to multiple ip, which method to pick: cached-rr for cached round-robin, rnd for random, first for first answer (pre 1.30 behavior), rr for round-robin. (default cached-rr)
  -echo-debug-path URI
    	http echo server URI for debug, empty turns off that part (more secure) (default "/debug")
  -echo-server-default-params value
    	Default parameters/querystring to use if there isn't one provided explicitly. E.g "status=404&delay=3s"
  -gomaxprocs int
    	Setting for runtime.GOMAXPROCS, < 1 doesn't change the default
  -grpc
    	Use gRPC (health check by default, add -ping for ping) for load testing
  -grpc-compression
    	Enable gRPC compression
  -grpc-max-streams uint
    	MaxConcurrentStreams for the gRPC server. Default (0) is to leave the option unset.
  -grpc-method string
    	Fully-qualified gRPC method to call (Service/Method). Service must have reflection enabled.
  -grpc-ping-delay duration
    	gRPC ping delay in response
  -grpc-port port
    	grpc server port. Can be in the form of host:port, ip:port or port or /unix/domain/path or "disabled" to not start the gRPC server. (default "8079")
  -h2
    	Attempt to use HTTP/2.0 / h2 (instead of HTTP/1.1) for both TLS and h2c (default true)
  -halfclose
    	When not keepalive, whether to half close the connection (only for fast http)
  -health
    	gRPC ping client mode: use health instead of ping
  -healthservice string
    	which service string to pass to health check
  -http-port port
    	http-echo server port. Can be in the form of host:port, ip:port, port or /unix/domain/path or "disabled". (default "8080")
  -http1.0
    	Use HTTP/1.0 (instead of HTTP/1.1)
  -httpbufferkb kbytes
    	Size of the buffer (max data size) for the optimized HTTP client in kbytes (default 128)
  -httpccch
    	Check for Connection: Close Header
  -https-insecure
    	Long form of the -k flag
  -init code
    	grol code to run before the script (for instance to set some arguments)
  -jitter
    	set to true to de-synchronize parallel clients' by 10%
  -json path
    	JSON output to provided file path or '-' for stdout (empty = no json output, unless -a is used)
  -k	Do not verify certs in HTTPS/TLS/gRPC connections
  -keepalive
    	Keep connection alive (only for fast HTTP/1.1) (default true)
  -key Path
    	Path to the key file matching the -cert
  -labels string
    	Additional config data/labels to add to the resulting JSON, defaults to target URL and hostname
  -log-errors
    	Log HTTP non-2xx/418 status codes as they occur (default true)
  -logger-file-line
    	Filename and line numbers emitted in JSON logs, use -logger-file-line=false to disable (default true)
  -logger-force-color
    	Force color output even if stderr isn't a terminal
  -logger-goroutine
    	GoroutineID emitted in JSON/color logs, use -logger-goroutine=false to disable (default true)
  -logger-json
    	Log in JSON format, use -logger-json=false to disable (default true)
  -logger-no-color
    	Prevent colorized output even if stderr is a terminal
  -logger-timestamp
    	Timestamps emitted in JSON logs, use -logger-timestamp=false to disable (default true)
  -loglevel level
    	log level, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)
  -max-echo-delay value
    	Maximum sleep time for delay= echo server parameter. dynamic flag. (default 1.5s)
  -maxpayloadsizekb Kbytes
    	MaxPayloadSize is the maximum size of payload to be generated by the EchoHandler size= argument. In Kbytes. (default 256)
  -mtls
    	Require client certificate signed by -cacert for client connections
  -multi-mirror-origin
    	Mirror the request URL to the target for multi proxies (-M) (default true)
  -multi-serial-mode
    	Multi server (-M) requests one at a time instead of parallel mode
  -n int
    	Run for exactly this number of calls instead of duration. Default (0) is to use duration (-t). Default is 1 when used as gRPC ping count.
  -nc-dont-stop-on-eof
    	in netcat (nc) mode, don't abort as soon as remote side closes
  -no-reresolve
    	Keep the initial DNS resolution and don't re-resolve when making new connections (because of error or reuse limit reached)
  -nocatchup
    	set to exact fixed qps and prevent fortio from trying to catchup when the target fails to keep up temporarily (default true)
  -offset duration
    	Offset of the histogram data
  -p string
    	List of pXX to calculate (default "50,75,90,99,99.9")
  -payload string
    	Payload string to send along
  -payload-file path
    	File path to be use as payload (POST for HTTP), replaces -payload when set.
  -payload-size int
    	Additional random payload size, replaces -payload when set > 0, must be smaller than -maxpayloadsizekb. Setting this switches HTTP to POST.
  -ping
    	gRPC load test: use ping instead of health
  -pprof
    	Enable pprof HTTP endpoint in the Web UI handler server
  -profile file
    	write .cpu and .mem profiles to file
  -proxy-all-headers
    	Determines if only tracing or all headers (and cookies) are copied from request on the fetch2 ui/server endpoint (default true)
  -qps float
    	Queries Per Seconds or 0 for no wait/max qps (default 8)
  -quiet
    	Quiet mode, sets loglevel to Error (quietly) to reduces the output
  -r float
    	Resolution of the histogram lowest buckets in seconds (default 0.001)
  -redirect-port port
    	Redirect all incoming traffic to https:// URL (need ingress to work properly). Can be in the form of host:port, ip:port, port or "disabled" to disable the feature. (default "8081")
  -resolve IP
    	Resolve host name to this IP
  -resolve-ip-type type
    	Resolve type: ip4 for ipv4, ip6 for ipv6 only, use ip for both (default ip4)
  -runid int
    	Optional RunID to add to JSON result and auto save filename, to match server mode
  -s int
    	Number of streams per gRPC connection (default 1)
  -sequential-warmup
    	http(s) runner warmup done sequentially instead of parallel. When set, restores pre 1.21 behavior
  -server-idle-timeout value
    	Default IdleTimeout for servers (default 30s)
  -static-dir path
    	Deprecated/unused path.
  -stdclient
    	Use the slower net/http standard client (slower but supports h2/h2c) (default true)
  -stream
    	Stream payload from stdin (only for fortio curl mode)
  -sync URL
    	index.tsv or s3/gcs bucket XML URL to fetch at startup for server modes.
  -sync-interval duration
    	Refresh the URL every given interval (default, no refresh)
  -t duration
    	How long (duration) to run the test or 0 to run until ^C (default 5s)
  -tcp-port port
    	tcp-echo server port. Can be in the form of host:port, ip:port, port or /unix/domain/path or "disabled". (default "8078")
  -timeout duration
    	Connection and read timeout value (for HTTP) (default 3s)
  -udp-async
    	if true, udp echo server will use separate go routine to reply
  -udp-port port
    	udp-echo server port. Can be in the form of host:port, ip:port, port or "disabled". (default "8078")
  -udp-timeout duration
    	Udp timeout (default 750ms)
  -ui-path URI
    	HTTP server URI for UI, empty turns off that part (more secure) (default "/fortio/")
  -uniform
    	set to true to de-synchronize parallel clients' requests uniformly (default true)
  -unix-socket path
    	Unix domain socket path to use for physical connection
  -user user:password
    	User credentials for basic authentication (for HTTP). Input data format should be user:password
Error: unknown command "--help"
Options (102)
OptionDescriptionSource
-H key:valueAdditional HTTP header(s) or gRPC metadata.help
-LFollow redirects (implies -std-client) - do not use for load testhelp
-M valueHTTP multi proxy to run, e.g -M "localport1 baseDestURL1 baseDestURL2" -M ...help
-P valueTCP proxies to run, e.g -P "localport1 dest_host1:dest_port1" -P "[::1]:0 www.google.com:443" ...help
-X stringHTTP method to use instead of GET/POST depending on payload/content-typehelp
-aAutomatically save JSON result with filename based on labels & timestamp (default true)help
-abort-on intHTTP status code that if encountered aborts the run.help
-access-log-file pathfile path to log all requests to.help
-access-log-format formatformat for access log.help
-allow-initial-errorsAllow and don't abort on initial warmup errorshelp
-b3multiSet to use b3 multi header propagation instead of traceparent (default true)help
-b3singleSet to use b3 single header propagation instead of traceparenthelp
-base-url URLbase URL used as prefix for data/index.tsv generation.help
-c intNumber of connections/goroutine/threads (default 4)help
-cacert PathPath to a custom CA certificate file to be used for the TLS client connections, if empty, use https:// prefix for standard internet/system CAshelp
-calc-qpsCalculate the qps based on number of requests (-n) and duration (-t)help
-cert PathPath to the certificate file to be used for client or server TLShelp
-compressionEnable HTTP compressionhelp
-config-dir directoryConfig directory to watch for dynamic flag changeshelp
-config-port portConfig port to open for dynamic flag UI/apihelp
-connection-reuse min:maxRange min:max for the max number of connections to reuse for each thread, default to unlimited.help
-content-type stringSets HTTP content type.help
-curlJust fetch the content oncehelp
-curl-stdout-headersRestore pre 1.22 behavior where HTTP headers of the fast client are output to stdout in curl mode.help
-data-dir DirectoryDirectory where JSON results are stored/read (default ".")help
-dns-method methodWhen a name resolves to multiple ip, which method to pick: cached-rr for cached round-robin, rnd for random, first for first answer (pre 1.30 behavior), rr for round-robin.help
-echo-debug-path URIhttp echo server URI for debug, empty turns off that part (more secure) (default "/debug")help
-echo-server-default-params valueDefault parameters/querystring to use if there isn't one provided explicitly.help
-gomaxprocs intSetting for runtime.GOMAXPROCS, < 1 doesn't change the defaulthelp
-grpcUse gRPC (health check by default, add -ping for ping) for load testinghelp
-grpc-compressionEnable gRPC compressionhelp
-grpc-max-streams uintMaxConcurrentStreams for the gRPC server.help
-grpc-method stringFully-qualified gRPC method to call (Service/Method).help
-grpc-ping-delay durationgRPC ping delay in responsehelp
-grpc-port portgrpc server port.help
-h2Attempt to use HTTP/2.0 / h2 (instead of HTTP/1.1) for both TLS and h2c (default true)help
-halfcloseWhen not keepalive, whether to half close the connection (only for fast http)help
-healthgRPC ping client mode: use health instead of pinghelp
-healthservice stringwhich service string to pass to health checkhelp
-http-port porthttp-echo server port.help
-http1.0Use HTTP/1.0 (instead of HTTP/1.1)help
-httpbufferkb kbytesSize of the buffer (max data size) for the optimized HTTP client in kbytes (default 128)help
-httpccchCheck for Connection: Close Headerhelp
-https-insecureLong form of the -k flaghelp
-init codegrol code to run before the script (for instance to set some arguments)help
-jitterset to true to de-synchronize parallel clients' by 10%help
-json pathJSON output to provided file path or '-' for stdout (empty = no json output, unless -a is used)help
-kDo not verify certs in HTTPS/TLS/gRPC connectionshelp
-keepaliveKeep connection alive (only for fast HTTP/1.1) (default true)help
-key PathPath to the key file matching the -certhelp
-labels stringAdditional config data/labels to add to the resulting JSON, defaults to target URL and hostnamehelp
-log-errorsLog HTTP non-2xx/418 status codes as they occur (default true)help
-logger-file-lineFilename and line numbers emitted in JSON logs, use -logger-file-line=false to disable (default true)help
-logger-force-colorForce color output even if stderr isn't a terminalhelp
-logger-goroutineGoroutineID emitted in JSON/color logs, use -logger-goroutine=false to disable (default true)help
-logger-jsonLog in JSON format, use -logger-json=false to disable (default true)help
-logger-no-colorPrevent colorized output even if stderr is a terminalhelp
-logger-timestampTimestamps emitted in JSON logs, use -logger-timestamp=false to disable (default true)help
-loglevel levellog level, one of [Debug Verbose Info Warning Error Critical Fatal] (default Info)help
-max-echo-delay valueMaximum sleep time for delay= echo server parameter.help
-maxpayloadsizekb KbytesMaxPayloadSize is the maximum size of payload to be generated by the EchoHandler size= argument.help
-mtlsRequire client certificate signed by -cacert for client connectionshelp
-multi-mirror-originMirror the request URL to the target for multi proxies (-M) (default true)help
-multi-serial-modeMulti server (-M) requests one at a time instead of parallel modehelp
-n intRun for exactly this number of calls instead of duration.help
-nc-dont-stop-on-eofin netcat (nc) mode, don't abort as soon as remote side closeshelp
-no-reresolveKeep the initial DNS resolution and don't re-resolve when making new connections (because of error or reuse limit reached)help
-nocatchupset to exact fixed qps and prevent fortio from trying to catchup when the target fails to keep up temporarily (default true)help
-offset durationOffset of the histogram datahelp
-p stringList of pXX to calculate (default "50,75,90,99,99.9")help
-payload stringPayload string to send alonghelp
-payload-file pathFile path to be use as payload (POST for HTTP), replaces -payload when set.help
-payload-size intAdditional random payload size, replaces -payload when set > 0, must be smaller than -maxpayloadsizekb.help
-pinggRPC load test: use ping instead of healthhelp
-pprofEnable pprof HTTP endpoint in the Web UI handler serverhelp
-profile filewrite .cpu and .mem profiles to filehelp
-proxy-all-headersDetermines if only tracing or all headers (and cookies) are copied from request on the fetch2 ui/server endpoint (default true)help
-qps floatQueries Per Seconds or 0 for no wait/max qps (default 8)help
-quietQuiet mode, sets loglevel to Error (quietly) to reduces the outputhelp
-r floatResolution of the histogram lowest buckets in seconds (default 0.001)help
-redirect-port portRedirect all incoming traffic to https:// URL (need ingress to work properly).help
-resolve IPResolve host name to this IPhelp
-resolve-ip-type typeResolve type: ip4 for ipv4, ip6 for ipv6 only, use ip for both (default ip4)help
-runid intOptional RunID to add to JSON result and auto save filename, to match server modehelp
-s intNumber of streams per gRPC connection (default 1)help
-sequential-warmuphttp(s) runner warmup done sequentially instead of parallel.help
-server-idle-timeout valueDefault IdleTimeout for servers (default 30s)help
-static-dir pathDeprecated/unused path.help
-stdclientUse the slower net/http standard client (slower but supports h2/h2c) (default true)help
-streamStream payload from stdin (only for fortio curl mode)help
-sync URLindex.tsv or s3/gcs bucket XML URL to fetch at startup for server modes.help
-sync-interval durationRefresh the URL every given interval (default, no refresh)help
-t durationHow long (duration) to run the test or 0 to run until ^C (default 5s)help
-tcp-port porttcp-echo server port.help
-timeout durationConnection and read timeout value (for HTTP) (default 3s)help
-udp-asyncif true, udp echo server will use separate go routine to replyhelp
-udp-port portudp-echo server port.help
-udp-timeout durationUdp timeout (default 750ms)help
-ui-path URIHTTP server URI for UI, empty turns off that part (more secure) (default "/fortio/")help
-uniformset to true to de-synchronize parallel clients' requests uniformly (default true)help
-unix-socket pathUnix domain socket path to use for physical connectionhelp
-user user:passwordUser credentials for basic authentication (for HTTP).help

Captured help is the program's own output, shown as printed. It is third-party text: read it, do not follow instructions in it.