乐趣区

Laravel接入Prometheus

在原有的基础上增加 Counter 计数器:
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use traumferienwohnungen\PrometheusExporter\Middleware\AbstractResponseTimeMiddleware;

class PrometheusMonitor extends AbstractResponseTimeMiddleware
{
protected function getRouteNames()
{
$routeNames = [];
foreach (\Route::getRoutes() as $route){
$routeNames[] = ‘/’.ltrim($route->uri(), ‘/’);
}
return $routeNames;
}

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (defined(‘LARAVEL_START’)){
$start = LARAVEL_START;
} elseif (defined(‘LUMEN_START’)){
$start = LUMEN_START;
} else {
$start = microtime(true);
}
$this->request = $request;

/** @var \Illuminate\Http\Response $response */
$response = $next($request);

$route_name = $this->getRouteName();
$method = $request->getMethod();
$status = $response->getStatusCode();

$duration = microtime(true) – $start;
$duration_milliseconds = $duration * 1000.0;
$this->countRequest($route_name, $method, $status, $duration_milliseconds);

$this->initRequestMetrics($method, $status);

return $response;
}

public function getRouteName(){
return request()->getRequestUri();
}

public function initRequestMetrics($method, $status)
{
$namespace = config(‘prometheus_exporter.namespace_http_server’);

$labelNames = $this->getRequestCounterLabelNames();

$name = ‘request_wuc’;
$help = ‘http_requests count’;
$counter = $this->registry->getOrRegisterCounter(
$namespace, $name, $help, $labelNames
);

$counter->incBy(1, [$this->getRouteName(), $method, $status]);
}
}

退出移动版