實現思路
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下如何配置?
本作品採用《CC 協議》,轉載必須註明作者和本文連結