zoon / pyrospy
Adapter from phpspy to pyroscope
Installs: 100
Dependents: 0
Suggesters: 0
Security: 0
Stars: 18
Watchers: 3
Forks: 3
Open Issues: 0
Type:project
Requires
- php: >=8.1
- ext-curl: *
- ext-json: *
- ext-mbstring: *
- amphp/amp: ^3.0
- amphp/byte-stream: ^2.0
- amphp/http-client: ^5
- amphp/pipeline: ^1.0
- revolt/event-loop: ^1.0
- symfony/console: ^5|^6
Requires (Dev)
- dg/bypass-finals: ^1.8
- friendsofphp/php-cs-fixer: ^3.59
- phpunit/phpunit: ^11.2
- psalm/phar: ^5.9
This package is auto-updated.
Last update: 2024-10-31 17:32:30 UTC
README
Adapter from phpspy to pyroscope.io
About Us
Phpspy requirements
apt install binutils
for Ubuntu/Debian- To use in docker container it must be
privileged
or with capabilitySYS_PTRACE
Parameters:
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
Usage:
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
Plugins
- 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