资讯专栏INFORMATION COLUMN

Laravel接入Prometheus

YuboonaZhang / 503人阅读

在原有的基础上增加Counter计数器:

namespace AppHttpMiddleware;

use Closure;
use IlluminateHttpRequest;
use traumferienwohnungenPrometheusExporterMiddlewareAbstractResponseTimeMiddleware;

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

    /**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $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 IlluminateHttpResponse $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]);
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30923.html

相关文章

  • 容器监控实践—Prometheus基本架构

    摘要:根据配置文件,对接收到的警报进行处理,发出告警。在默认情况下,用户只需要部署多套,采集相同的即可实现基本的。通过将监控与数据分离,能够更好地进行弹性扩展。参考文档本文为容器监控实践系列文章,完整内容见 系统架构图 1.x版本的Prometheus的架构图为:showImg(https://segmentfault.com/img/remote/1460000018372350?w=14...

    gghyoo 评论0 收藏0
  • 容器监控实践—Prometheus基本架构

    摘要:根据配置文件,对接收到的警报进行处理,发出告警。在默认情况下,用户只需要部署多套,采集相同的即可实现基本的。通过将监控与数据分离,能够更好地进行弹性扩展。参考文档本文为容器监控实践系列文章,完整内容见 系统架构图 1.x版本的Prometheus的架构图为:showImg(https://segmentfault.com/img/remote/1460000018372350?w=14...

    elina 评论0 收藏0
  • Laravel教程: 3分钟实现小程序微信支付接入(上)——唤起支付

    摘要:微信支付的接入,如果不使用成熟的开发包,将是巨大的工作量。回调处理请见下文教程分钟实现小程序微信支付接入下回调发货逻辑已知异常如果你不添加,可能会报容器找不到这个应用的报错。 微信支付的接入,如果不使用成熟的开发包,将是巨大的工作量。 依赖 EasyWechat 先在 laravel 项目中依赖 easywechat 这个包 composer require overtrue/lara...

    Miracle_lihb 评论0 收藏0
  • 美团点评携手 PingCAP 开启新一代数据库深度实践之旅

    摘要:一背景和现状在美团,基于构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方案和实践新的运维方式。随着近一两年来分布式数据库大放异彩,美团团队联合架构存储团队,于年初启动了分布式数据库项目。 一、背景和现状 在美团,基于 MySQL 构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方案和实践新的运维方式。...

    gclove 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<