共计 668 个字符,预计需要花费 2 分钟才能阅读完成。
实现思路
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;
LaravelS 下如何配置?
查看具体文档
正文完