Adapter from phpspy to pyroscope.io
Zoon - it's international service, that helps local businesses grow.
|
apt install binutils
for Ubuntu/Debian- To use in docker container it must be
privileged
or with capabilitySYS_PTRACE
Usage:
php pyrospy.php run [options]
Options:
-s, --pyroscope=STRING Url of the pyroscope server.
Example: https://your-pyroscope-sever.com
-auth, --pyroscopeAuthToken=STRING
Pyroscope Auth Token.
Example: psx-BWlqy_dW1Wxg6oBjuCWD28HxGCkB1Jfzt-jjtqHzrkzI
-a, --app=STRING Name of app.
All samples will be saved under given app name.
Example: app
-r, --rateHz=INT Sample rate in Hz.
Used to convert number of samples to CPU time
[default: 100]
-i, --interval=INT Maximum time between requests to pyroscope server
[default: 10]
-b, --batch=INT Maximum number of traces in request to pyroscope server
[default: 250]
-t, --tags=STRING=STRING Add tags to samples. Use to filter data inside one app.
Example: host=server1; role=cli
(multiple values allowed)
-p, --plugins=STRING Load custom class to modify trace and phpspy comments/tags. Can be class or folder with classes.
Example: /zoon/pyrospy/app/Plugins/ClearEmptyTags.php
(multiple values allowed)
-h, --help Display help for the given command.
When no command is given display help for the list command
phpspy --max-depth=-1 --time-limit-ms=59000 --threads=1024 --rate-hz=4 --buffer-size=65536 -J m -P '-x "php|php[0-9]\.[0-9]" | shuf' 2> error_log.log | php pyrospy.php run --pyroscope=https://pyroscope.yourdomain.com --rateHz=4 --app=testApp --tags=host=server39 --tags=role=cli
phpspy --max-depth=-1 --time-limit-ms=59000 --threads=100 --rate-hz=25 --buffer-size=65536 -J m -P '-x "php-fpm|php-fpm[0-9]\.[0-9]" | shuf' 2> error_log.log | php pyrospy.php run --pyroscope=https://pyroscope.yourdomain.com --rateHz=25 --app=testApp --tags=host=server39 --tags=role=web
- Create
.php
plugin class. Put it in any place. Make sure it hasnamespace Zoon\PyroSpy\Plugins;
and classname match filename.
<?php
namespace Zoon\PyroSpy\Plugins;
class MyAwesomePlugin implements PluginInterface {
public function process(array $tags, array $trace): array {
//Modify tags and/or trace
return [$tags, $trace];
}
}
Multiple plugins can be provided. Each plugin will get tags and trace from results of the previous.
- Add
--request-info=QCuP
to phpspy args, to add uri string to tags. - Provide full path to it in pyrospy arguments.
- To ignore a trace, return an empty trace.
Example:
phpspy --max-depth=-1 --time-limit-ms=59000 --threads=100 --rate-hz=25 --buffer-size=65536 -J m -P '-x "php-fpm|php-fpm[0-9]\.[0-9]" | shuf' --request-info=QCuP 2> error_log.log | php pyrospy.php run --pyroscope=https://pyroscope.yourdomain.com --rateHz=25 --app=testApp --tags=host=server39 --tags=role=web --plugins=/zoon/pyrospy/app/Plugins/ClearEmptyTags.php