基于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;
推荐阅读
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- 监控nginx
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- 韵达基于云原生的业务中台建设 | 实战派
- EasyOA|EasyOA 基于SSM的实现 未完成总结与自我批判
- 基于stm32智能风扇|基于stm32智能风扇_一款基于STM32的智能灭火机器人设计
- stm32|基于STM32和freeRTOS智能门锁设计方案