From a4a07eeade608bafe41493ea71abdd9710ae29d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=93=AD=E6=98=95?= <715557344@qq.com> Date: Sat, 5 Sep 2020 16:41:45 +0800 Subject: [PATCH 1/8] Update swoole-tracker.md --- docs/zh-cn/swoole-tracker.md | 64 +++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/docs/zh-cn/swoole-tracker.md b/docs/zh-cn/swoole-tracker.md index 42281c6d57..236235bde5 100644 --- a/docs/zh-cn/swoole-tracker.md +++ b/docs/zh-cn/swoole-tracker.md @@ -32,18 +32,16 @@ Swoole Tracker 能够帮助企业自动分析并汇总统计关键系统调用 ### 安装扩展 -注册完账户后,进入[控制台](https://www.swoole-cloud.com/dashboard/catdemo/),并申请试用,下载对应客户端。 +注册完账户后,进入[控制台](https://business.swoole.com/SwooleTracker/catdemo),并申请试用,下载对应的安装脚本。 相关文档,请移步 [试用文档](https://www.kancloud.cn/swoole-inc/ee-base-wiki/1214079) 或 [详细文档](https://www.kancloud.cn/swoole-inc/ee-help-wiki/1213080) -> 具体文档地址,以从控制台下载的对应客户端中展示的为准。 - -将客户端中的所有文件以及以下两个文件复制到项目目录 `.build` 中 +将脚本以及以下两个文件复制到项目目录 `.build` 中 1. `entrypoint.sh` ```bash -#!/usr/bin/env bash +#!/usr/bin/env sh /opt/swoole/script/php/swoole_php /opt/swoole/node-agent/src/node.php & @@ -51,11 +49,11 @@ php /opt/www/bin/hyperf.php start ``` -2. `swoole-tracker.ini` +2. `swoole_tracker.ini` ```bash [swoole_tracker] -extension=/opt/swoole_tracker.so +extension=/opt/.build/swoole_tracker.so apm.enable=1 #打开总开关 apm.sampling_rate=100 #采样率 例如:100% @@ -66,8 +64,15 @@ apm.enable_memcheck=1 #开启内存泄漏检测 默认0 关闭状态 然后将下面的 `Dockerfile` 复制到项目根目录中。 ```dockerfile -FROM hyperf/hyperf:7.2-alpine-cli -LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" +# Default Dockerfile +# +# @link https://www.hyperf.io +# @document https://hyperf.wiki +# @contact group@hyperf.io +# @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE + +FROM hyperf/hyperf:7.4-alpine-v3.11-cli +LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" app.name="Hyperf" ## # ---------- env settings ---------- @@ -76,28 +81,29 @@ LABEL maintainer="Hyperf Developers " version="1.0" license="MI ARG timezone ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \ - COMPOSER_VERSION=1.8.6 \ - APP_ENV=prod + APP_ENV=prod \ + SCAN_CACHEABLE=(true) +# update RUN set -ex \ - && apk update \ # install composer && cd /tmp \ - && wget https://github.com/composer/composer/releases/download/${COMPOSER_VERSION}/composer.phar \ + && wget https://mirrors.aliyun.com/composer/composer.phar \ && chmod u+x composer.phar \ && mv composer.phar /usr/local/bin/composer \ # show php version and extensions && php -v \ && php -m \ + && php --ri swoole \ # ---------- some config ---------- && cd /etc/php7 \ # - config PHP && { \ - echo "upload_max_filesize=100M"; \ - echo "post_max_size=108M"; \ - echo "memory_limit=1024M"; \ + echo "upload_max_filesize=128M"; \ + echo "post_max_size=128M"; \ + echo "memory_limit=1G"; \ echo "date.timezone=${TIMEZONE}"; \ - } | tee conf.d/99-overrides.ini \ + } | tee conf.d/99_overrides.ini \ # - config timezone && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \ && echo "${TIMEZONE}" > /etc/timezone \ @@ -105,25 +111,29 @@ RUN set -ex \ && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \ && echo -e "\033[42;37m Build Completed :).\033[0m\n" -COPY . /opt/www -WORKDIR /opt/www/.build +COPY .build /opt/.build +WORKDIR /opt/.build -# 这里的地址,以客户端中显示的为准 -RUN ./deploy_env.sh www.swoole-cloud.com \ +RUN chmod +x swoole-tracker-install.sh \ + && ./swoole-tracker-install.sh \ && chmod 755 entrypoint.sh \ - && cp swoole_tracker72.so /opt/swoole_tracker.so \ - && cp swoole-tracker.ini /etc/php7/conf.d/swoole-tracker.ini \ + && cp swoole-tracker/swoole_tracker74.so /opt/.build/swoole_tracker.so \ + && cp swoole_tracker.ini /etc/php7/conf.d/98_swoole_tracker.ini \ && php -m WORKDIR /opt/www -RUN composer install --no-dev \ - && composer dump-autoload -o \ - && php /opt/www/bin/hyperf.php +# Composer Cache +# COPY ./composer.* /opt/www/ +# RUN composer install --no-dev --no-scripts + +COPY . /opt/www +RUN composer install --no-dev -o && php bin/hyperf.php EXPOSE 9501 -ENTRYPOINT ["sh", ".build/entrypoint.sh"] +ENTRYPOINT ["sh", "/opt/.build/entrypoint.sh"] + ``` ## 使用 From 0c1b9fb49126deb43ceb3519c313ca2ddcbf02fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=93=AD=E6=98=95?= <715557344@qq.com> Date: Sat, 5 Sep 2020 20:20:55 +0800 Subject: [PATCH 2/8] Create CoroutineHandlerAspect.php --- .../src/Aspect/CoroutineHandlerAspect.php | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php diff --git a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php new file mode 100644 index 0000000000..0cb05f1e72 --- /dev/null +++ b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php @@ -0,0 +1,52 @@ +container = $container; + } + + public function process(ProceedingJoinPoint $proceedingJoinPoint) + { + if (class_exists(Stats::class) && $client = $proceedingJoinPoint->getArguments()[0] ?? null) { + if ($client instanceof Client) { + $client->setHeaders(array_merge( + [ + 'x-swoole-traceid' => '', // TODO: 获取生成的 TraceId + 'x-swoole-spanid' => '', + ], + $client->requestHeaders + )); + } + } + return $proceedingJoinPoint->process(); + } +} From 6fdc0d7a3219d89426304766b8e5c67b95c6d616 Mon Sep 17 00:00:00 2001 From: sy-records <52o@qq52o.cn> Date: Sun, 6 Sep 2020 09:25:43 +0800 Subject: [PATCH 3/8] add getTraceId and getSpanId method --- src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php index 0cb05f1e72..c2ecb019c4 100644 --- a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php +++ b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php @@ -17,6 +17,8 @@ use Psr\Container\ContainerInterface; use Swoole\Coroutine\Http\Client; use SwooleTracker\Stats; +use function getSwooleTrackerSpanId; +use function getSwooleTrackerTraceId; class CoroutineHandlerAspect extends AbstractAspect { @@ -40,8 +42,8 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) if ($client instanceof Client) { $client->setHeaders(array_merge( [ - 'x-swoole-traceid' => '', // TODO: 获取生成的 TraceId - 'x-swoole-spanid' => '', + 'x-swoole-traceid' => getSwooleTrackerTraceId(), + 'x-swoole-spanid' => getSwooleTrackerSpanId(), ], $client->requestHeaders )); From d50401326fe34d0d3bd000e972a41aacb10be350 Mon Sep 17 00:00:00 2001 From: sy-records <52o@qq52o.cn> Date: Sun, 6 Sep 2020 09:47:57 +0800 Subject: [PATCH 4/8] add ignoreErrors --- phpstan.neon | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phpstan.neon b/phpstan.neon index 6d88ebf141..741622464d 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -41,3 +41,5 @@ parameters: - '#Method Hyperf\\Utils\\Serializer\\ScalarNormalizer::denormalize\(\) should return array\|object but returns#' - '#Function get_debug_type invoked with 1 parameter, 0 required#' - '#gc_status not found#' + - '#Used function getSwooleTracker.* not found#' + - '#Function getSwooleTracker.* not found#' From 4c060731cca575c38b9fc89c957d4527bc13ed6c Mon Sep 17 00:00:00 2001 From: sy-records <52o@qq52o.cn> Date: Sun, 6 Sep 2020 10:11:23 +0800 Subject: [PATCH 5/8] add function_exists --- phpstan.neon | 2 -- src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 741622464d..6d88ebf141 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -41,5 +41,3 @@ parameters: - '#Method Hyperf\\Utils\\Serializer\\ScalarNormalizer::denormalize\(\) should return array\|object but returns#' - '#Function get_debug_type invoked with 1 parameter, 0 required#' - '#gc_status not found#' - - '#Used function getSwooleTracker.* not found#' - - '#Function getSwooleTracker.* not found#' diff --git a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php index c2ecb019c4..9d4d9002d3 100644 --- a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php +++ b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php @@ -42,8 +42,8 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) if ($client instanceof Client) { $client->setHeaders(array_merge( [ - 'x-swoole-traceid' => getSwooleTrackerTraceId(), - 'x-swoole-spanid' => getSwooleTrackerSpanId(), + 'x-swoole-traceid' => function_exists('getSwooleTrackerTraceId') ? getSwooleTrackerTraceId() : '', + 'x-swoole-spanid' => function_exists('getSwooleTrackerSpanId') ? getSwooleTrackerSpanId() : '', ], $client->requestHeaders )); From e33477fc7308386a2761002b23026bdcf7a898e7 Mon Sep 17 00:00:00 2001 From: sy-records <52o@qq52o.cn> Date: Sun, 6 Sep 2020 09:25:43 +0800 Subject: [PATCH 6/8] add getTraceId and getSpanId method add ignoreErrors add function_exists add ignoreErrors --- phpstan.neon | 2 ++ src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 6d88ebf141..741622464d 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -41,3 +41,5 @@ parameters: - '#Method Hyperf\\Utils\\Serializer\\ScalarNormalizer::denormalize\(\) should return array\|object but returns#' - '#Function get_debug_type invoked with 1 parameter, 0 required#' - '#gc_status not found#' + - '#Used function getSwooleTracker.* not found#' + - '#Function getSwooleTracker.* not found#' diff --git a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php index 0cb05f1e72..9d4d9002d3 100644 --- a/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php +++ b/src/swoole-tracker/src/Aspect/CoroutineHandlerAspect.php @@ -17,6 +17,8 @@ use Psr\Container\ContainerInterface; use Swoole\Coroutine\Http\Client; use SwooleTracker\Stats; +use function getSwooleTrackerSpanId; +use function getSwooleTrackerTraceId; class CoroutineHandlerAspect extends AbstractAspect { @@ -40,8 +42,8 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint) if ($client instanceof Client) { $client->setHeaders(array_merge( [ - 'x-swoole-traceid' => '', // TODO: 获取生成的 TraceId - 'x-swoole-spanid' => '', + 'x-swoole-traceid' => function_exists('getSwooleTrackerTraceId') ? getSwooleTrackerTraceId() : '', + 'x-swoole-spanid' => function_exists('getSwooleTrackerSpanId') ? getSwooleTrackerSpanId() : '', ], $client->requestHeaders )); From b5958ab687f9eda6979c577cdb573fbe79e00ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=93=AD=E6=98=95?= <715557344@qq.com> Date: Sun, 6 Sep 2020 10:23:06 +0800 Subject: [PATCH 7/8] Update --- docs/zh-cn/swoole-tracker.md | 12 ++++++++++++ .../src/Aspect/CoroutineHandlerAspect.php | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/zh-cn/swoole-tracker.md b/docs/zh-cn/swoole-tracker.md index 236235bde5..29bc82b6b1 100644 --- a/docs/zh-cn/swoole-tracker.md +++ b/docs/zh-cn/swoole-tracker.md @@ -167,3 +167,15 @@ return [ ], ]; ``` + +若使用 `jsonrpc-http` 协议实现了 `RPC` 服务,则还需要在 `config/autoload/aspects.php` 配置以下 `Aspect`: + +```php +getArguments()[0] ?? null) { - if ($client instanceof Client) { + if ($client instanceof Client && function_exists('getSwooleTrackerTraceId') && function_exists('getSwooleTrackerSpanId')) { $client->setHeaders(array_merge( [ - 'x-swoole-traceid' => function_exists('getSwooleTrackerTraceId') ? getSwooleTrackerTraceId() : '', - 'x-swoole-spanid' => function_exists('getSwooleTrackerSpanId') ? getSwooleTrackerSpanId() : '', + 'x-swoole-traceid' => getSwooleTrackerTraceId(), + 'x-swoole-spanid' => getSwooleTrackerSpanId(), ], $client->requestHeaders )); From 7324ecd4805ce1aaf352d4eafc3baa7c677aa4c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=93=AD=E6=98=95?= <715557344@qq.com> Date: Sun, 6 Sep 2020 10:33:37 +0800 Subject: [PATCH 8/8] Update CHANGELOG-2.0.md --- CHANGELOG-2.0.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG-2.0.md b/CHANGELOG-2.0.md index 0a1448bd43..b299bdb0ba 100644 --- a/CHANGELOG-2.0.md +++ b/CHANGELOG-2.0.md @@ -9,6 +9,7 @@ ## Fixed - [#2427](https://github.com/hyperf/hyperf/pull/2427) Fixed model event dispatcher does not works for `Pivot` and `MorphPivot`. +- [#2443](https://github.com/hyperf/hyperf/pull/2443) Fixed traceid does not exists when using coroutine handler. ## Optimized