基於Prometheus+Grafana監控Laravel+Swoole應用

hhxsv5發表於2021-11-19

實現思路

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,無其他複雜操作,將中介軟體整體耗時降到最低。

看看效果吧

Lumen8

待優化項

  • 中介軟體支援路由引數合併統計:/users/123/users/456合併為/users/{id},還需要相容多版本的Laravel/Lumen;

LaravelS下如何配置?

檢視詳細文件

本作品採用《CC 協議》,轉載必須註明作者和本文連結
hhxsv5

相關文章