背景
php專案,業務監控為0,需要搭建一套日誌檢視,閥值告警等功能的監控系統。撒都不用說,直接上ELK。
我們跳過搭建過程(網上太多了)。
通過docker搭建好了elk那一套(明顯單機版),我要監控測試和線上,所以是個多采集的環境,使用了官方推薦的最新的filebeat就行log聚合,格式化還是在master用logstash。
需求
業務需求並不是很多,因為是在初期,等團隊使用熟練後,業務日誌會接入更多(專案決定)。
現在能想到的需求:
-
php執行錯誤和異常
-
api和頁面執行效能
-
mysql慢查
本人已盡對專案程式碼進行改造,執行時發生的所有異常和error都會通過json格式寫入在本地日誌目錄中,關鍵就看怎麼定義格式了滿足上面的一些需求了
思路
直接講結果吧:
-
php執行錯誤和異常
-
異常資訊,時間,具體內容
-
錯誤資訊,時間,具體內容
-
-
api和頁面執行效能
-
訪問的api地址,執行時間等
-
訪問的page地址,執行時間等
-
-
mysql慢查
-
當前執行慢的sql, 引數(去除敏感資訊)
-
從上面大致需要的監控需求來說,會發現很多共同點或者說是共有資訊欄位,比如:訪問的模組,訪問的路由,訪問的使用者,訪問的哪種型別,子型別等
考慮下上面的這些問題,大體上我們就能設計出滿足這些需求的通用日誌格式了:
格式說明:
欄位 | 型別 | es not_analyzed | 備註 |
---|---|---|---|
sid | string | ture | uuid |
time | data | ture | log生成時間 |
level | string | ture | log等級 |
msg | string | ture | 資訊簡要 |
app | string | ture | 專案名稱 |
group | string | ture | 日誌一級分類 |
object | string | ture | 日誌二級分類 |
host | string | ture | host |
client | string | ture | client |
status | number | ture | 狀態碼 |
elapsed | number | ture | 執行毫秒 |
error | string | ture | 錯誤的完整資訊 |
url | string | ture | |
route | string | ture |
例子:
php錯誤
group
: php_errormsg
: 錯誤標題error
:錯誤完整的內容,大家可自行定義
php異常
group
: exceptionmsg
: 異常標題error
:異常完整的內容,大家可自行定義
api,page 訪問效能
group
: apielapsed
: 100.123 (毫秒)url
: 具體urlroute
: 路由(聚合分類用)
mysql慢查詢
group
: dataobject
: slow_queryurl
: 具體urlerror
: 慢差的完整資訊,包括sql,params等
格式意見定義好了,滿足了之前的設計需求。
具體如何通過定義好的格式去在kibana上進行視覺化,熟悉的朋友應該能有個思路了,具體就不在這展開了。
最後
日記接入成功後,接下來只要封裝好呼叫的方法即可。
後面專案上還需要接入
-
佇列日誌
-
非同步事務日誌
具體實現思路敬請期待後面的文章。