mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-04 20:58:13 +08:00
use route string to avoid hitting high cardinality path.
This commit is contained in:
parent
f8fac1ab77
commit
c480fc9014
@ -218,7 +218,7 @@ return [
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
```
|
```
|
||||||
> 本中间件中统计维度包含 `request_status`、`request_path`、`request_method`, 如果您的 `request_path` 包含无限种可能(比如`/users/{id}`),则建议重写本中间件,去掉 `request_path` 维度,否则过高的基数会导致内存溢出。
|
> 本中间件中统计维度包含 `request_status`、`request_path`、`request_method`。如果您的 `request_path` 过多,则建议重写本中间件,去掉 `request_path` 维度,否则过高的基数会导致内存溢出。
|
||||||
|
|
||||||
### 自定义使用
|
### 自定义使用
|
||||||
|
|
||||||
|
@ -34,7 +34,8 @@
|
|||||||
"hyperf/di": "Required to use annotations.",
|
"hyperf/di": "Required to use annotations.",
|
||||||
"hyperf/event": "Required to use listeners for default metrics.",
|
"hyperf/event": "Required to use listeners for default metrics.",
|
||||||
"hyperf/process": "Required to use standalone process, or you have to roll your own",
|
"hyperf/process": "Required to use standalone process, or you have to roll your own",
|
||||||
"hyperf/retry": "Required to use back-off retry implementation."
|
"hyperf/retry": "Required to use back-off retry implementation.",
|
||||||
|
"hyperf/http-server": "Required to capture routes in middleware."
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
@ -24,7 +24,6 @@ use Psr\Container\ContainerInterface;
|
|||||||
use Psr\EventDispatcher\EventDispatcherInterface;
|
use Psr\EventDispatcher\EventDispatcherInterface;
|
||||||
use Swoole\Server;
|
use Swoole\Server;
|
||||||
use Swoole\Timer;
|
use Swoole\Timer;
|
||||||
use Throwable;
|
|
||||||
use function gc_status;
|
use function gc_status;
|
||||||
use function getrusage;
|
use function getrusage;
|
||||||
use function memory_get_peak_usage;
|
use function memory_get_peak_usage;
|
||||||
|
@ -41,8 +41,6 @@ abstract class PoolWatcher
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected function getPrefix();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Periodically scan metrics.
|
* Periodically scan metrics.
|
||||||
*/
|
*/
|
||||||
@ -79,4 +77,6 @@ abstract class PoolWatcher
|
|||||||
$connectionsInUseGauge->set((float) $pool->getCurrentConnections());
|
$connectionsInUseGauge->set((float) $pool->getCurrentConnections());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract protected function getPrefix();
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Hyperf\Metric\Middleware;
|
namespace Hyperf\Metric\Middleware;
|
||||||
|
|
||||||
use Hyperf\Metric\Contract\MetricFactoryInterface;
|
use Hyperf\HttpServer\Router\Dispatched;
|
||||||
use Hyperf\Metric\Timer;
|
use Hyperf\Metric\Timer;
|
||||||
use Psr\Http\Message\ResponseInterface;
|
use Psr\Http\Message\ResponseInterface;
|
||||||
use Psr\Http\Message\ServerRequestInterface;
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
@ -29,9 +29,15 @@ class MetricMiddleware implements MiddlewareInterface
|
|||||||
*/
|
*/
|
||||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
{
|
{
|
||||||
|
$dispatched = $request->getAttribute(Dispatched::class);
|
||||||
|
if (! $dispatched) {
|
||||||
|
$route = $request->getUri()->getPath();
|
||||||
|
} else {
|
||||||
|
$route = $dispatched->handler->route;
|
||||||
|
}
|
||||||
$labels = [
|
$labels = [
|
||||||
'request_status' => '500', //default to 500 in case uncaught exception occur
|
'request_status' => '500', //default to 500 in case uncaught exception occur
|
||||||
'request_path' => $request->getUri()->getPath(),
|
'request_path' => $route,
|
||||||
'request_method' => $request->getMethod(),
|
'request_method' => $request->getMethod(),
|
||||||
];
|
];
|
||||||
$timer = new Timer('http_requests', $labels);
|
$timer = new Timer('http_requests', $labels);
|
||||||
|
Loading…
Reference in New Issue
Block a user