博客 / 詳情

返回

基於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下如何配置?

查看詳細文檔

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.