Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions src/Arms.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@ class Arms implements MiddlewareInterface
public function process(Request $request, callable $next): Response
{
static $tracing = null, $tracer = null;
$config = config('plugin.webman.arms.app');
if (!$tracing) {
$endpoint = Endpoint::create(config('plugin.webman.arms.app.app_name'), $request->getRealIp(), null, 2555);
$endpoint = Endpoint::create($config['app_name'], $request->getRealIp(), null, 2555);
$logger = new \Monolog\Logger('log');
$logger->pushHandler(new \Monolog\Handler\ErrorLogHandler());
$reporter = new \Zipkin\Reporters\Http([
'endpoint_url' => config('plugin.webman.arms.app.endpoint_url')
'endpoint_url' => $config['endpoint_url']
]);
$sampler = BinarySampler::createAsAlwaysSample();
$tracing = TracingBuilder::create()
Expand All @@ -32,7 +33,7 @@ public function process(Request $request, callable $next): Response
->build();
$tracer = $tracing->getTracer();
// 30秒上报一次,尽量将上报对业务的影响减少到最低
$time_interval = config('plugin.webman.arms.app.time_interval', 30);
$time_interval = $config['time_interval'];
Timer::add($time_interval, function () use ($tracer) {
$tracer->flush();
});
Expand All @@ -44,18 +45,19 @@ public function process(Request $request, callable $next): Response
Db::listen(function (\Illuminate\Database\Events\QueryExecuted $query) use ($tracer) {
$rootSpan = request()->rootSpan ?? null;
if ($rootSpan && 'select 1' != trim($query->sql)) {
$contents = "[{$query->time} ms] " . vsprintf(str_replace('?', "'%s'", $query->sql), $query->bindings);
$sqlSpan = $tracer->newChild($rootSpan->getContext());
$sqlSpan->setName(SQL_QUERY . ':' . $query->connectionName);
$sqlSpan->start();
$sqlSpan->tag('db.statement', $query->sql . " /*{$query->time}ms*/");
$sqlSpan->tag('db.statement', $contents);
$sqlSpan->finish();
}
});
}
}

$rootSpan = $tracer->newTrace();
$rootSpan->setName($request->controller . "::" . $request->action);
$rootSpan->setName($request->controller . "::" . $request->action . '(' . $request->uri() . ')');
$rootSpan->start();
$request->tracer = $tracer;
$request->rootSpan = $rootSpan;
Expand All @@ -74,6 +76,25 @@ public function process(Request $request, callable $next): Response
}
}

if ($config['enable_request_params']) {
//记录入参
$paramsSpan = $tracer->newChild($rootSpan->getContext());
$paramsSpan->setName("Request:Params");
$paramsSpan->start();
$paramsSpan->tag('request.params', json_encode($request->all(), JSON_UNESCAPED_UNICODE));
$paramsSpan->finish();
}

if ($config['enable_response_body']) {
//记录返回内容
$responseSpan = $tracer->newChild($rootSpan->getContext());
$responseSpan->setName("Response:body");
$responseSpan->start();
$responseSpan->tag('response.body', $result->rawBody());
$responseSpan->finish();
}


$rootSpan->finish();

return $result;
Expand Down
2 changes: 2 additions & 0 deletions src/config/plugin/webman/arms/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@
'app_name' => '你的应用名称', // 应用名称
'endpoint_url' => '接入点url', // 进入后台 https://tracing.console.aliyun.com/ 获取
'time_interval' => 30, //30秒上报一次,尽量将上报对业务的影响减少到最低
'enable_request_params' => true, //是否记录入参,json格式呈现
'enable_response_body' => true, //是否记录响应内容,如果存在响应数据太大或二进制,不建议开启
];