基于Prometheus+Grafana监控Laravel+Swoole应用

实现思路

1.Swoole 开启自定义进程定时采集监控指标,如 $server->stats() memory_get_usage() sys_getloadavg() gc_status(),将这些指标存储到 APCu;
2.配置 Laravel 全局terminate 中间件统计 HTTP 请求次数与耗时指标,将指标存储 APCu;
3.Laravel 提供一个指标接口,从 APCu 中查询指标数据;
4.Prometheus 定时拉取指标接口,存储指标数据到它的 TSDB;
5.Grafana 接入 Prometheus 数据源,图形化展示监控指标数据。

用到哪些中间件

  • APCu:存储指标数据,多进程共享数据,读写速度快;
  • Prometheus:收集监控指标数据,存储到 TSDB,设置告警规则;
  • Grafana:图形化展示监控数据,支持配置告警。

难点

  • Swoole是多进程模型,如何在自定义进程中取统计其他 Worker 进程的内存占用呢?
    进程间通信,使用sendMessage()onPipeMessage()来实现自定义进程与 Worker 进程通信,统计Worker进程的内存与GC情况。

  • 统计请求的中间件势必会增加接口耗时,如果将影响降到最低?
    所有与中间件相关的实例(包括中间件)都采用单例模式,尽可能减少对象的初始化,只操作 APCu,无其他复杂操作,将中间件整体耗时降到最低。

  • 中间件支持路由参数合并统计:/users/123/users/456合并为/users/{id},还需要兼容多版本的Laravel/Lumen,具体实现参考代码

看看效果吧

Lumen8

LaravelS下如何配置?

查看详细文档

本作品采用《CC 协议》,转载必须注明作者和本文链接
hhxsv5
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 9
Cooper

少见用 Lumen 的

2年前 评论

@Cooper 纯API开发,用Lumen更轻量

2年前 评论
Cooper 2年前

@huangxu 不麻烦,Docker直接搭建Prometheus+Grafana

2年前 评论

大佬 自定义指标有封装好的函数么

1年前 评论
hhxsv5 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!