開源PHP監控擴展:witness簡介

jopen 11年前發布 | 16K 次閱讀 witness 系統監控

1. 問題的由來

PHP作為流行的服務器端腳本語言,廣泛地用于各種服務器前端及應用的開發。雖然PHP作為腳本語言,天然具有良好的入門簡單、容錯性強、性能較高(在腳 本語言中)的特點,但是,由于其多進程的執行模式,和前端Web系統通常采用多機器并行的運行模式,導致在線上出現的某些和特定用戶相關的問題時,很難收 集全面的信息。

  1. 多進程+多機器+用戶請求隨機分發,導致不知道某個用戶的請求會在哪臺機器的哪個進程執行;
  2. 如果在所有機器和進程都加入調試語句,會導致大量的無關日志輸出,或可能影響無關的用戶;
  3. 由于同一用戶的兩個請求是被隨機分散的,導致難以獲取具體某個用戶出錯時的點擊流;
  4. 在大型系統中,由于組件多,關聯復雜,不容易直接定位問題源頭出自哪個模塊以增加輸出信息;
  5. 通過輸出日志等方式,往往需要多次嘗試后才能逐步逼近問題的源頭,對提高查錯速度不利;
  6. 這種即時在線上增加調試或者寫日志的代碼,可能引入意外的bug,帶來額外風險。

另外,作為一種輕便的快速開發腳本,加上現在流 行的敏捷等快速開發模式,不管它們吹噓得如何天花亂墜,對于測試的完備性、代碼的健壯性,其實質效果是大大降低的。所以,在上線后發現問題再快速打補丁或 者快速迭代,是業內一種常見的模式。而在這個環節中,快速定位問題是打補丁或者后續迭代的前提。

于是,針對這種情況,我們開發了witness系統(witness--證人,它的證詞可以幫助我們還原“犯罪”現場)。該系統能讓我們在處理上述問題時,更簡便,更有效率,更全面的得到所有相關數據,從而加快分析問題和處理問題的過程。

witness系統的主要特點如下:

  1. 非嵌入式監控,無需修改運行的PHP代碼
  2. 可以通過cookie監控特定的請求
  3. 輕量級,靈活度高
  4. 高性能

項目已開源:https://github.com/ucweb/witness

2. 系統架構

PHP分析調試系統主要分為三部分:witness擴展、數據傳輸,數據展示。

總體架構如下圖:

開源PHP監控擴展:witness簡介

2.1. witness擴展

witness擴展主要的功能是嵌入PHP引擎底層,監控和收集一切可用的信息,并通過數據傳輸系統,反饋到后端,以便于分析處理這些數據。

witness擴展目前可以有兩種監控模式,如下表:

方式

功能

備注

trace

記錄從開始到結束期間,所有函數調用的次序,以及這些調用參數、返回值等。同時也會記錄當前一些關鍵的環境參數和請求參數。

適用于監控整個邏輯處理流程

dump

記錄當前的調用棧的靜態信息,包括每層函數執行的當前行號、每層調用的參數、局部變量,全局變量、靜態變量等

適用于監控當前某個點的整體狀態

簡單的對這兩種模式做個對比:trace模式就好比拍視頻,dump模式就相當于拍照片--視頻能展現連續變化,而照片則會保留更多細節,清晰度也更高。

2.2. 數據傳輸

主要功能有三點:

  1. 收集本地各進程的witness擴展傳出的信息,并整理成獨立的數據文件;
  2. 收集位于各臺機器上的數據文件,匯總到MQ中;
  3. 從MQ上獲取相關的數據導入到后端的展示系統中。

2.3. 數據展示

由于witness后端的數據采用SQLite存儲文件,所以它并不適合直接閱讀和分析(可以通過SQLite的cli接口可以直接閱讀這些db文件,但是很不直觀)。因此,一般情況下都建議使用腳本,將其中信息提取加工后,進行可視化展示。

目前我們附帶有基于本地源代碼展開的示例腳本,位于:

scripts/genhtml.php

如果現有項目有自己的控制平臺,可以根據實際情況,將其根據實際情況和需求,做具體的適配。

3. 使用witness

3.1. 系統依賴

以下是witness擴展的一些依賴和限制,包括目前已經測試通過并上線運行的配置:

項目

依賴

已測試

操作系統

僅支持linux兼容系統,不支持Windows系統

RHEL 5.4

內核

2.6或以上

2.6.18-164.el5

位寬

x86/x86_64/amd64

一般而言不推薦x86,因為可能會遇到內存瓶頸

x86_64

gcc

gcc 4.1.2或以上

gcc version 4.1.2 20080704 

Red Hat 4.1.2-48

PHP

5.3.X或以上(參見注意事項

5.3.4/5.3.8

SQLite

3.3.6或以上

SQLite version 3.3.6


項目主頁:http://www.baiduhome.net/lib/view/home/1372932209097

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!